博客
关于我
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/

你可能感兴趣的文章
python基础之---函数式编程
查看>>
Python基础——MySQL数据库基本操作
查看>>
Python基础_列表 list
查看>>
python基础---->常用模块
查看>>
Python基础(2):控制结构
查看>>
Python基础 | 关于“循环”那些事
查看>>
python系列【仅供参考】:python 远程rdp
查看>>
python基于flask搭建http服务(四)—— Docker容器化部署
查看>>
Python块键盘/鼠标输入
查看>>
python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
查看>>
python在gpu上运行_【python】python开启GPU加速
查看>>
Python在def函数中使用for循环
查看>>
Python在def函数中使用for循环
查看>>
Python在Conda环境中,但在Windows虚拟环境中没有激活
查看>>
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>