在表中加一列属性的方法
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 使用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; # 触发结束标识