最佳MySQL主键和表创建
我的问题很简单: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
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位有符号整数,例如Javalong
,而无需调用BigInteger类
注:主键的理想属性没有严格要求;软件项目可以使用自然键、复合键成功,而无需将代理“id”列作为主键调用到服务器。理想的主键将满足以下几个重要属性: 唯一-没有两行(或更多行)具有相同的值 simple-具有简单本机数据类型的单列 不可变-一旦分配,将永远不会更改 匿名-不传递任何有意义的信息(出于安全考虑,并通过减少steward更改的理由来帮助处理不可变属性) 短-通常是整数(数字)类型,而不是更长的字符串,受字符集和排序规则的约束
INT UNSIGNED
可以作为数据类型;这是32位,但上端的值范围大于带符号的INT
。这与客户端中的32位有符号整数不匹配,例如Java基元int
,因此我们希望在客户端中映射64位有符号整数,例如Java基元long
我们还可以使用INT
(省略无符号
),然后我们可以在客户端映射到32位有符号整数
对于更大范围的值,我们可以使用BIGINT
。我肯定会省略无符号
,这样我们就可以映射到客户机64位有符号整数,例如Javalong
,而无需调用BigInteger类
注:主键的理想属性没有严格要求;软件项目可以使用自然键、复合键成功,而无需将代理“id”列作为主键调用到服务器。So,简而言之:
INT UNSIGNED
或INT
用于php应用程序?简而言之:INT UNSIGNED
或INT
用于php应用程序?