十、创建索引查询:
- 特点:① 索引创建是以列为单位的
1、索引查询的目的:
(1)目的:
可以提高数据库管理系统的查找速度,而且还可以保证字段的唯一性,从而实现数据库表的完整性
(2)索引创建的条件:
以下情况下适合创建索引:
• 经常被查询的字段,即在WHERE子句中出现的字段。
• 在分组的字段,即在GROUP BY子句中出现的字段。
• 存在依赖关系的子表和父表之间的联合査询,即主键或外键字段。
• 设置唯一完整性约束的字段。
以下情况下,不适合创建索引:
• 在查询中很少被使用的字段。
• 拥有许多重复值的字段。
2、索引(index)查询的操作:增、删、改、查
(1)创建索引(index)与 unique key:
① 在创建表的时候创建
② 表已经存在时,用 create 创建索引 :
用法:create 索引类型 索引名 on 表名(字段名[(长度)] [asc|desc])
实例:create index date_index on depositer(dep_date);
create unique index date_index on depositer(dep_date);
- 注意:① 这种方式可以创建普通索引(index)和 unique key,如果想要创建 foreign key
- 时 需要用 alter 创建(https://blog.csdn.net/qq_16555103/article/details/86011130#t48 --- 第七节)
③ 修改表语句 创建 alter:
用法: alter table 表名 add 索引类型 索引名(字段名[(长度)] [asc|desc])
其中: 索引类型:insex 普通键 ;unique key 唯一键
如果想要删除 primary key 与 foreign key 方法 查看:
https://blog.csdn.net/qq_16555103/article/details/86011130#t48 --- 第七节
实例:alter table depositer add index amount_index(amount);
(2)修改索引:
删了重建
(3)删除索引:
① 删除普通索引:
1) drop:
drop index 索引名 on 表名;
2)alter:
alter table 表名 drop index 索引名;
②删除 主键、唯一键、外键:
https://blog.csdn.net/qq_16555103/article/details/86011130#t48 --- 第七节
3、创建全文索引(fulltext index):
(1)目的:
能够更加快速地查询数据量较大的字符串类型的字段
(2)创建方法:
create fulltext index 索引名 on table名 ([(长度)] [asc | desc]);
(3) 创建全文索引后关键字查询的方法:
select * from table名 where match(fulltext的字段名) against("关键字");
- 注意:数据库 关键字 默认字符数 >= 3,小于这个数目 无法搜索。
(4)删除全文索引:
drop index fulltext索引名 on table名;
十一、存储过程的操作:
- 特点:相当于函数,将sql 语句封装起来,存储到 mysql 服务器 的硬盘里,客户端直接调用传参即可执行。
1、mysql 定义变量:
(1)用户变量(全局变量)定义方法:
set @user_name = "张三" ---------- @是固定格式,使用变量时要加@
select @user_name --------- select 打印到控制台
(2)存储过程(函数)中定义变量:
create procedure procedure_test(in uname varchar(20))
begin
DECLARE test VARCHAR; --------- 声明变量,过程中的变量不必加 @
set test = '1'; --------- 赋值
select test;
end
2、创建 procedure:
(1)定义 变量 类型 为 in (输入) 的存储过程:
// 定义 变量 类型 为 in (输入) 的存储过程
----------------------------------------------------------------
创建格式:
创建 存储过程 存储过程名字(输入还是输出 变量 变量类型,....)
开始
你要执行的sql语句
结束
--------------------------------------------------------------------
create procedure name_get_info(in uname varchar(11))
BEGIN
select info from customer where name = uname;
END
调用 存储过程名字(参数);
call name_get_info("郭富城");
call name_get_info("刘德华");
(2)out 类型(输出)存储过程 :
题目:获取所有人的总钱数,保存在变量里
create procedure getTotalMoney(out umoney dec(8,2))
BEGIN
SELECT sum(amount) into umoney from depositer;
END;
call getTotalMoney(@totalmoney);
select @totalmoney;
(3)inout 类型 -- 输入兼输出
题目:输入一个人的id 返回这个人的月薪
create procedure id_get_salary(inout id_wage int) ------- 兼输入(in)和输出(out)
BEGIN
select salary into id_wage from customer where c_id = id_wage;
END
set @suibian=1005;
call id_get_salary(@suibian);
select @suibian;
3、查看存储过程:
show procedure status where db = "查询存储过程的数据库名";
4、删除存储过程:
drop procedure 过程名;
5、sql 中的条件语句 与 循环语句:
(1)条件语句: if else
----- if else
create procedure poorandrich(in uname varchar(10))
BEGIN
DECLARE money int;
select wage into money from staff where name = uname;
IF money>=5000 THEN ----- IF THEN -----
select concat(uname,'富人');
ELSE
SELECT concat(uname,'穷人');
end if;
END;
call poorandrich('张星');
(2)循环语句: loop
十二、触发器:
- 特点:① 创建以后存储在硬盘上
- ② 触发器只作用于 insert 、update、delete 这三个语句
创建规则:
create trigger trigger名
after | before 触发器事件 on 触发器table名 for each row
begin
触发器作用于其他table的sql语句
end
1、插入触发器:insert 语句
当添加一条订单的时候,商品表中的库存数据更新
create trigger order_insert_goods_delete
after insert on goodsorder for each ROW
BEGIN
update goods set goods_num=goods_num - new.num where id=new.gid;
------- new 指的是 触发器表 当前触发事件 的数据行,new.num是触发数据行的 新数据行的 num字段内容------
END;
2、更新触发器:update
当更新一条订单的时候,商品表中的库存数据更新
create trigger update_order
after update on goodsorder for each ROW
BEGIN
update goods set goods_num=goods_num + (old.num-new.num) where id = new.gid;
----在 更新的时候 new 代表 更新后的数据 old 代表 原来的数据------
END
3、 删除触发器 :delete
在删除一条订单的时候,把订单的数量还原到 商品表
create trigger delete_order
after delete on goodsorder for each row
BEGIN
update goods set goods_num=goods_num + old.num where id=old.gid;
END
4、查看触发器:
show triggers;
5、删除触发器:
drop trigger trigger_name;
十三、事务: