创建表时如何设置主键的名称?
例如,我在这里尝试创建名为“id”的主键,但这是无效的SQL。你能告诉我正确的方法吗?
CREATE TABLE IF NOT EXISTS `default_test`
(
`default_test`.`id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY `id`,
`default_test`.`name` LONGTEXT NOT NULL
)
我想指定主键的名称 - 而不是默认名称“PRIMARY”我希望它被称为“id”或者可能是“primary_id”,所以如果我以后再运行SHOW INDEXES来自default_test,Key_name将是我指定的内容。
答案 0 :(得分:16)
或者更广泛地支持:
CREATE TABLE IF NOT EXISTS `default_test` (
`default_test`.`id` SMALLINT NOT NULL AUTO_INCREMENT,
`default_test`.`name` LONGTEXT NOT NULL,
PRIMARY KEY (`id`)
)
根据澄清,如果要指定索引名称,可以使用以下内容替换上面的最后一个定义:
CONSTRAINT `pk_id` PRIMARY KEY (`id`)
答案 1 :(得分:5)
http://dev.mysql.com/doc/refman/5.1/en/create-table.html
[...]在MySQL中,PRIMARY KEY的名称是PRIMARY。 [...]
CREATE TABLE IF NOT EXISTS `default_test` (
`default_test`.`id` SMALLINT NOT NULL AUTO_INCREMENT,
`default_test`.`name` LONGTEXT NOT NULL,
PRIMARY KEY (`id`)
)
答案 2 :(得分:1)
当您指定与列定义直接内联的主键列名称时,不应指定列名称,因此:
CREATE TABLE IF NOT EXISTS `default_test` (
`default_test`.`id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`default_test`.`name` LONGTEXT NOT NULL
);
另外你可以这样做:
CREATE TABLE IF NOT EXISTS `default_test` (
`default_test`.`id` SMALLINT NOT NULL AUTO_INCREMENT ,
`default_test`.`name` LONGTEXT NOT NULL ,
PRIMARY KEY `default_test_id_pkey` (`id`)
);
答案 3 :(得分:0)
您不必再次指定列名,因为您已将其指定为当前字段定义的一部分 - 只需说出PRIMARY KEY
。
CREATE TABLE IF NOT EXISTS `default_test` (
`id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` LONGTEXT NOT NULL
)
或者,您可以稍后单独指定:
CREATE TABLE IF NOT EXISTS `default_test` (
`id` SMALLINT NOT NULL AUTO_INCREMENT,
`name` LONGTEXT NOT NULL,
PRIMARY KEY(`id`)
)