MySql事务
事务主要用于处理操作量大,复杂度高的数据。
事务的特性:
-
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
-
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
-
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分4个不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
-
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
在 MySQL 命令行操作下下,事务都是自动提交的,执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
在数据库并发过程中可能出现的错误
- 脏读,当前线程事务可以读取另一个线程事务未提交修改的数据。
- 不可重复读,事务提交前看到的数据不一致(别的线程修改提交); 线程1开启事务查询数据一个样,当线程2开启事务修改提交后,线程1再次查询发现数据修改(未提交),这就是不可重复读。
- 幻读, 可重复读级别通过MVCC机制保证事务提交前看到的数据都是一致的,但是又有一个新问题,当线程2修改完数据提交后,线程1看到的还是未修改前的原始数据,但实际底层数据已被更改,当线程1提交后发现数据改变,像幻觉一样,这就是幻读。
事务隔离级别
处理事务的方法
- 1、begin rollback commit
BEGIN 开始一个事务
。。。
ROLLBACK 事务回滚
或 COMMIT 事务确认 - 2、start transaction commit
START TRANSACION; #手动开启事务
。。。
ROLLBACK 事务回滚
或 COMMIT; #commit之后即可改变底层数据库数据
视图
使用视图时就当做一张表来使用。
测试
原始数据
创建视图
CREATE VIEW v1 AS SELECT * FROM st WHERE id>3;
查看视图
SHOW FIELDS FROM v1;
或
DESC v1;
修改视图
一、插入数据
INSERT INTO v1 VALUE(0, 'kkk');
插入后查看发现原始表和视图都插入了一条数据
注意跨表查询创建的视图不能修改
二、修改数据
三、删除数据
删除视图