我正在尝试在 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> CREATE TABLE `ubersequence` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `unused` varchar(32) not null unique,
-> PRIMARY KEY (`id`) );
Query OK, 0 rows affected (0.05 sec)
mysql> insert into ubersequence (unused) values ('snap');
Query OK, 1 row affected (0.01 sec)
mysql> select * from ubersequence ;
+----+--------+
| id | unused |
+----+--------+
| 1 | snap |
+----+--------+
1 row in set (0.00 sec)
每次需要下一个值时, just replace
in to it ,然后读取新的 ID。
mysql> replace into ubersequence (unused) values ('snap') ;
Query OK, 2 rows affected (0.01 sec)
mysql> select * from ubersequence ;
+----+--------+
| id | unused |
+----+--------+
| 2 | snap |
+----+--------+
1 row in set (0.00 sec)
mysql> replace into ubersequence (unused) values ('snap') ;
Query OK, 2 rows affected (0.01 sec)
mysql> select * from ubersequence ;
+----+--------+
| id | unused |
+----+--------+
| 3 | snap |
+----+--------+
1 row in set (0.00 sec)
不要重复超过二十亿次!
请注意,当然 这两个步骤以及可能更多的步骤必须是代码中的原子事务 .
感谢@Barmar 明确指出 MySql 没有全局序列。