我试图在MySQL中创建一个序列(我对整个SQL非常陌生)。我正在使用以下代码,但它导致了一个错误:
CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;
ORDID指的是我使用的表中的一个字段。我怎样才能正确创建序列?
编辑:
据称,MySQL不使用序列。我现在使用下面的代码,但这也会导致错误。我怎样才能解决它们呢?
CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code
编辑:
我想我找到了一个解决方法。对于 phpMyAdmin(我使用的是它),你可以使用以下代码。
ALTER TABLE ORD AUTO_INCREMENT = 622;
我不知道为什么它更喜欢这样,但如果有人需要帮助,那就给你吧。)
这是一个由MySQl手册建议的解决方案:
如果expr被作为参数给了LAST_INSERT_ID(),那么参数的值就会被函数返回,并作为下一个参数被记住。 参数被函数返回,并被记住作为下一个 LAST_INSERT_ID()将返回的值。这可以用来模拟 序列: >; 创建一个表来保存序列计数器并对其进行初始化: >;
mysql> CREATE TABLE sequence(id INT NOT NULL); mysql> INSERT INTO sequence VALUES(0);
>;
使用该表来生成序列号,就像这样: >;
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID();
>;
UPDATE语句增加了序列计数器,并导致对LAST_INSERT_ID()的下一次调用返回更新的值。语句 SELECT语句检索该值。mysql_insert_id() C API 函数也可以用来获取该值。参见第23.8.7.37节、 "mysql_insert_id()"。 >; 你可以不调用LAST_INSERT_ID()来生成序列,但 以这种方式使用该函数的效用是,ID值被 在服务器中作为最后一个自动生成的值进行维护。它 是多用户安全的,因为多个客户可以发出UPDATE 语句,并通过SELECT语句获得他们自己的序列值。 (或mysql_insert_id()),而不影响或被其他 客户端产生自己的序列值。
请看这篇文章。 我相信它应该能帮助你得到你想要的东西。 如果你的表已经存在,而且里面已经有了数据,你得到的错误可能是由于auto_increment试图为其他记录分配一个已经存在的值。
简而言之,正如其他人已经在评论中提到的,在Oracle中被认为和处理的序列,在MySQL中并不存在。 然而,你可以使用auto_increment来完成你想要的东西。
如果没有关于具体错误的额外细节,就很难提供更具体的帮助。
更新
CREATE TABLE ORD (
ORDID INT NOT NULL AUTO_INCREMENT,
//Rest of table code
PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;
这个链接对于描述auto_increment的用法也有帮助。 设置AUTO_INCREMENT值似乎是一个表选项,而不是特别指定为一个列属性的东西。
另外,根据上面的一个链接,你也可以通过对表的修改来设置自动增量的起始值。
ALTER TABLE ORD AUTO_INCREMENT = 622;
更新2
这里有一个使用自动增量的工作sqlfiddle例子的链接。
我希望这些信息能有所帮助。