索引的创建与使用
表名为region,字段名为Name,索引名为rn
– alter方式创建索引
alter table region add index rn(Name);
表名为region,字段名为Pid,索引名为prn
– create方式创建索引
CREATE index prn on region(Pid);
– 查看表中的索引
show index FROM region;
SELECT * FROM region where Name='青岛市';
虽然创建了索引,但是执行sql语句的时候还是使用字段名,底层的效率已经发生了变化,使用explain命令查看执行计划
– 查看sql语句的执行计划
EXPLAIN SELECT * FROM region where Name='青岛市';
EXPLAIN SELECT * FROM region where id=1;
EXPLAIN SELECT * FROM region where Pid=1;
EXPLAIN SELECT * from region WHERE Pid=2;
表名为region,索引名为rn
– 删除索引
alter TABLE region DROP index rn;
触发器的创建与使用
– 创建触发器
– BEFORE类型
CREATE TRIGGER CHECKSUM
before INSERT ON salary
for EACH ROW
set @sum=@sum+NEW.Salary -- 触发器执行的主体
SET @sum=0;
INSERT INTO salary(Name,Salary) VALUES('张三',1000),('李四',500);
SELECT @sum;
– 查看数据库中的触发器
SHOW TRIGGERS;
– 查看表的定义
DESC salary;
– 创建触发器,为表salary插入数据时,表salary2插入相同的数据,并计算新插入的数据的Salary字段的和
– AFTER类型
– 主体含有多条语句,使用begin end进行包裹
CREATE TRIGGER SomeTable
AFTER INSERT on salary
for EACH ROW
BEGIN
INSERT INTO salary2(Name,Salary) VALUES(NEW.Name,NEW.Salary);
set @sum2=@sum2+NEW.Salary;
END
SET @sum2=0;
INSERT INTO salary(Name,Salary) VALUES('王十一',200),('田十二',300);
SELECT @sum2;
– 删除触发器
drop TRIGGER SomeTable
– 禁用触发器
alter table 表名 disable trigger 触发器的名字
– 启用触发器
alter table 表名 enable trigger 触发器的名字
– 另一种创建触发器的方式
create trigger 触发器名字 on 表名
for delete(还可以是update,INSERT)
as
begin
declare @cnum char(4)
select @cnum=deleted.cnum from deleted
if exists(select cno from cj where cno=@cnum)
begin
print '待删除的课程在sc 表中存在对应的选课记录,停止操作!'
rollback tran
end
end
–测试触发器
delete from course where cnum='c001'
drop trigger delete_course