运行环境:centos 7.5+ MariaDB 10.3.8
序列是创建产生顺序值得对象,使用create sequence语句创建。
sequence是MySQL自带的auto_increment 的备份方案用于可以自主控制多少序列数值;
此外序列的cache values 某些时候比使用auto_increment访问速度更快;
还有一个好处是可以访问所使用序列的最后一个值,解决了函数 LAST_INSERT_ID()的限制。
相关的语法:
CREATE SEQUENCE 创建序列
SHOW CREATE SEQUENCE 查看序列
ALTER SEQUENCE 修改序列
DROP SEQUENCE 删除序列
NEXT VALUE FOR 查询序列的下一个值
PREVIOUS VALUE FOR 查询序列的前一个值
SETVAL() 设置序列的值。
--创建序列:
MariaDB [wuhan]> create sequence seq start with 1000 minvalue 1000 maxvalue 9999 increment by 2 cache 1000 cycle;
Query OK, 0 rows affected (0.004 sec)
MariaDB [wuhan]> show create sequence seq;
+-------+-----------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------+
| seq | CREATE SEQUENCE `seq` start with 1000 minvalue 1000 maxvalue 9999 increment by 2 cache 1000 cycle ENGINE=InnoDB |
+-------+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.003 sec)
--序列的下一个值和上一个的查询:
MariaDB [wuhan]> select nextval(seq),next value for seq as seq_nextval,lastval(seq),previous value for seq as seq_preval ;
+--------------+-------------+--------------+------------+
| nextval(seq) | seq_nextval | lastval(seq) | seq_preval |
+--------------+-------------+--------------+------------+
| 1514 | 1516 | 1516 | 1516 |
+--------------+-------------+--------------+------------+
1 row in set (0.000 sec)
--序列的修改:
MariaDB [wuhan]> ALTER SEQUENCE seq restart 1200;
Query OK, 0 rows affected (0.003 sec)
MariaDB [wuhan]> select nextval(seq),next value for seq as seq_nextval,lastval(seq),previous value for seq as seq_preval ;
+--------------+-------------+--------------+------------+
| nextval(seq) | seq_nextval | lastval(seq) | seq_preval |
+--------------+-------------+--------------+------------+
| 1200 | 1202 | 1202 | 1202 |
+--------------+-------------+--------------+------------+
1 row in set (0.001 sec)
--setval:设置序列的下一个返回值,主要setval()设置的序列必须是增加,反之则返回NULL值。
MariaDB [wuhan]> select setval(seq,1300);
+------------------+
| setval(seq,1300) |
+------------------+
| 1300 |
+------------------+
1 row in set (0.000 sec)
MariaDB [wuhan]> select nextval(seq),next value for seq as seq_nextval,lastval(seq),previous value for seq as seq_preval ;
+--------------+-------------+--------------+------------+
| nextval(seq) | seq_nextval | lastval(seq) | seq_preval |
+--------------+-------------+--------------+------------+
| 1302 | 1304 | 1304 | 1304 |
+--------------+-------------+--------------+------------+
1 row in set (0.000 sec)
MariaDB [wuhan]> select setval(seq,1200);
+------------------+
| setval(seq,1200) |
+------------------+
| NULL |
+------------------+
1 row in set (0.000 sec)
序列已经增加到1300了此时设置为1200 则比之前的序列值小返回为NULL。
MariaDB 10.3 sequence(序列)
猜你喜欢
转载自blog.csdn.net/vkingnew/article/details/81211821
今日推荐
周排行