我正在尝试在 MySQL 中创建一个序列(我对 SQL 整体上非常陌生)。我正在使用以下代码,但它导致错误:CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;ORDID 指的是...
我正在尝试在 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())获取自己的序列值,而不会影响或受生成自己序列值的其他客户端的影响。