返回介绍

8 数值字段型态与 AUTO_INCREMENT

发布于 2025-02-20 13:00:30 字数 4828 浏览 0 评论 0 收藏 0

在数据库的应用中,很常会遇到为纪录“编流水号”的需求,如果资料表中的每一笔纪录都需要一个递增的数值编号,你可以选择整数型态的字段后,再使用“AUTO_INCREMENT”字段属性:

mysql_09_snap_74

如果一个公司想要储存员工开会的资料,你可以在建立开会资料表格的时候,为这个表格定义一个储存开会编号的字段,这个字段需要自动递增,而且会为它建立主索引键:

mysql_09_snap_75

建立开会资料表格以后,另外建立一个储存参加会议的员工资料表格:

mysql_09_snap_76

设定为“AUTO_INCREMENT”的整数字段,在新增资料的时候可以不用指定数值,MySQL 会为你自动编制一个流水号并储存在纪录中;而接着要新增参加这次开会的员工资料到“participate”表格时,你需要用到 MySQL 刚才会为你在“meeting”表格中自动编制的流水号,这样的需求可以使用“LAST_INSERT_ID()”函式来取得:

mysql_09_snap_77

新增这些开会与参加会议的员工资料后,就可以使用结合查询来查询开会资料了:

mysql_09_snap_78

在新增资料时,要让 MySQL 为你自动编制一个流水号,并储存到纪录中的方式有下列几种:

mysql_09_snap_79

MySQL 是一个可以让多人同时使用的数据库,使用“LAST_INSERT_ID()”函式来取得自动编制的流水号数值,并不会因为不同的用户端同时使用而造成混乱:

mysql_09_snap_80

“AUTO_INCREMENT”字段的一般用法通常是用来储存从“1”开始的流水号,每一笔新增的纪录都会自动加一成为新的编号。可是如果在新增纪录的时候,自己指定“AUTO_INCREMENT”字段一个数值,就会造成下列的情况:

mysql_09_snap_81

“AUTO_INCREMENT”字段在你删除纪录以后,也不会帮你重新使用已经用过的编号:

mysql_09_snap_82

注:使用“TRUNCATE TABLE”叙述删除包含“AUTO_INCREMENT”字段表格的所有纪录,编号会重新从头开始。

不要指定值,或是指定“NULL”值给“AUTO_INCREMENT”字段,都可以让 MySQL 为你自动编制一个流水号,并储存到纪录中,这两种也是比较好的方式;另外指定“AUTO_INCREMENT”字段值为“0”的方式也可以,不过会因为 MySQL 数据库服务器的环境设定而有不同的效果:

mysql_09_snap_83

如果你需要编制的流水号范围是非常大的,你应该选择“AUTO_INCREMENT”字段的型态为“BIGINT”;MySQL 另外提供一个“SERIAL”关键字,让你在定义这种字段时可以比较方便一些:

mysql_09_snap_84

使用“MyISAM”储存引擎的表格,可以使用下列这种比较特殊的“AUTO_INCREMENT”字段:

mysql_09_snap_85

这样的设定同样是请 MySQL 为你自动编制流水号,不过因为“AUTO_INCREMENT”字段包含在主索引键中,编制流水号的动作会不太一样:

mysql_09_snap_86

注:在上列的范例中,是把“empno,location,counter”设定为主索引键;如果设定为唯一索引的话,也会有一样的效果;设定为一般索引的话,会造成错误。

使用“AUTO_INCREMENT”字段属性有下列几个重点:

  • 一个表格只能有一个“AUTO_INCREMENT”字段,而且要为它建立一个索引,而且通常是建立主索引键或唯一索引,这样可以防止重复的编号;不过 MySQL 也允许你建立可重复的索引
  • 只有整数型态才可以使用“AUTO_INCREMENT”字段属性,你可以根据编号大小的需求,选择使用“TINYINT”、“SMALLINT”、“MEDIUMINT”、“INT”或“BIGINT”,而且因为只会使用到正数,所以你可以加入“UNSIGNED”来增加编号的范围
  • 如果编号已经到字段型态的最大范围,例如一个“SMALLINT”型态,而且是指定为“UNSIGNED”的“AUTO_INCREMENT”字段,编号已经到“65535”了,如果再执行新增的叙述,就会造成“Duplicate entry ’65535′ for key ‘字段名称’”的错误

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文