目录
事务
通俗的说,事物指一组操作,要么都执行成功,要么都执行失败
使用事务: start transactino sql语句 commit/rowllback # 演示: mysql> select * from t1; +----+------+--------+ | id | name | salary | +----+------+--------+ | 1 | aa | 1000 | | 2 | bb | 2000 | | 3 | dd | 3000 | +----+------+--------+ mysql> start transaction; mysql> update t1 set salary=100 where name='aa'; mysql> select * from t1; +----+------+--------+ | id | name | salary | +----+------+--------+ | 1 | aa | 100 | | 2 | bb | 2000 | | 3 | dd | 3000 | +----+------+--------+ 3 rows in set (0.00 sec) mysql> commit;
事务的特性
原子性(Atomicity):
原子意为最小的粒子,即不能再分的事务,要么全部执行,要么全部取消
一致性(Consistency):
指事务发生前和发生后,数据的总额依然匹配#
隔离性(Isolation):
简单点说,某个事务的操作对其他事务不可见的#
持久性(Durability):
当事务完成后,其影响应该保留下来,不能撤消,只能通过“补偿性事务”来抵消之前的错误
存储引擎
InnoDB :保时捷引擎
Innodb 支持事务,支持行锁,颗粒型查找
MyIsam:奔奔引擎
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
视图
使用
比如项目有100个SQL,其中80个SQL都是select * from user where name='xxx';
增加视图
create view 视图名 as SQL语句;
删除视图
drop view 视图名
触发器
# 两张表: # 订单表 库存表 # 场景: # 当我下一个订单的时候, 订单表中需要增加一个记录, 同时库存表中需要减1 # 这两个操作是同时发生的, 并且前一个操作出发后一个操作 # # 使用方法: # 增加: delimiter // create trigger 触发器名 before insert on t2 for each row begin insert into t3(name) values('aa'); end// delimiter ; ### 当向tb1表中添加一条数据的同时, 向tb2表添加一条数据 # 删除 drop trigger 触发器名称;
存储过程
像一个SQL函数
创建
delimiter // create procedure p1() bigin select * from user where id=2; end// delimiter ; call p1()
函数
# 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 > db.sql mysqldump -uroot -p123 table1 table2 >db1-table-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;