复制终端命令
tee D:/a.lg #将这行下面的命令复制到目录下
事务
通俗的说,事务指的是一组操作,要么都执行成功,要么都执行失败,只针对表数据,不能表字段。
语法:
start transaction;
sql语句;#sql语句只会在start和cimmit都存在才会执行
commit/roolback;
start transaction:开启事务
commit :提交
rollback:回滚,撤销事务的所有影响
例子:
我去银行给朋友汇款,我卡上有1000,朋友卡里有1000,我给盆友转账100,如果我的钱刚扣,而朋友的钱没有加时,网线断了,怎么办
演示:
create table user(
id int auto_increment primary key,
name varchar(32) not null default '',
salary int not null default 0
)charset=utf8;
insert into user (name,salary) values ('zekai',1000),('min',1000);
start transaction;
update user set salary=900 where name='zekai';
select * from user;
update user set salary=1100 where name='min';
select * from user;
commit;#提交
start transaction;
update user set salary=900 where name='zekai';
select * from user;
update user set salary=1100 where name='min';
select * from user;
rollback;#回滚,影响所有
特性:
原子性:原子意味最小的粒子,即不能再分的事务,要么全部执行,要么全部取消。
一致性:指事务发生前后,数据的总额依旧匹配
隔离性:简单点说,某个事务的操作对其他事务不可见
持久性:当事务完成后,其影响应该保留下来,不能撤销,只能通过“补偿性事务”来抵消之前的错误
存储引擎:
Innodb:保时捷引擎
Myisam:奔奔引擎
建表的时候,
create table user (
id int auto_increment primary key,
name varchar(32) not null default '',
salary int not null default 0
)engine=Innodb charset utf8;
mysql5.5以上,默认用的就是Innodb
两个引擎的区别:
1.Innodb支持事务,Myisam不支持
2.Innodb支持行锁,Myisam支持表锁
视图
#增加视图
create view 视图名 as sql语句;
#删除视图:
drop view 视图名;
例子:
select * from usesr where name='zekai';
create view v1 as select * from usesr where name='zekai';
show tables;
select * from v1;
触发器
两张表:
订单表 库存表
场景:
当下一个订单的时候,订单表需要增加一个记录,同时库存表中需要减1,这两个操作是同时发生,并且前 一个操作触发后一个操作
使用方法
#增加:
delimiter //
create trigger 触发器名 before insert on 表名 for each row
begin
insert into 表名(字段名) values (值);
end //
delimiter ;
#删除:
drop trigger 触发器名
存储过程
类似于一个SQL函数
#创建
delimiter //
create procedure 存储名()
begin
select * from 表名 where 条件;
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个字符串组成的子序列。
数据库备份
为啥要备份:
将重要的数据保存下来
用法
mysqldump -h 服务器 -u 用户名 -p 密码 数据库名,表名...>aaa.sql
# 单库备份:
mysqldump -uroot -p123 db1>D:/db1.sql
mysqldump -uroot -p123 db1 table1>D:/db1.sql
#多库备份
mysqldump -uroot -p123 --databases db1 db2>D:/db1_db2.sql
# 备份所有库
mysqldump -uroot -p123 --all-databases>all.sql
#重新导入
mysql>source D:/db1.sql;