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

sea*_*rbe 7 mysql sql

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

例如,我在这里尝试创建名为"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
)
Run Code Online (Sandbox Code Playgroud)

澄清

我想指定主键的名称 - 而不是默认名称"PRIMARY"我希望它被称为"id"或者可能是"primary_id",所以如果我以后要运行SHOW INDEXES FROM default_test ,Key_name将是我指定的东西.

Jas*_*ary 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`)
)
Run Code Online (Sandbox Code Playgroud)

UPDATE

根据说明,如果要指定索引名称,可以使用以下内容替换上面的最后一个定义:

CONSTRAINT `pk_id` PRIMARY KEY (`id`)
Run Code Online (Sandbox Code Playgroud)


Jor*_*ira 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`)
)
Run Code Online (Sandbox Code Playgroud)


Amb*_*ber 0

您不必再次指定列名,因为您已经将其指定为当前字段定义的一部分 - 只需说PRIMARY KEY

CREATE TABLE IF NOT EXISTS `default_test` (
    `id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name` LONGTEXT NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

或者,您可以稍后单独指定:

CREATE TABLE IF NOT EXISTS `default_test` (
    `id` SMALLINT NOT NULL AUTO_INCREMENT,
    `name` LONGTEXT NOT NULL,
    PRIMARY KEY(`id`)
)
Run Code Online (Sandbox Code Playgroud)