五、事务、视图、触发器、存储过程、函数和备份
程序员文章站
2024-01-01 20:09:40
[toc] 一、事务transaction (一)什么是事务 事务是指一组操作,要么都执行成功,要么都执行失败 1. start transaction:开启事务 2. commit:提交确认 3. rollback:回滚,撤销 (二)事务的ACID特性 (1)原子性Atomicity 指不能再分的 ......
一、事务transaction
(一)什么是事务
事务是指一组操作,要么都执行成功,要么都执行失败
- start transaction:开启事务
- commit:提交确认
- 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引擎
- innodb支持事务
- innodb支持行锁
(2)myisam
相当于奔奔引擎,淘汰的引擎
- myisma不支持事务
- 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内置函数
- char_length(str):返回字符串的长度
- concat(str1,str2):字符串拼接
- format(x,d):将x的值保留d为小数
- instr(str,substr):返回字符串str中子字符串的第一个出现位置
- lower(str):小写
- upper(str):大写
- ltrim(str):相当于lstrip,去除左边空格
- rtrim(str):相当于rstrip,去除右边空格
- repeat(str,count):返回一个str重复count次的字符串
- replace(str,from_str,to_str):将str中的from_str替换成to_str
- reverse(str):反转str
- left(str,len):返回str前len个字符
- 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