MySQL:在CREATE TABLE语句中命名主键

时间:2010-07-21 20:57:17

标签: sql mysql

创建表时如何设置主键的名称?

例如,我在这里尝试创建名为“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将是我指定的内容。

4 个答案:

答案 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`)
)