博客整理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 绝对路径;
原文地址:https://www.cnblogs.com/samoo/p/11787306.html