来自牛客网的汇总
1. MySQL查询时,只有满足联接条件的记录才包含在查询结果,这种联接是(内联接)。
内联接:典型的联接运算,使用像 = 或 <> 之类的比较运算符。包括相等联接和自然联接。内联接使用比较运算符根据每一表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。
外联接:外联接可以是左向外联接、右向外联接或完整外部联接。
在FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
LEFT JOIN 或 LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉联接:交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称笛卡尔积。
2. 数据库事务正确执行的四个基本要素
ACID — 数据库事务正确执行的四个基本要素
ACID,指数据库事务正确执行的四个基本要素的缩写。
包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
一个支持事务(Transaction)中的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易。
原子性:一个事务(Transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的默认规则,这包含资料的精准度、串联新以及后续数据库可以自发性地完成预定的工作。
隔离性:当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的互相关系。事务隔离分为不同的级别,包括读为提交(Read uncommitted)、读提交(Read committed)、可重复读(Repeatable read)和串行化(Serializable)。
持久性:在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,而且是完全的。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上并不可行。
目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式。第二种是Shadow paging。
Write ahead logging(预写日志):
1. 事务所引起的所有改动都要记录在日志中,在事务提交完成之前,所有的这些记录必须被写入硬盘;
2. 一个数据库的缓冲页直到被记入日志后才能发生修改。直到缓冲页对应的日志被写入键盘后,该缓冲页才会存入键盘;
3. 当缓冲页被修改和日志被更新修改时,必须加上互斥锁,以保证改动被记录到日志中的顺序与它发生的顺序是一致的。
以上规则的结果:
MySQL的操作
MySQL -u username -p
service mysql start/stop
service mysql status
show databases;
use db_name;
show tables;
desc table_name;
在缺省模式下,MySQL是autocommit模式的,所有的数据库更新操作都会及时提交,所以在缺省情况下,mysql是不支持事务的。
但是如果你的mysql表类型是使用InnoDB Tables 或 BDB tables的话,你的MySQL就可以使用事务处理,使用SET AUTOCOMMIT = 0就可以使MySQL允许在非autocommit模式下,你必须使用commit来提交你的更改,或者有ROLLBACK来回滚你的更改。
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;