最佳MySQL主键和表创建

最佳MySQL主键和表创建,mysql,Mysql,我的问题很简单:MySQL中的“理想”主键是什么 我通常看到int,但我的猜测是: int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY 我认为无签名是必要的,你同意吗?我最多只有几千行,所以可能int太多了 我还想知道这个“默认”表创建是否正确: CREATE TABLE 'whatever' 'id' int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, ) DEFAULT CHARACTE

我的问题很简单:MySQL中的“理想”主键是什么

我通常看到
int
,但我的猜测是:

int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY
我认为无签名是必要的,你同意吗?我最多只有几千行,所以可能
int
太多了

我还想知道这个“默认”表创建是否正确:

CREATE TABLE 'whatever' 
    'id' int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
) DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci ENGINE=InnoDB ROW_FORMAT=DYNAMIC
非常感谢你

理想的主键将满足以下几个重要属性:

唯一-没有两行(或更多行)具有相同的值

simple-具有简单本机数据类型的单列

不可变-一旦分配,将永远不会更改

匿名-不传递任何有意义的信息(出于安全考虑,并通过减少steward更改的理由来帮助处理不可变属性)

短-通常是整数(数字)类型,而不是更长的字符串,受字符集和排序规则的约束


INT UNSIGNED
可以作为数据类型;这是32位,但上端的值范围大于带符号的
INT
。这与客户端中的32位有符号整数不匹配,例如Java基元
int
,因此我们希望在客户端中映射64位有符号整数,例如Java基元
long

我们还可以使用
INT
(省略
无符号
),然后我们可以在客户端映射到32位有符号整数

对于更大范围的值,我们可以使用
BIGINT
。我肯定会省略
无符号
,这样我们就可以映射到客户机64位有符号整数,例如Java
long
,而无需调用BigInteger类


注:主键的理想属性没有严格要求;软件项目可以使用自然键、复合键成功,而无需将代理“id”列作为主键调用到服务器。

理想的主键将满足以下几个重要属性:

唯一-没有两行(或更多行)具有相同的值

simple-具有简单本机数据类型的单列

不可变-一旦分配,将永远不会更改

匿名-不传递任何有意义的信息(出于安全考虑,并通过减少steward更改的理由来帮助处理不可变属性)

短-通常是整数(数字)类型,而不是更长的字符串,受字符集和排序规则的约束


INT UNSIGNED
可以作为数据类型;这是32位,但上端的值范围大于带符号的
INT
。这与客户端中的32位有符号整数不匹配,例如Java基元
int
,因此我们希望在客户端中映射64位有符号整数,例如Java基元
long

我们还可以使用
INT
(省略
无符号
),然后我们可以在客户端映射到32位有符号整数

对于更大范围的值,我们可以使用
BIGINT
。我肯定会省略
无符号
,这样我们就可以映射到客户机64位有符号整数,例如Java
long
,而无需调用BigInteger类



注:主键的理想属性没有严格要求;软件项目可以使用自然键、复合键成功,而无需将代理“id”列作为主键调用到服务器。

So,简而言之:
INT UNSIGNED
INT
用于php应用程序?简而言之:
INT UNSIGNED
INT
用于php应用程序?