day 36 mysql 事务
01.事务
-
事务指一组操作,要么都执行成功,要么都执行失败
-
transaction
start transaction; # 开启一个事务 # 对数据进行操作 commit; # 组合操作执行成功,提交修改结果 rollback; # 撤销本次事务操作
-
事物的特性(ACID);
- 原子性(Atomicity);原子意为最小的粒子,代表事务不能被分割,要么全部执行,要么全部取消(防止数据出错)
- 一致性(Consistency);指事物发生前后数据总额依然相同
- 隔离性(Isolation);再本次事务尚未提交之前,对数据的操作无法被其他操作获取到
- 持久性(Durability);事务操作完成后,其对数据的影响被保存下来,不能撤销,只能通过‘补偿性事务’来抵消之前的错误。
-
存储引擎;
-
InnoDB;高效引擎,不写默认使用Innodb
create table 表名( id int auto_increment primary key, 字段名 类型 约束性 , ...... )engine = Innodb charset utf8;
-
MyIsam;低效引擎
-
区别;
- innodb支持事务,支持行锁,精度更高
- myisam不支持事务,支持表锁
-
-
pass
02.了解性
-
视图;view
-
用于项目中存在大量重复性查询sql语句
-
视图是一个特殊的表,将该sql语句执行的结果保存到该表中
-
通过查看这个表来,查看该sql语句执行的结果,但非常消耗性能
create view 视图名 as sql语句; # 创建视图 drop view 视图名; # 删除视图 select * from 视图名; # 查看该视图执行效果
-
-
触发器;trigger
-
delimiter修改结束符
-
当你执行某一操作时,自动执行另一个操作
delimiter // create trigger 触发器名 before 触发条件 insert on 表名 for each row begin 被触发后要执行的操作 end // delimiter; # 将结束符改回来
-
-
存储过程;procedure
-
像定义一个SQL函数
-
创建
delimiter // create procedure 名字() begin sql语句; end // delimiter ; call 名字(); # 调用这个函数 drop procedure 名字; # 删除该过程
-
-
函数
CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。 对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。 CONCAT(str1,str2,...) 字符串拼接 如有任何一个参数为NULL ,则返回值为 NULL。 FORMAT(X,D) 将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。 例如: SELECT FORMAT(12332.1,4); 结果为: '12,332.1000' INSTR(str,substr) 返回字符串 str 中子字符串的第一个出现位置。 LEFT(str,len) 返回字符串str 从开始的len位置的子序列字符。 LOWER(str) 变小写 UPPER(str) 变大写 LTRIM(str) 返回字符串 str ,其引导空格字符被删除。 RTRIM(str) 返回字符串 str ,结尾空格字符被删去。 SUBSTRING(str,pos,len) 获取字符串子序列 LOCATE(substr,str,pos) 获取子序列索引位置 REPEAT(str,count) 返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。 若str 或 count 为 NULL,则返回 NULL 。 REPLACE(str,from_str,to_str) 返回字符串str 以及所有被字符串to_str替代的字符串from_str 。 REVERSE(str) 返回字符串 str ,顺序和字符顺序相反。 RIGHT(str,len) 从字符串str 开始,返回从后边开始len个字符组成的子序列
-
数据的备份
-
将重要的数据保存下来
# 语法 ## 退出mysql后使用 mysqldump -h 服务器 -u用户名 -p密码 库名 表名1,表名2,......>保存文件名.sql # 单库备份 mysqldump -uroot -p123 db1 > db1.sql mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql # 多库备份 mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql # 备份所有库 mysqldump -uroot -p123 --all-databases > all.sql # 重新导入: mysql> source D:/test3.sql;
-
-
pass