博客整理day37
python day 37
一 事务
mysql事务 : 主要用于处理操作量大,复杂度高的数据.比如,在人员管理系统中,删除一个人员,既需要删除人员的基本资料,也要删除和该人员相关的所有信息,这些数据库操作语句就构成一个事务
#语法
#开启事务
start transaction;
#提交
commit;
#回滚
rollblack;
事务必须满足四个条件:
原子性 (Atomicity) : 原子意为最小的粒子,即不能再分的事务,要么全部执行,要么全部取消
一致性(Consistency) : 指事务发生前和发生后,数据的总额依然匹配
隔离性(Isolation) :简单来说,某个事务的操作对其他事务不可见
持久性(Durability) : 当事务完成后,其影响应该保留下来,不能撤销,只能通过'补偿性事务'来抵消之前的错误
存储引擎
1. Innodb 性能高
2. MyISAM
两个引擎的区别:
1. Innodb支持事务,MyISAM不支持
2. Innodb支持行锁,MyISAM支持表锁
视图
视图是一个虚拟表(非真实存在),其本质是[根据省钱啦语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用
#添加视图语法
create view 视图名 as SQL语句
create view teacher_view as select tid from teacher where tname='momo';
select * from teacher_view; #查询视图数据
update teacher_view set tname = 'momo2'; #修改视图中的数据
insert into teacher_view values ('momo3'); #往视图中添加数据
#修改视图
ALTER VIEW 视图名 AS SQL语句
alter view teacher_view as select * from teacher where tname='momo2';
#删除视图
DROP VIEW 视图名;
drop view teacher_view;
触发器
使用触发器可以定制用户对表进行[增,删,改]操作时前后的行为
触发器没有查询
#创建触发器
delimiter//
create trigger tri_befor_insert_tb1 befor insert on t2 for each row
begin
insert into t3(name) values('aa');
end//
delimiter;
# new表示即将插入的数据行
# old表示即将删除的数据行
#删除触发器
drop trigger 触发器名;
存储过程
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的sql
使用存储过程的优点:
1. 用于替代sql语句,实现程序与sql解耦
2. 基于网络传输,传别名的数据量小,而直接传sql数据量大
缺点:
程序员扩展功能不方便
#创建存储过程
delimiter//
create procedure p1()
begin
select * from user where id = 2;
end//
delimiter;
#使用存储过程
call p1();
#删除存储过程
drop procedere p1;
#创建存储过程(有参)
#in 仅用于传入参数用
#out 仅用于返回值用
#inout 既可以传入又可以当做返回值
函数
#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.10000'
#instr(str,substr)
返回字符串str中子字符串的第一个出现位置
#left(str,len)
返回字符串str从开始的len位置的子序列字符
#lower(str)
转换为小写
#upper(str)
转换为大写
#ltrim(str)
返回字符串str,其引导空格字符被删除
#substring(str,pos,len)
获取字符串zixulie
#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个字符组成的子序列
数据备份
#使用mysqldump实现逻辑备份
#语法
mysqldump -h服务器 -u用户名 -p密码 数据库名 >备份文件.sql
#示例
#单库备份
mysqldump -uroot -p123 db1 > db1.sql
#多库备份
mysqldump -uroot -p123 --databases 数据库名1,数据库名2 > 文件名.sql
#备份所有数据库
mysqldump -uroot -p123 --all-databases > all.sql
#重新导入
source 绝对路径;