【发布时间】:2010-09-19 15:50:04
【问题描述】:
我打算使用 php 和 mySQL 制作一个非常简单的程序。主页将获取信息并使用该信息在数据库中创建一个新行。但是,我需要输入一个数字作为主键。不幸的是,我不知道确定使用什么数字的正常方法。最好,如果我删除一行,则该行的键将永远不会被重用。
初步搜索在 mySQL 中找到了 AUTOINCREMENT 关键字。但是,我仍然想知道这是否适用于我想要的以及此问题的常见解决方案是什么。
【问题讨论】:
我打算使用 php 和 mySQL 制作一个非常简单的程序。主页将获取信息并使用该信息在数据库中创建一个新行。但是,我需要输入一个数字作为主键。不幸的是,我不知道确定使用什么数字的正常方法。最好,如果我删除一行,则该行的键将永远不会被重用。
初步搜索在 mySQL 中找到了 AUTOINCREMENT 关键字。但是,我仍然想知道这是否适用于我想要的以及此问题的常见解决方案是什么。
【问题讨论】:
在 MySQL 中,standard solution.
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
【讨论】:
除非您有一个压倒一切的理由来生成自己的 PK,否则使用自动增量就足够了。这样数据库管理密钥。当您插入一行时,您必须省略主键列。
假设您有一个表 table = (a, b, c) 其中 a 是主键,那么插入语句将是
插入表 (b, c) 值('bbb', 'ccc')
数据库会自动插入主键。
【讨论】:
AUTOINCREMENT 是你想要的。只要您不更改表的设置,AUTOINCREMENT 就会继续增长。
【讨论】:
AUTOINCREMENT 是自动创建唯一键的标准方法。它将从 1 开始(或 0,我不记得了,没关系),然后随着添加到表中的每条新记录而递增。如果一条记录被删除,它的键将不会被重用。
【讨论】:
自动递增主键是相对标准的,具体取决于您在哪一周与哪个 DBA 交谈。
我相信基本标识整数在空间不足之前会达到大约 20 亿行(这对 mySQL 是否合适?),因此您不必担心达到上限。
【讨论】:
AUTO_INCREMENT 是常见的选择,它为您插入的每个新行设置一个从 1 开始的数字。确定要使用哪个数字的所有工作都由数据库完成,如果需要,您只需在插入后询问它(在 php 中,您可以通过调用 mysql_last_insertid 来获取它)
【讨论】:
对于一些简单的自动增量是最好的。对于最终会有很多条目的更复杂的东西,我会生成一个 GUID 并将其作为键插入。
【讨论】: