一、事务的四个特性(ACID):
1、原子性:要么都执行,要么都回滚
2、一致性:保证数据的状态操作前和操作后保持一致
3、隔离性:多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
4、持久性:一个事务一旦提交,则数据将持久化到本地,除非其他事务对其进行修改
--事物一般流程
set autocommit=0;--关闭自动提交
start transaction;--开启事物
commit;--提交
rollback; --回滚操作
set autocommit=1;--开启自动提交
主键索引利用B+树实现
explain desc describe ;
- 1
数据库备份与恢复之Linux指令
mysqldump -uroot -p密码 库名 [表名] >/路径/库名_时间_bak;
mysqldump -uroot -p密码 库名 [表名] </路径/库名_时间_bak;
- 1
- 2
二、数据库事物并发问题
当多个事务同时操作同一个数据库的相同数据时事务的并发问题有哪些?
1、脏读:一个事务读取到了另外一个事务未提交的数据
2、不可重复读:同一个事务中,多次读取到的数据不一致
3、幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
三、事物和视图相关指令
1、通过设置事务的隔离级别
READ UNCOMMITTED
READ COMMITTED 可以避免脏读
REPEATABLE READ 可以避免脏读、不可重复读和一部分幻读
SERIALIZABLE可以避免脏读、不可重复读和幻读
- 1
- 2
- 3
- 4
2、设置隔离级别:
set session|global transaction isolation level 隔离级别名;
- 1
3、查看隔离级别:
select @@tx_isolation;
- 1
4、创建视图
CREATE VIEW 视图名 AS 查询语句;
- 1
5、查看视图数据
SELECT * FROM 视图名;
SELECT * FROM 视图名 WHERE 条件;
- 1
- 2
6、插入视图的数据
INSERT INTO 视图名(字段1,字段2,...) VALUES(值1,值2,...);
- 1
7、修改视图的数据
UPDATE 视图名 SET 字段名=新值 WHERE 条件;
- 1
8、删除视图的数据
DELETE FROM 视图名;
- 1
9、视图的删除
DROP VIEW 视图1,视图2,...;
- 1
10、视图结构的查看
DESC 视图名;
SHOW CREATE VIEW 视图名;
- 1
- 2
11、包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all的视图不能更新
Select中包含子查询
join
from一个不能更新的视图
where子句的子查询引用了from子句中的表
- 1
- 2
- 3
- 4
12、视图逻辑的更新
--方式一:
CREATE OR REPLACE VIEW 视图名
AS 别名
SELECT 字段名 FROM 表名
WHERE 条件;
--方式二:
ALTER VIEW 视图名
AS 别名
SELECT 字段名 FROM 表名;
SELECT * FROM 视图名;
- 7
- 8
- 9
- 10
四、触发器
1、创建触发器
create trigger 触发器名 before|after 事件 on 表名 for each row 触发后执行语句
- 1
insert:新增记录,没有旧纪录;
delete:删除旧纪录,没有新纪录;
update:有变更后的新纪录,也有被变更的旧纪录;
2、触发器创建的标准命令
CREATE TRIGGER 触发器名
before|after
insert|update|delete
ON 表名
FOR EACH ROW
BEGIN
触发语句1;触发语句2;...触发语句n;
END;
- 7
- 8
3、查看触发器
show triggers;
SELECT * FROM information_schema.`TRIGGERS`;
- 1
- 2
4、删除触发器
drop trigger 触发器名;
- 1