MySQL增删改查,多表查询,视图,存储过程,存储函数,游标。
DDL
表操作-修改
添加字段
1 | alter table 表名 add 字段名 类型(长度) [约束]; |
修改数据类型
1 | alter table 表名 modify 字段名 新数据类型(长度); |
修改字段名和字段类型
1 | alter table 表名 change 旧字段名 新字段名 类型(长度) [约束]; |
删除字段
1 | alter table 表名 drop 字段名; |
修改表名
1 | alter table 表名 rename to 新表名; |
约束
外键
1 | constraint 外键名称 foreign key 外键字段名 references 主表(列名) |
1 | alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名); |
索引
-
创建索引
1
create index index_name on table_name (index_col_name, ...);
-
查看索引
1
show index from table_name;
-
删除索引
1
drop index index_name on table_name;
视图
-
创建视图
1
create view view_name as select语句
-
查询
1
2
3
4# 查看视图语句
show create view view_name;
# 查看视图数据
select * from view_name ...; -
修改
1
2create [or replace] view view_name as select语句;
alter view view_name as select语句; -
删除
1
drop view [if exists] view_name ...;
存储过程
-
创建
1
2
3
4create procedure 存储过程名称([[in or out]参数列表])
begin
-- SQL语句
end; -
调用
1
call 名称 ([参数]);
-
删除
1
drop procedure [if exists] procedure_name ...;
参数
类型 | 含义 | 备注 |
---|---|---|
IN | 作为输入 | 默认 |
OUT | 作为输出,返回值 | |
INOUT | 即可作为输入参数也可作为输出参数 |
变量
-
查看系统变量
1
2
3SHOW [ SESSION | GLOBAL ] VARIABLES ; -- 查看所有系统变量
SHOW [ SESSION | GLOBAL ] VARIABLES LIKE '......'; -- 可以通过LIKE模糊匹配方式查找变量
SELECT @@[SESSION | GLOBAL] 系统变量名; -- 查看指定变量的值 -
设置系统变量
1
2SET [ SESSION | GLOBAL ] 系统变量名 = 值 ;
SET @@[SESSION | GLOBAL] 系统变量名 = 值 ; -
用户自定义变量赋值
1
2
3
4
5SET @var_name = expr [, @var_name = expr] ... ;
SET @var_name := expr [, @var_name := expr] ... ;
SELECT @var_name := expr [, @var_name := expr] ... ;
SELECT 字段名 INTO @var_name FROM 表名; -
自定义变量使用
1
SELECT @var_name
局部变量
1 | # 声明 |
条件/循环语句
1 | if 条件 then |
1 | while 条件 do |
1 | -- 先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。如果不满足,则继续下一次循环 |
1 | [begin_label:] LOOP |
游标
-
声明游标
1
declare 游标名称 cursor for 查询语句;
-
打开游标
1
open 游标名称;
-
获取游标
1
fetch 游标 into 变量 [, 变量 ...];
-
关闭游标
1
close 游标名称;
示例
1 | create procedure p8() |
MySQL游标的关闭是通过处理异常来关闭的。
1 | declare continue handler for not found set flag := false; |
触发器
触发器是与表相关的数据库对象,指在insert/update/delete
之前before
或之后after
,触发并执行触发器中定义的SQL语句。
触发器类型 | NEW 和 OLD |
---|---|
INSERT | NEW 表示将要或者已经新增的数据 |
UPDATE | OLD 表示修改之前的数据,NEW表示将要或已经修改后的数据 |
DELETE | OLD 表示将要或者已经删除的数据 |
-
创建
1
2
3
4
5
6create trigger trigger_name
before/after insert/update/delete
on tb1_name for each row -- 行级触发器
begin
-- SQL执行
end; -
查看
1
show triggers;
-
删除
1
drop trigger trigger_name;
示例
1 | create trigger supplier_delete_trigger |