添加主键以外的自动增量列

时间:2014-01-21 07:18:18

标签: mysql sql primary-key

我有一张表,其中键是主键。我想添加seqNo密钥,该密钥应自动递增,但不允许将其设置为自动递增。

因为已经有一个主键,

是否可以使seqNo自动增量?目前seqNo不存在。我想添加它

3 个答案:

答案 0 :(得分:1)

您不能在SQL表中拥有两个标识列,但仍可以创建序列。这是链接http://technet.microsoft.com/en-us/library/ff878091.aspx

答案 1 :(得分:1)

您有以下选择。

  1. 在每个插入语句上创建一个增加列值的触发器
  2. 使用序列,但一旦生成序列值,它将永远不会再次生成(意味着,如果插入因某些原因失败,您的值会有差距)

答案 2 :(得分:1)

Vignesh,请考虑以下内容......

 DROP TABLE IF EXISTS test;

 CREATE TABLE test 
 ( testID int(11) NOT NULL
 , string varchar(45) DEFAULT NULL
 , testInc int(11) NOT NULL AUTO_INCREMENT
 , PRIMARY KEY (testID)
 , KEY testInc (testInc)
 );

 INSERT INTO test
 (testID
 , string
 ) values 
 (1
 ,'Hello'
  );

 INSERT INTO test (testid,string) SELECT x.testid + y.max_test,string FROM test x JOIN (SELECT MAX(testid) max_test FROM test)y;
 INSERT INTO test (testid,string) SELECT x.testid + y.max_test,string FROM test x JOIN (SELECT MAX(testid) max_test FROM test)y;
 INSERT INTO test (testid,string) SELECT x.testid + y.max_test,string FROM test x JOIN (SELECT MAX(testid) max_test FROM test)y;
 Query OK, 4 rows affected (0.03 sec)

 SELECT * FROM test;
 +--------+--------+---------+
 | testID | string | testInc |
 +--------+--------+---------+
 |      1 | Hello  |       1 |
 |      2 | Hello  |       2 |
 |      3 | Hello  |       3 |
 |      4 | Hello  |       4 |
 |      5 | Hello  |       6 |
 |      6 | Hello  |       7 |
 |      7 | Hello  |       8 |
 |      8 | Hello  |       9 |
 +--------+--------+---------+

请注意,行数(8)和testinc(9)的值不同。这不是OP想要的。我用来生成PK的MAX()技巧也不好,因为它会受到运行时错误的影响。

相同http://www.sqlfiddle.com/#!2/d29a5b/1

的小提琴

重点是......存储顺序ID是没有意义的。