码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 基础教程-09 常见查询示例(2)

时间:2020-12-14 13:10:48      阅读:3      评论:0      收藏:0      [点我收藏+]

标签:启用   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设置该值,如下所示:

技术图片

MySQL 基础教程-09 常见查询示例(2)

标签:启用   name   其他   需要   外键约束   通过   也会   计算   方式   

原文地址:https://blog.51cto.com/15023289/2561180

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!