limit分页优化
limit语句一般用来对sql语句的查询结果进行约束,表示只挑选出某几条,具体用法如下:
select * from user order by age asc limit 50,5;
上面语句表示,对user表中的所有行按照age排序,并挑选出其中的51-55行.若将上面的limit(50,5)换成limit 5 则表示,挑选结果中的1-5行;
由于上面的语句是select * ,要获得所有的属性,因此不会用到索引,它会对整个表进行重新的排序然后查找,这样的效率是十分低下,速度是十分慢的.
一般都会对表的主键建立索引,因此我们可以这样优化:
select * from user inner join (select id from user order by age asc limit 50,5);
这样数据库会先按照主键索引查询年龄第51-55小的成员的主键id,再在user表中查询出对应的其它属性.
另外 limit语句他也可以用来对delete语句进行限制,具体如下:
delete from user where age=20 limit 5;
上面的语句表示从user表中一次最多删除掉5行;
内连接和外连接
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行.
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。
select a.*,b.* from a left join b on a.id=b.id;
右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
select a.*,b.* from a right join b on a.id=b.id;
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
select a.*,b.* from a full join b on a.id=b.id;
交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。
select * from table1 cross join table2;
事务
事务是数据库的执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。事务具有一下四个基本特性,也就是常说的(ACID):
原子性(Atomicity):事务只存在被执行完毕和为执行两种状态,若因为某些原因事务执行到一半后失败,则必须会回滚消除对数据库的影响;
一致性(Consistency):在事务执行前,数据库中数据是一致的,在执行完后也是一致的.所谓一致性简单地说就是数据库中数据的完整性,包括它们的正确性。
隔离性(Isolation):事务和事务之间是完全隔离,相互感知不到对方对存在的.多个事务冰法执行,应像各个事务独立执行一样.
持久性(Durability):事务一旦执行成功以后,它对数据库的影响是持久的,即使数据库出错也应该能够恢复.