在表中加一列属性的方法

alter table添加表列的语法:
ALTER TABLE table_name
ADD column_name datatype;

例:
在actor表,包含如下列信息:

CREATE TABLE actor (
 actor_id smallint(5) NOT NULL PRIMARY KEY,
 first_name varchar(45) NOT NULL,
 last_name varchar(45) NOT NULL,
 last_update datetime NOT NULL);


现在在last_update后面新增加一列名字为create_date, 类型为datetime, NOT NULL,默认值为’2020-10-01 00:00:00’
解:

alter table actor
 add create_date datetime not null default ‘2020-10-01 00:00:00’

对表某字段创建索引

强制索引1
sqlite使用索引查询的语法为

SELECT | DELETE | UPDATE column1, column2…
 INDEXED BY (index_name)
 table_name
 WHERE (CONDITION);


“INDEXED BY index-name” 子句规定必须用命名的索引来查找前面表中值,如果索引名 index-name 不存在或不能用于查询,SQLite 语句的查询失败。

强制索引2
force index (index_name)


针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,使用强制索引。
1.select * from salaries indexed by idx_emp_no where emp_no =10005 2.select * from salaries force index (idx_emp_no) where emp_no=10005

创建索引

  1. 创建索引
    1.1 使用Alter创建索引
    1 添加主键索引

特点:数据列不允许重复,不能为null,一张表只能有一个主键;Mysql主动将该字段进行排序

1
ALTER TABLE 表名 ADD Primary key (col);
添加唯一索引

特点:索引列是唯一的,可以null;Mysql主动将该字段进行排序

1
ALTER TABLE 表名 ADD unique <索引名> (col1, col2, …col3);
添加普通索引

特点:添加普通索引, 索引值不唯一,可为null

1
Alter table 表名 ADD index <索引名> (col1, col2, …,);
添加全文索引

特点:只能在文本类型CHAR,VARCHAR, TEXT类型字段上创建全文索引;

1
ALTER TABLE 表名 ADD Fulltext <索引名> (col)
添加多列索引

特点:多列是唯一的

1
ALTER TABLE 表名 ADD UNIQUE (col1, col2, …, )
1.2 使用Create创建索引

语法:create index 索引名 on 表名(字段)

添加唯一索引
1
create index 索引名 on 表名(col1, col2, …, )
添加普通索引
1
create unique index 索引名 on 表名(col1, col2, …, )
1.3 两种创建索引方式的区别
Alter可以省略索引名。如果省略索引名,数据库会默认根据第一个索引列赋予一个名称;Create必须指定索引名称。

Create不能用于创建Primary key索引;

Alter允许一条语句同时创建多个索引;Create一次只能创建一个索引

1
ALTER TABLE 表名 ADD Primary key (id), ADD index <索引名> (col1, col2, …,)
1.4 索引执行效率分析

主键索引 > 唯一性索引 > 普通索引

2 删除索引
第一种方式
1
drop index 索引名 on 表名;
第二种方式
1
Alter table 表名 drop index 索引名;
第三种方式
1
Alter table 表名 drop primary key

分析: > > 1. 第三种方式只在删除primary key中使用。因一个表只能存在一个primary key索引,则不需要指定索引名; > 2. 对于第三种方式,若没有创建primary key索引,但表中具有一个或多个unique索引,则默认删除第一个unique索引; > 3. 若删除表中的某列,索引会受到影响。对于多列组合的索引,如果删除其中的某一列,则该列会从对应的索引中被删除(删除列,不删除索引);多删除组成索引的所有列,则索引将被删除(不仅删除列,还删除索引)。</索引名></索引名></索引名></索引名>

构造触发器

构造触发器语法:

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

create trigger audit_log                # 触发器名称
after insert on employees_test          # 触发时机:after,触发事件:insert,向 employees_test 插入数据时
for each row                            # 执行范围
begin                                   # 触发开始的标识
     insert into audit values(new.id,new.name)       # 触发后具体干什么,在本题是向 audit 表插入数据操作
end;                                    # 触发结束标识