在一个不支持事务的环境里,有些事务问题可以想办法解决 明确的锁定数据表 把多条语句用LOCK TABLES和UNLOCK TABLES括起来就可以把他们当做一个单元执行了 mysql> LOCK TABLES t WRITE; Query OK, 0 rows affected (0.00 sec) mysql> UNLOCK TABLES; Query
因为MYSQL是一个多用户数据库系统,所以不同的客户可能会在用以时间视图访问同一个数据库,诸如MYISAM之类的存储引擎使用了数据表级的 锁定机制来保证不同的客户不能同时修改同一个数据表,但这种做法在更新量比较大的系统上会导致并发并能下降,InnoDB存储引擎采用了另 一种策略,他使用数据行级的锁定机制为客户对数据表的访问提供了更细致的控制,提供了比锁表机制更强大的并发性能,不
事务(transaction)是作为一个不可分割的逻辑单元而被执行的一组SQL语句,如有必要他的执行效果可以被撤销 事务机制的特性通常被概括为ACID原则 Atomic 原子性 构成一个事务的所有语句应该是一个独立的逻辑单元,要么全部成功要么全部失败 Consistent 稳定性 执行之前和执行之后都必须是稳定的,换句话说,事务不会将你的数据库弄的一团糟 Isolated 孤立性
我们可以根据某个数据表里的数据行是否在另一个数据表里有匹配来删除它们 mysql> DELETE t1 FROM t1 INNER JOIN t2 ON t1.i1 = t2.i2; Query OK, 2 rows affected (0.04 sec) 如果想删除两个表的数据可以 mysql> DELETE t1, t2 FROM t1 INNER JOIN t
视图是一种虚拟的数据表,他们的行为和数据表一样,但并不真正包含数据,他们是用底层数据表或其他视图定义出来的假数据表,用来一共查看数据表数据的另一种方法 mysql> CREATE VIEW vpres AS SELECT last_name, first_name, city, state FROM president; Query OK, 0 rows affected (0.04
如果想把多个查询的结果合并在一起创建一个结果集,可以使用UNION语句来做这件事 mysql> SELECT student_id FROM member UNION SELECT student_id FROM absence; +------------+ | student_id | +------------+ | 1 | | 2 | | 3
有相当一部分使用了子查询的查询命令可以被改写为一个联结查询,有时候,联结查询要比子查询的执行效率更高,所以把子查询改写为联结查询是个不坏的主意 1.如何改写用来选取匹配值的子查询 mysql> SELECT * FROM member WHERE student_id IN (SELECT student_id FROM absence WHERE date='2012-10-
MYSQL支持子查询(subquery) 子查询可以返回以下不同类型的信息: 1.标量子查询将返回一个值 2.数据列子查询将返回一个由一个或多个值构成的数据列 3.数据行子查询将返回一个由一个或多个值构成的数据行 4.数据表子查询将返回一个由一个或多个数据行构成的数据表,数据行可以由一个或多个列构成 子查询结果可以用一下不同的方法进行测试 1.可以用=或 SELECT
内联结只显示在两个数据表里能找到的匹配数据行,外联结除了显示同样的匹配结果,还可以把其中一个数据表在另一个数据表里没有匹配的数据行也显示出来.LEFT JOIN显示右数据表中没有的匹配数据,RIGHT JOIN显示左数据表中没有的数据 mysql> SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.i1 = t2.i2; +----+----+
如果在SELECT语句的FROM子句中列出了多个数据表,并用INNER JOIN将他们的名字隔开,那么MYSQL将执行内联结 mysql> SELECT * FROM t1 INNER JOIN t2; +----+----+----+----+ | i1 | c1 | i2 | c2 | +----+----+----+----+ | 1 | a | 2 | c | | 2