让我们说我在MySQL中创建一个表:
CREATE TABLE animals (
id INT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
主键应该只是INT
还是我应该UNSIGNED INT
?我知道负面的主键并没有多大意义,所以我认为它应该是UNSIGNED INT
。虽然哪一个会更快?
答案 0 :(得分:2)
你可以完全避免考虑它:
CREATE TABLE animals (
id SERIAL,
name CHAR(30) NOT NULL
);
(将其创建为unsigned int,并添加唯一索引和自动递增)
答案 1 :(得分:1)
我们对所有代理主键使用INT UNSIGNED
或BIGINT UNSIGNED
。我们还使用名称id
作为列。
对于整数PRIMARY KEY,负值没有任何问题(或必然是邪恶的),有符号整数也可以。
使用无符号整数需要注意的一个问题:最大值比有符号整数的最大值更大。 (INT UNSIGNED最大值是2 ^ 32-1,而不是2 ^ 31-1。)任何客户端程序都需要知道这一点;如果值超过2 ^ 31-1,则将INT UNSIGNED映射为32位有符号整数(例如,C int类型)将是一个问题。
答案 2 :(得分:1)
如果它自动递增,就像它们通常那样,它应该是无符号的,否则你会在溢出点得到意外的排序。