mysql函数怎么提交 mysql手动提交( 五 )


假如没有筛选的话 , 就给全部删除了。相当于清空 。
清空
先把表删除,然后再建一个 。与DELETE FROM相比 , TRUNCATE的效率更快,因为DELETE FROM是把记录逐条删除的 。
查询执行的顺序
FROM -- WHERE -- SELECT -- GROUP BY -- HAVING -- ORDER BY -- LIMIT
注意
当数据很大,上百万的时候 , 使用LIMIT ... OFFSET ..的方式进行分页十分浪费资源且耗时长 。最好是结合WHERE使用,如:
REGEXP 使用正则表达进行匹配 。查询时,需要搭配WHERE或HAVING使用。
两个表之间有交集且要用到两个表的数据时 , 可以使用内连接查询 。
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配 。如果右表中没有匹配,则结果为 NULL 。
用法:
【mysql函数怎么提交 mysql手动提交】RIGHT JOIN 关键字从右表(table2)返回所有的行 , 即使左表(table1)中没有匹配 。如果左表中没有匹配,则结果为 NULL 。把LEFT JOIN的表1、表2调换顺序,就是REGHT JOIN。
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果 。
但MySQL中不支持 FULL OUTER JOIN。
即SELECT嵌套 。
IN 一个查询结果作为另一个查询的条件 。如:
EXISTS 用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True , 否则返回 False 。True时执行 。如:
索引的本质是一种排好序的数据结构 。利用索引可以提高查询速度 。
常见的索引有:
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性 。外键的使用条件:
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作 。
对已有的两个表增加外键 比如:主表为A , 子表为B,外键为aid,外键约束名字为a_fk_b
为子表添加一个字段,当做外键
为子表添加外键约束条件
假如删除记录报错:[Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...)
这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据 。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况 。第一步:禁用外键约束 , 我们可以使用:SETFOREIGN_KEY_CHECKS=0;第二步:删除数据 第三步:启动外键约束,我们可以使用:SETFOREIGN_KEY_CHECKS=1;查看当前FOREIGN_KEY_CHECKS的值,可用如下命令:SELECT @@FOREIGN_KEY_CHECKS;
使用UNION 来组合两个查询 , 如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行 。
每个查询必须包含相同的列、表达式和聚集函数 。
默认会去除相同行 , 如果需要 保留 相同行 , 使用 UNION ALL。
只能包含一个ORDER BY子句,并且必须位于语句的最后。
内置函数很多, 见: MySQL 函数
我们一般使用START TRANSACTION 或 BEGIN 开启事务,COMMIT 提交事务中的命令,SAVEPOINT : 相当于设置一个还原点,ROLLBACK TO : 回滚到某个还原点下
一般的使用格式如下:
开启事务时, 默认加锁
根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK) 。
根据粒度划分又分表锁和行锁 。表锁由数据库服务器实现,行锁由存储引擎实现 。
除此之外,我们可以显示加锁
加锁时,如果没有索引,会锁表,如果加了索引,就会锁行
InnoDB默认支持行锁,获取锁是分步的,并不是一次性获取所有的锁 , 因此在锁竞争的时候就会出现死锁的情况

推荐阅读