当前位置: 移动技术网 > IT编程>数据库>Mysql > 五、事务、视图、触发器、存储过程、函数和备份

五、事务、视图、触发器、存储过程、函数和备份

2019年11月02日  | 移动技术网IT编程  | 我要评论

一、事务transaction

(一)什么是事务

事务是指一组操作,要么都执行成功,要么都执行失败

  1. start transaction:开启事务
  2. commit:提交确认
  3. rollback:回滚,撤销
# 语法
start transaction;
sql语句
commit/roll back;

# 1. 事务下的代码在commit之后才会生效
# 2. 事务下的代码rollback之后会失效

(二)事务的acid特性

(1)原子性atomicity

指不能再分的事务,要么全部成功,要么全部失败

(2)一致性consistency

事务发生前和发生后,数据的总额依然匹配

(3)隔离性isolation

某个事务的操作对其他事物不可见

(4)持久性durability

当事务完成后,其影响应该保留下来,不能撤销,不能通过“补偿性事务”来抵消之前的影响

(二)存储引擎engine

create table user(
id int auto_increment primary key,
name varchar(10))
)engine = innodb charset utf8;

(1)innodb

相当于保时捷引擎,mysql5.5以上默认使用innodb引擎

  1. innodb支持事务
  2. innodb支持行锁

(2)myisam

相当于奔奔引擎,淘汰的引擎

  1. myisma不支持事务
  2. myisam支持表锁

二、视图view

视图是一个虚拟表,用来存储查询语句的结果,相当于把子查询中的嵌套语句用一个变量存储

(一)增加视图

create view 视图名 as sql语句;

create view v1 as select * from user where name = 'wick';

# 使用
select  * from v1;

当改变视图中数据时,原始表中的数据也会跟着修改

(二)删除视图

drop view 视图名;

三、触发器trigger

使用触发器可以定制用户对表进行增、删、改操作时前后的行为,使其自动触发

(一)创建触发器

# 每次向表1新增数据前/后,也向表2张红插入值
delimiter //  # 更改分解符为// 
create trigger 触发器名
before/after  
insert on 表名1 for each row
begin
insert into 表名2 (字段) values (值);
end //

delimiter ;  # 更改分解符为;

(二)查看和删除触发器

# 查看触发器
show triggers\g

# 删除触发器
drop trigger 触发器名

四、存储过程procedure

存储过程包含了一系列可执行的sql语句,直接调用名字使用sql语句,就像一个函数

(一)创建存储过程

# 示例
delimiter //
create procedure p1()
begin
select * from user where id = 2;
end //
delimiter ;

# 调用
call p1();

(二)删除存储过程

drop proedure p1;

五、函数

mysql内置函数

  1. char_length(str):返回字符串的长度
  2. concat(str1,str2):字符串拼接
  3. format(x,d):将x的值保留d为小数
  4. instr(str,substr):返回字符串str中子字符串的第一个出现位置
  5. lower(str):小写
  6. upper(str):大写
  7. ltrim(str):相当于lstrip,去除左边空格
  8. rtrim(str):相当于rstrip,去除右边空格
  9. repeat(str,count):返回一个str重复count次的字符串
  10. replace(str,from_str,to_str):将str中的from_str替换成to_str
  11. reverse(str):反转str
  12. left(str,len):返回str前len个字符
  13. right(str,len):返回str后len个字符

更多函数见

六、数据库备份

# 语法
mysqldump -h 主机名 -u用户名 -p密码 数据库名 [表名 表名];

# 1. 单库备份
mysqldump -uroot -p123 db1 > db1.sql  # 备份库
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

# 2. 多库备份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

# 3. 备份所有库
mysqldump -uroot -p123 --all-databases > all.sql

# 4. 重新导入
source d:/test3.sql

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网