本文共 2086 字,大约阅读时间需要 6 分钟。
一个包含多个步骤的业务操作被称为事务。如果这些操作被事务管理,那么它们要么同时成功完成,要么同时失败。这意味着事务操作的最小单位要确保数据的完整性和一致性。
START TRANSACTIONROLLBACKCOMMITCREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), balance DOUBLE);-- 插入数据INSERT INTO account (NAME, balance) VALUES ('zhangsan', 1000), ('lisi', 1000);-- 更新操作UPDATE account SET balance = 1000;-- 张三向李四转账500元START TRANSACTION;UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';COMMIT; -- 提交事务ROLLBACK; -- 回滚事务(如果发现错误)### 1.3 MySQL事务的默认提交方式- MySQL默认是自动提交事务的。- 一条DML(数据操作语言)语句会自动提交一次事务。- 查看默认提交方式:`SELECT @@autocommit;`- 修改默认提交方式:`SET @@autocommit = 0;`## 2. 事务的特征1. **原子性**:最小操作单位,确保所有操作同时成功或失败。2. **持久性**:提交或回滚后,数据库会持久保存数据。3. **隔离性**:多个事务相互独立,不会互相影响。4. **一致性**:事务执行前后,数据总量保持不变。## 3. 事务的隔离级别### 3.1 隔离级别的定义隔离级别决定了不同事务之间的数据访问规则,防止数据并发问题。### 3.2 常见问题- **脏读**:一个事务读取另一个事务未提交的数据。- **不可重复读(虚读)**:同一个事务中两次读取的数据不同。- **幻读**:一个事务操作后,另一个事务读不到修改的数据。### 3.3 隔离级别设置- **`read uncommitted`**:读未提交数据(低安全性,高并发)。- **`read committed`**:读已提交数据(Oracle默认,解决不可重复读和幻读)。- **`repeatable read`**:可重复读(MySQL默认,解决幻读)。- **`serializable`**:串行化,最高安全性。## 4. 修改隔离级别- 查看当前隔离级别:`SELECT @@tx_isolation;`- 设置全局隔离级别:`SET GLOBAL transaction_isolation level read uncommitted;`## 5. 事务的默认提交方式- 修改默认提交方式:`SET @@autocommit = 0;`## 6. DCL(数据控制语言)### 6.1 用户管理- **创建用户**:`CREATE USER 'username'@'host' IDENTIFIED BY 'password';`- **删除用户**:`DROP USER 'username'@'host';`- **修改用户密码**: ```sql SET PASSWORD FOR 'username'@'localhost' = PASSWORD('newpassword'); SELECT * FROM user;SHOW GRANTS FOR 'username'@'host';GRANT ALL ON *.* TO 'username'@'localhost';REVOKE UPDATE ON database.account FROM 'username'@'host';net stop mysqlmysqld --skip-grant-tablesmysql连接数据库:UPDATE user SET password = PASSWORD('newpassword') WHERE user = 'root';mysqld --startmysqldumpCREATE INDEXEXPLAIN语句转载地址:http://xvux.baihongyu.com/