使用索引的区间:
当我们使用索引后,查询指定数据返回的数据是总数据的3%-5%我们认为是合适的。
少量数据不适合用索引
索引时候数据结构,可以加快我们查询的效率,但是创建索引需要复制数据,会占用资源。
使用索引注意:
1、少量数据不使用数据
2、查询次数少不使用索引
3、查询要携带索引字段,通常放在select之后第一个
4、索引提高了查询的效率,占有跟多的资源。
设立索引:
1、普通索引 --- 可以为空、可以重复
ALTER TABLE 表名 add index (字段名);
2、唯一索引 --- 可以为空、不可重复
ALTER TABLE 表名 ADD UNIQUE (字段名);
or
ALTER TABLE 表名 ADD 字段名 type UNIQUE;
3、主键索引 --- 不可为空、不可重复
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
4、多列索引
ALTER TABLE 表名 ADD INDEX(字段名1,字段名2...)
什么时候适合用视图?
当查询的复杂度比较大,多表,多关系,会导致查询语句混乱,不利于sql语句的编写和编 写的sql语句的可读性。于是mysql推出了试图模式。
视图的优缺点:
试图优点:
1、简单,试图构建了一个虚拟的逻辑表,这个表里面的数据来自于指定的查询,而查询可 以是多表联查。在使用的时候,我们可以直接对试图表里面的数据进行查询,不用从原始 表查。
2、安全,数据库有权限设置,但是没有对行和列的权限。所以如果对一个表里的数据设置 不同的权限,mysql本身的权限设置有些不够,我们用试图查询出用户需要的数据,用户基 于试图进行查询。
3、数据独立,一旦试图试图的结构决定,可以屏蔽表结构变化给用用户带来的影响,在原 表当做增加一列。
试图的缺点:
试图会降低查询的效率。尤其在试图当做的查询当做再次使用试图。
创建视图:
CREATE VIEW 视图名 AS(查询语句);
例如:CREATE VIEW tb2_auto_add AS(select * from student where gender = '女');
使用视图:
SELECT * FROM 视图名 where 查询条件;
查看所有视图:
SHOW TABLE STATUS WHERE COMMENT = "view";
删除视图:
DROP VIEW 视图名;
触发器:
创建两个表:
CREATE TABLE tb1(name CHAR(20),age INT));
CREATE TABLE tb2(name CHAR(20),age INT));
创建触发器:
DELIMITER ||
CREATE TRIGGER tb2_auto_add
AFTER
INSERT ON tb1 FOR EACH ROW
BEGIN
INSERT INTO tb2(name,age)
value("学习",22);
end
||
DELIMITER || 声明mysql的结束符,默认结束符是;
向tb1插入数据(记得将结束符调回默认;)
DELIMITER ;
insert into tb1(name,age) value("炸弹",82);
查看tb2 (自动添加一行数据)
触发器:
时间:
BEFOR 在触发器之前
AFTER在触发事件之后
事件:
UPDATE 更新事件
DELETE 删除事件
INSERT 插入事件
查看触发器:
SELECT * FROM information_scheme.triggers;
删除触发器:
DROP TRIGGER 触发器名;
注意:
在触发器当中,NEW变量代表触发表。
DROP TRIGGER 触发器名;
DELIMITER ||
create trigger tb5_add_tb3_id_1 after insert ON tb3
for each row
begin
insert into tb5(tb3_id) value(NEW.id);
end
||