标签:启用 name 其他 需要 外键约束 通过 也会 计算 方式
1. 使用外键在MySQL中,InnoDB存储引擎表支持外键约束检查。
如果仅是连接两个表,外键约束并不是必须的。对于InnoDB以外的存储引擎,在定义列时也可以使用REFERENCES tbl_name (col_name)子句,该子句没有实际效果,仅作为定义的列打算引用另一个表中的列的备注。在使用此语法时,请务必认识到:
●MySQL不执行任何检查来确保col_name在tbl_name中实际存在(甚至tbl_name表是否存在也不能保证)。
●MySQL不会对tbl_name执行任何类型的操作,例如,如果对您定义表中的行执行删除操作,tbl_name 中的相应数据并不会被级联删除;换句话说,此语法不会导致任何ON DELETE或ON UPDATE行为。(尽管可以将ON DELETE或ON UPDATE子句作为REFERENCES子句的一部分编写,但它也会被忽略。)
●此语法创建列,但它不创建任何类型的索引或键。
可以使用这样创建的列作为连接列,如下所示:
以这种方式使用时,REFERENCES子句不会显示在SHOW CREATE TABLE 或DESCRIBE 的输出中:
列定义中的这种 REFERENCES 方式使用可以用作注释或“提醒”功能,适用于MyISAM存储引擎中的表。
2.在两个键上搜索
对单个键使用 OR 查询就像 AND 一样,已经做了很好的优化。
棘手一些的情况是,在用 OR 连接两个不同的键上搜索:
针对这种情况也已经进行了优化。
还可以通过用一个UNION语句来高效地解决这个问题,该联合将两个单独的SELECT语句的输出组合在一起。
每个SELECT 语句仅在一个键上搜索,这样搜索会被优化!
3.统计访问天数
下面的示例演示如何使用位组函数计算用户每月访问网页的天数。
首先创建表,填充数据。
示例表包含了表示用户访问页面的年月日的值。要确定每月进行这些访问的天数,请使用以下查询:
此查询将返回如下结果:
4.使用 AUTO_INCREMENT
AUTO_INCREMENT 属性可以用于给新行生成唯一标识。
返回结果:
上述语句并没有为自增列分配值,MySQL会自动分配值,也可以显式地将0分配给自增列,系统也会自动分配值,除非启用了NO_AUTO_VALUE_ON_ZERO SQL模式。例如:
如果列被声明为 NOT NULL,也可以将空值赋给列,系统也会自动填充值。例如:
在自增列中插入任何其他值时,该列将设置为该值并重置序列,以便下一个自动生成的值从最大列值开始按顺序排列。例如:
更新现有的自增列值也会重置自动递增序列。
可以用 LAST_INSERT_ID() SQL 函数或者 mysql_insert_id() C API 函数查询最近一次自动生成的自增值。这些函数是特定于连接的,因此它们的返回值不受另一个也在执行插入的连接的影响。
在能满足需要的前提下,请为自增列使用最小的整数类型。当列达到数据类型的上限时,下次生成序列号的尝试将失败。如果可能,请使用UNSIGNED属性以允许更大的范围。例如,如果使用TINYINT,则允许的最大序列号为127。对于TINYINT UNSIGNED,最大值为255。
如果想指定自增值不是从1开始,请使用CREATE TABLE或ALTER TABLE设置该值,如下所示:
标签:启用 name 其他 需要 外键约束 通过 也会 计算 方式
原文地址:https://blog.51cto.com/15023289/2561180