【问题标题】:How to create INT field (not a primary key) who start at 1000 with auto_increment如何使用 auto_increment 创建从 1000 开始的 INT 字段(不是主键)
【发布时间】:2013-11-17 16:54:10
【问题描述】:

我想在我的 MYSQL 数据库中创建一个字段 INT(11),它的值从 1000 开始,在每个 INSERT 之后递增 1。

警告:这不是主键

数据库正在运行 MYSQL 6.0 和 InnoDB 引擎

如果可能的话,我可以通过谁来实现?

【问题讨论】:

  • 您想确保每个数字都是唯一的吗?如果是,为什么不将其设置为主键,如果您愿意,您仍然可以在另一列上拥有唯一索引。如果不是,恐怕你无能为力,没有自动递增的概念,不能保证是唯一的。
  • 是的,每个数字都必须是唯一的。我无法将其设置为主键,因为主键已经存在,并且该字段与主键的意义不同
  • 是主键自增吗?

标签: mysql database field primary-key


【解决方案1】:

您可以拥有一个 auto_increment 列,只要它被定义为一个键(它不必是 PRIMARY KEY)。比如:

CREATE TABLE auto_inc_test (
    ID INT PRIMARY KEY,
    IncValue INT AUTO_INCREMENT,
    SomeData VARCHAR(50),
    INDEX(IncValue)
);
ALTER TABLE auto_inc_test AUTO_INCREMENT = 1000;

ALTER TABLE 行设置AUTO_INCREMENT 的下一个值。)

如果您随后运行以下插入(显然,它没有为 IncValue 字段提供任何值):

INSERT INTO auto_inc_test (ID, SomeData) 
VALUES (1, 'test 1'), (2, 'test 2'), (3, 'test3')

你会得到:

ID    IncValue    SomeData
1     1000        test 1
2     1001        test 2
3     1002        test 3

【讨论】:

  • 这正是我想要的,但是如何将主键设置为 AUTO_INCREMENT 字段?
  • 不能:每个表只能有一个 auto_increment 列。
  • 据我所知,您可以在一张表中只有一个AUTO_INCREMENT。如果您需要两个,您将不得不手动管理其中一个 - 也许使用触发器?
【解决方案2】:

试试下面的代码,希望这能帮助你专注于下面代码中的语法部分——KEY (id)——

CREATE TABLE IF NOT EXISTS `users`(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(100) NOT NULL,
  `email` varchar(80) NOT NULL,
  `type` int(11) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `status` enum('1','0') NOT NULL COMMENT '''0'' for inactive ''1'' for active',
   PRIMARY KEY (`username`),
   KEY (id)    
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1000;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2012-11-24
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多