MySQL关联查询,联合查询,事务

关联查询,联合查询

  作用:从2张或多张表中,取出有关联的数据.

关联查询一共有几种情况:

  内连接:INNER JOIN 、CROSS JOIN

      有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行

      隐式:SELECT [cols_list] from 表1,表2 where [condition]

      显式:select [cols_list] from 表1 INNER JOIN 表2 on sc.sid =student.sid;

      SELECT [cols_list] from 表1 CROSS JOIN 表2 ON [关联条件] where [其他筛选条件]

      SELECT [cols_list] from 表1 JOIN 表2 ON [关联条件] where [其他筛选条件]

  外连接:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN)

      SELECT [cols_list] from 表1 LEFT OUTER JOIN 表2 on Student.Sid=SC.Sid

      SELECT [cols_list] from 表1 RIGHT OUTER JOIN表2 on Student.Sid=SC.Sid

      SELECT [cols_list] from 表1 FULL OUTER JOIN 表2 on Student.Sid=SC.Sid

  自连接:当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义

      SELECT [cols_list] from t_employee AS emp ,

                 t_employee AS mgr WHERE emp.mid = mgr.eid;

说明:

  连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。

  当两个关联查询的表如果有字段名字相同,并且要查询中涉及该关联字段,那么需要使用表名前缀加以区分

  当如果表名比较长时,可以给表取别名,简化SQL语句

 

事务: 
  事务的ACID特性:

      1.原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。 组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。

    2.一致性(Consistency):指数据的规则,在事务前/后应保持一致

    3.隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.

    4.持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消

  

  事务的用法:
      1.开启事务(start transaction)

    2.执行sql操作(普通sql操作)

    3.提交/回滚(commit/rollback)

  注意:

    - 建表的时候,选择** Innodb引擎**才支持事务****
    - 默认情况下,MySQL是自动提交事务,每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚。如果某一组操作需要在一个事务中,那么需要使用start transaction,一旦 rollback或commit就结束当次事务,之后的操作又自动提交。
    - 如果需要在当前会话(连接)的整个过程中都取消自动提交事务,进行手动提交事务,就需要设置set autocommit = false;或set autocommit = 0;那样的话每一句SQL都需要手动commit提交才会真正生效。rollback或commit之前的所有操作都视为一个事务,之后的操作视为另一个事务,还需要手动提交或回滚。
    - 和Oracle一样,DDL语句是不能回滚的,并且部分的DDL语句会造成隐式的提交,因此最好事务中不要涉及DDL语句。

 

上一篇:算法 中等 | 34. N皇后问题 II


下一篇:php – 如何使用梨邮件mime