view
View is a virtual table
create view 视图名 select * from 数据库;
trigger
Triggers can be customized using user table add, delete, change before and after the conduct of operations.
- Creating Triggers
# 插入前
create trigger tri_before_insert_tb1 before insert on tb1 for each row
BEGIN
...
END
# 插入后
create trigger tri_after_insert_tb1 after insert on tb1 for each row
BEGIN
...
END
# 删除前
create trigger tri_before_delete_tb1 before delete on tb1 for each row
BEGIN
...
END
# 删除后
create trigger tri_after_delete_tb1 after delete on tb1 for each row
BEGIN
...
END
# 更新前
create trigger tri_before_update_tb1 before update on tb1 for each row
BEGIN
...
END
# 更新后
create trigger tri_after_update_tb1 after update on tb1 for each row
BEGIN
...
END
# 删除触发器
如: drop trigger tri_after_insert_cmd;
Examples
create table cmd(
id int primary key auto_increment,
user varchar(32),
priv varchar(10),
cmd varchar(64),
sub_time datetime, # 提交时间
success enum('yes', 'no') # 0代表执行失败
);
create table errlog(
id int primary key auto_increment,
err_cmd char(64),
err_time datetime
);
# 创建触发器
delimiter //
create trigger tri_after_insert_cmd after insert on cmd for each row
BEGIN
if NEW.success = 'no' THEN
insert into errlog(err_cmd, err_time) values(NEW.cmd, NEW.sub_time);
END IF;
END//
delimiter ;
# 往cmd表中插入记录,触发触发器,根据IF的结果决定是否插入错误日志
insert into cmd(user, priv, cmd, sub_time, success) values('nihao', '1111', 'ls -alh', NOW(), 'yes');
# 查询错误日志
select * from errlog;
Stored Procedures
Stored procedure contains a series of executable sql statements, stored procedures stored in MySQL, you can do it inside sql by calling its name.
- advantage
- Used to replace programmers to write sql statement, sql implement procedures and decoupling.
- Network-based transmission, data transmission amount is small alias, sql direct transfer large volumes of data.
- Shortcoming
- Programmers want to extend the functionality is not convenient
Create a stored procedure with no parameters
delimiter //
create procedure 存储过程名()
BEGIN
select * from class;
END //
delimiter ;
# 查看创建的存储过程
show create procedure 存储过程名;
# 存储过程的调用
## mysql中
call 存储过程名();
## Pythonz中
cursor.callproc('存储过程名')
Create a stored procedure with no parameters
delimiter //
create procedure 存储过程名(in n1 int, in n2 int, out ret int)
BEGIN
select * from teacher where tid > n1 and tid < n2;
set ret=1;
END //
delimiter ;
# 存储过程的调用
## mysql中
set @x;
call 存储过程名(1, 3, @x);
select @x;
## Python中
cursor.callproc('存储过程名', (1, 3, 0))
cursor.execute('select @_存储过程名_2;')
cursor.fetchone()
Affairs
A plurality of transaction for some SQL operations as an atomic operation, once an error occurs, can be rolled back to the original state, thereby ensuring the integrity of data in the database.
create table user(
id int primary key auto_increment,
name varchar(32),
balance int
);
insert into user(name, balance) values('xxx', 1000), ('yyy', 1000);
# 开启事务
start transaction;
update user set balance=900 where name='xxx';
update user set balance=800 where name='xxx';
commit;
# 出现异常就回滚到初始状态
start transaction;
update user set balance=900 where name='xxx';
update user set balance=800 where name='xxx';
rollback;
commit;
function
Please Baidu built-in functions.
Custom Functions
delimiter //
create function f1(
i1 int,
i2 int)
returns int
BEGIN
declare num int;
set num = i1 + i2;
return(num);
END //
delimiter ;
delimiter //
create function f(
i int
)
returns int
begin
declare ret int default 0;
if i = 10 then
set ret = 100;
elseif i=20 then
set ret = 200;
elseif i=30 then
set ret = 300;
else
set ret = 400;
end if;
return ret;
end //
delimiter ;
Delete function
drop function func_name;
Perform functions
# 获取返回值
select upper('xxx') into @res;
select @res;
# 查询中使用
select f1(i1, nid), name from tb2;