博客
关于我
MySQL_事务和DCL
阅读量:246 次
发布时间:2019-03-01

本文共 2086 字,大约阅读时间需要 6 分钟。

事务与数据库事务管理

1. 事务的基本概念

1.1 事务的概念

一个包含多个步骤的业务操作被称为事务。如果这些操作被事务管理,那么它们要么同时成功完成,要么同时失败。这意味着事务操作的最小单位要确保数据的完整性和一致性。

1.2 事务的操作

  • 开启事务START TRANSACTION
  • 回滚ROLLBACK
  • 提交COMMIT
  • 示例
    CREATE 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;

6.2 权限管理

  • 查询权限SHOW GRANTS FOR 'username'@'host';
  • 授予权限GRANT ALL ON *.* TO 'username'@'localhost';
  • 撤销权限REVOKE UPDATE ON database.account FROM 'username'@'host';

6.3 MySQL密码重置

  • 如果忘记root用户密码:
  • 关闭MySQL服务:net stop mysql
  • 启动MySQL:mysqld --skip-grant-tables
  • 使用mysql连接数据库:
    UPDATE user SET password = PASSWORD('newpassword') WHERE user = 'root';
  • 关闭服务并重新启动:mysqld --start

7. 常见问题解决

  • MySQL服务无法启动:确保安装了正确的MySQL版本,检查服务配置文件。

8. 数据库优化

  • 定期备份数据库:mysqldump
  • 使用索引:CREATE INDEX
  • 优化查询:EXPLAIN语句

转载地址:http://xvux.baihongyu.com/

你可能感兴趣的文章
Open××× for Linux搭建之二
查看>>
Open×××有线网络时使用正常,无线网络时使用报错的解决方案
查看>>
Opera Mobile Classic Emulator
查看>>
Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
查看>>
OperationResult
查看>>
Operations Manager 2007 R2系列之仪表板(多)视图
查看>>
operator new and delete
查看>>
operator new 与 operator delete
查看>>
operator() error
查看>>
OPPO K3在哪里打开USB调试模式的完美方法
查看>>
oppo后端16连问
查看>>
OPPO软件商店APP侵权投诉流程
查看>>
Optional用法与争议点
查看>>
Optional类:避免NullPointerException
查看>>
Optional讲解
查看>>
ORA-00069: cannot acquire lock
查看>>
ORA-00923: 未找到要求的 FROM 关键字
查看>>
ORA-00932: inconsistent datatypes: expected - got NCLOB【ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 】【解决办法】
查看>>
ORA-00942 表或视图不存在
查看>>
ORA-01034: ORACLE not available
查看>>