【问题标题】:Give default value for auto_increment for more than one column in mysql为mysql中多列的auto_increment提供默认值
【发布时间】:2012-06-20 10:27:50
【问题描述】:

当我尝试执行以下查询时

create table xyz(id int(3) not null auto_increment, name char(10) not null, code int(6) auto_increment=2000);

我收到以下错误:

You have an error near '=2000)'

我希望 id 列从 1 开始,它将从 1 开始,但同时我希望代码列从 2000 开始在我向表中插入数据时递增。 那么,查询中是否可以有两个 auto_increments ?我是在 servlet 的帮助下做到这一点的。

【问题讨论】:

  • 正如 MySQL 手册中明确指出的那样,一个表中只能有一个 AUTO_INCREMENT 列,并且它必须是 PRIMARY KEY(或它的一部分),另外,设置 atuo 的正确语法-increment 值是在表定义结束之后(在您指定 ENGINE 和 COMMENTS 的同一位置)
  • 有什么特殊原因不将 2000 添加到其他所需列的 id 列吗?这似乎是行 ID 值的静态偏移量。
  • 我想使用 id 作为主键引用,我正在做一个 java servlet 程序,每当我提交要存储在数据库中的表单时,我都必须在其中生成一个随机数,所以我想到了给出默认值,然后在插入数据时再次增加它
  • 也许我不明白,但这听起来不像是一个随机数

标签: java mysql html sql servlets


【解决方案1】:

直接回答:你不能有多个 auto_increment 值,就像 poncha 说的那样。

但是,这可以通过以下几种方式完成:

  1. 重写你的insert语句找到前面的代码并加1:

    INSERT INTO xyz (name, code) VALUES ("some-name", (SELECT max(code)+1 FROM xyz))

  2. 在插入后创建一个 mysql 触发器以查找代码的最大值并添加一个然后更新

!!我完全不推荐这个,请重新设计你的代码!!

我的最高建议是生成一个随机数并在插入时使用它,或者重写子查询以创建一个随机数。

【讨论】:

  • 请记住,数据库用于存储信息。代码(java)用于操作/使用数据。哦,还有 java == :(
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多