MySQL语句整理及汇总介绍


当前第2页 返回上一页

有如下的表temp

CREATE TABLE emp(
id INT AUTO_INCRETMENT PRIMARY KEY,
name VARCAHR(255),
mangerId INT,
FOREIGN KEY(managerId) references temp(id)
);

其中有四条记录

id                     name                 managerId
1                       aaa                        null
2                       bbb                         1
3                       ccc                          1
4                       ddd                         1

对该表进行查询操作:

SELECT employee.id, employee.name 员工名, manager.name 经理名
FROM emp employee, emp manager
WHERE employee.managerId = manager.id;

该查询语句使用自连接显示员工和经理的关系,其中:

  •  employee.name 员工名, manager.name 经理名 员工名和经理名是重命名,在显示列时显示员工名和经理名;
  •  FROM emp employee, emp manager 两个相同的表需要进行区分,起不同的名字;
  •  WHERE employee.managerId = manager.id 是连接条件

更多的多表连接可以参考:
http://1000zx.cn/article/154006.htm

五.事务处理

1.事务是由一步或几步数据库操作序列组成的逻辑执行单元。

这系列操作要么全部执行,要么全部放弃执行。程序和事务是完全两种不同的概念。一般而言,一段程序中可能包含多个事务。在MySQL中,有多种引擎,最常用的两个引擎:InnoDB和MyISAM,其中InnoDB是支持事务的,而MyISAM是不支持的,可以在config配置文件中对其进行修改。

2.事务的四个特性:

  • 原子性(Atomicity):事务是应用中最小的执行单位。
  • 一致性(Consistency):事务执行的结果必须让数据库从一个一致性的状态变成另外一个一致性的状态。一致性是通过原子性保证的
  • 隔离性(Isolation):各个事务执行相互不干扰。
  • 持续性(Durability):也成为持久性(Persistence),指事务一旦提交,将数据做的任何改变都保存进物理数据库。

这四个特性也叫ACID性

3.数据库的事务由一组DML语句、一条DDL语句和一条DCL语句组成

  • DML语句对数据进行操作
  • DDL和DCL都各只有一条,因为DDL和DCL语句都会将事务提交

4.事务的提交:

  • 显示提交:commit
  • 自动提交:DDL/DCL语句

MySQL默认关闭事务(自动提交),在默认情况下,用户输入一条DML语句也会提交该操作,为了开启事务可以通过以下语句对自动提交进行设置

SET AUTOCOMMIT = {0|1}       0是关闭自动提交(开启事务),1是开启自动提交(关闭事务)

5.事务的回滚(rollback)

事务包含的任意一个数据库操作执行失败后执行回滚事务,将该事务中进行的操作全部失效。两种方式:

  • 显示回滚:rollback
  • 自动回滚:系统错误或强行退出

6.例子:

若只是临时开启一个事务可以通过:start transaction或begin开启临时事务,在其之后的DML语句都不会立即执行,直到出现事务的提交或回滚才结束事务。

e.g.1

BEGIN;
INSERT INTO student VALUES(NULL,'001','aaa');
INSERT INTO student VALUES(NULL,'002','bbb');
INSERT INTO student VALUES(NULL,'003','ccc');
SELECT * FROM student;                ①
ROLLBACK;
SELECT * FROM student;                ②

①语句查询的结果中包含插入的数据,但如果此时在别的命令行窗口中执行该语句,也不会看到以上的三条数据,体现了事务的隔离性,这三条数据其实并没有写入物理数据库;

在执行了回滚操作后,在②的查询语句的结果中看不到begin之后的那三条数据

e.g.2

INSERT INTO student VALUES(NULL,'001','aaa');
INSERT INTO student VALUES(NULL,'002','bbb');
SAVEPOINT p;
INSERT INTO student VALUES(NULL,'003','ccc');
SELECT * FROM student;                ①
ROLLBACK TO p;
SELECT * FROM student;                ②

MySQL还提供关键字SAVEPOINT设置中间点,可以设置回滚的位置,①处的查询语句结果中包含三条插入数据的结果,但②处的查询结果中不包含中间点p之后插入的数据。需要注意的是,回到中间点的回滚不会结束事务。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

更多SQL内容来自木庄网络博客


标签:SQL

返回前面的内容

相关阅读 >>

mssql批量插入数据优化详细

sql server中常用截取字符串函数介绍

sqlserver主键设计的注意点

深入分析mssql数据库中事务隔离级别和锁机制

认识sql 高级进阶

sql server远程连接的设置步骤(图文)

jsp怎么连接sql数据库?

mysql 教程之sql库的基础操作

sql server与mysql有什么区别

adodb 入门第22页

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...