【问题标题】:MySQL: How to create table with auto incrementing column via scriptMySQL:如何通过脚本创建具有自动递增列的表
【发布时间】:2015-06-17 07:47:55
【问题描述】:

我是 MySQL 新手,希望有人可以帮助我。

我想创建一个带有两个特殊设置的简单表格:

  1. 两列主键,包括列“de”和“location
  2. 一个自动递增的列“tID”生成一个唯一的 ID, 从 1 开始

我尝试了以下(以及其他几种方法),但这总是返回以下错误:

SQL:

CREATE TABLE TranslationsMain (
    de VARCHAR(100) NOT NULL,
    tID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    location VARCHAR(50) NOT NULL,
    classes VARCHAR(100) NOT NULL,
    info VARCHAR(100) NOT NULL,
    sortOrder INT NOT NULL,
    en VARCHAR(100) NOT NULL,
    PRIMARY KEY(de, location)
)

错误信息:

"Incorrect table definition; there can be only one auto column and it must be defined as a key."

如果我将自动递增列 ("tID") 留在外面,它会起作用,所以这里似乎有问题。 有人可以帮我吗?

提前非常感谢, 迈克

【问题讨论】:

  • auto_incement 必须是主键的一部分。
  • @Jens:谢谢。认为我们已经按照下面提供的答案对其进行了排序。

标签: mysql auto-increment create-table


【解决方案1】:

试试下面的查询,我想这会解决你的问题

CREATE TABLE TranslationsMain (
 de VARCHAR(100) NOT NULL,
 tID INT UNSIGNED NOT NULL AUTO_INCREMENT,
 location VARCHAR(50) NOT NULL,
 classes VARCHAR(100) NOT NULL,
 info VARCHAR(100) NOT NULL,
 sortOrder INT NOT NULL,
 en VARCHAR(100) NOT NULL,
 PRIMARY KEY(tID),
 UNIQUE(de, location))

CREATE TABLE TranslationsMain12 (
     de VARCHAR(100) NOT NULL,
     tID INT UNSIGNED NOT NULL AUTO_INCREMENT,
     location VARCHAR(50) NOT NULL,
     classes VARCHAR(100) NOT NULL,
     info VARCHAR(100) NOT NULL,
     sortOrder INT NOT NULL,
     en VARCHAR(100) NOT NULL,
     unique(tID),
     primary key(de,location)
    )

【讨论】:

  • 非常感谢 - 这也很好用!由于另一个答案似乎是更通用的方法,我决定接受那个但也投票给你,希望没关系。再次感谢!
【解决方案2】:

在您的 SQL 中,问题是自动增量必须是主键。否则将无法正常工作。

你可以像这样使用。我想你的问题会解决的。

  CREATE TABLE TranslationsMain (
     de VARCHAR(100) NOT NULL,
     tID INT UNSIGNED NOT NULL AUTO_INCREMENT,
     location VARCHAR(50) NOT NULL,
     classes VARCHAR(100) NOT NULL,
     info VARCHAR(100) NOT NULL,
     sortOrder INT NOT NULL,
     en VARCHAR(100) NOT NULL,
     PRIMARY KEY(tID,de, location))

【讨论】:

  • 也谢谢你!它适用于 user1151316 的答案。
  • 我已经投票给你了。 :) 我对此进行了测试,效果很好。由于这似乎是更通用的方法,我决定接受这个答案。再次感谢。
猜你喜欢
  • 2011-02-18
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2021-08-26
相关资源
最近更新 更多