MariaDB 10.3 序列

在MariaDB 10.3版本中sequence是特殊的表,和表使用相同的namespace,因此表和序列的名字不能相同。

MariaDB [wuhan]> select version();
+--------------------+
| version()          |
+--------------------+
| 10.3.8-MariaDB-log |
+--------------------+
1 row in set (0.000 sec)

MariaDB [wuhan]> create sequence s;
Query OK, 0 rows affected (0.477 sec)
MariaDB [wuhan]> show create sequence s;
+-------+--------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                             |
+-------+--------------------------------------------------------------------------------------------------------------------------+
| s     | CREATE SEQUENCE `s` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB |
+-------+--------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.075 sec)

MariaDB [wuhan]> show create table s\G
*************************** 1. row ***************************
       Table: s
Create Table: CREATE TABLE `s` (
  `next_not_cached_value` bigint(21) NOT NULL,
  `minimum_value` bigint(21) NOT NULL,
  `maximum_value` bigint(21) NOT NULL,
  `start_value` bigint(21) NOT NULL COMMENT ‘start value when sequences is created or value if RESTART is used‘,
  `increment` bigint(21) NOT NULL COMMENT ‘increment value‘,
  `cache_size` bigint(21) unsigned NOT NULL,
  `cycle_option` tinyint(1) unsigned NOT NULL COMMENT ‘0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed‘,
  `cycle_count` bigint(21) NOT NULL COMMENT ‘How many cycles have been done‘
) ENGINE=InnoDB SEQUENCE=1
1 row in set (0.000 sec)

MariaDB [wuhan]>  select * from s\G
*************************** 1. row ***************************
next_not_cached_value: 1
        minimum_value: 1
        maximum_value: 9223372036854775806
          start_value: 1
            increment: 1
           cache_size: 1000
         cycle_option: 0
          cycle_count: 0
1 row in set (0.001 sec)
cycle_count每次递增。

可以看到序列是一种特殊的表,对这种表不能update和delete,不能将表名和序列名命名为一样的,否则报错。
MariaDB [wuhan]> update s set increment=2 ;
ERROR 1031 (HY000): Storage engine SEQUENCE of the table `wuhan`.`s` doesn‘t have this option
MariaDB [wuhan]> delete from s where increment=1;
ERROR 1031 (HY000): Storage engine SEQUENCE of the table `wuhan`.`s` doesn‘t have this option
MariaDB [wuhan]> create table s(a int);
ERROR 1050 (42S01): Table ‘s‘ already exists
但是对表的重命名、删除操作生效:
MariaDB [wuhan]> alter table s  rename to ss;
Query OK, 0 rows affected (0.291 sec)

MariaDB [wuhan]> rename table ss to s;
Query OK, 0 rows affected (0.022 sec)

MariaDB [wuhan]> drop table s;
Query OK, 0 rows affected (0.076 sec)

对序列进行FLUSH TABLE操作将会关闭序列,生成的下一个序列值将会根据序列对象生成,实际上将会丢弃缓存cached 值。
MariaDB [wuhan]> create sequence s;
Query OK, 0 rows affected (0.024 sec)

MariaDB [wuhan]> select nextval(s),lastval(s);
+------------+------------+
| nextval(s) | lastval(s) |
+------------+------------+
|          1 |          1 |
+------------+------------+
1 row in set (0.059 sec)

MariaDB [wuhan]> select nextval(s),lastval(s);
+------------+------------+
| nextval(s) | lastval(s) |
+------------+------------+
|          2 |          2 |
+------------+------------+
1 row in set (0.001 sec)

MariaDB [wuhan]> flush table s;
Query OK, 0 rows affected (0.001 sec)

MariaDB [wuhan]> select nextval(s),lastval(s);
+------------+------------+
| nextval(s) | lastval(s) |
+------------+------------+
|       1001 |       1001 |
+------------+------------+
1 row in set (0.001 sec)

MariaDB [wuhan]> flush table s;
Query OK, 0 rows affected (0.000 sec)

MariaDB [wuhan]> select nextval(s),lastval(s);
+------------+------------+
| nextval(s) | lastval(s) |
+------------+------------+
|       2001 |       2001 |
+------------+------------+
1 row in set (0.001 sec)

缺点:
由于在MariaDB中在很多应用场景中序列对象充当普通的表,将会受到lock table操作的影响。但是在其他DBMS中则不会受影响,比如oracle中的序列。

序列兼容性:
MariaDB兼容ANSI SQL和oracle 序列的语法,oracle 语法的序列需要将SQL_MODE设置为SQL_MODE=oracle.

序列备份:
由于序列是只有一行数据的常规表,因此mysqldump可以很好的支持。

序列和复制:
若在master-master复制或者galera复制中使用序列,需要设置 INCREMENT=0,以告知sequence对象使用
auto_increment_increment和 auto_increment_offset对每个服务器产生唯一的序列值。
转自:
https://mariadb.com/kb/en/library/sequence-overview/

原文地址:https://www.cnblogs.com/mingjing/p/11419917.html

时间: 2024-11-20 14:57:46

MariaDB 10.3 序列的相关文章

What's is new in MariaDB 10.0(MySQL创始人Monty演讲)

视频地址(请使用翻墙软件观看): http://www.youtube.com/watch?v=4Th7JeRxPlo&feature=youtu.be PDF在附件里. What's is new in MariaDB 10.0(MySQL创始人Monty演讲),布布扣,bubuko.com What's is new in MariaDB 10.0(MySQL创始人Monty演讲)

MariaDB 10 基于OpenSSL的主从复制

需求架构 准备工作 主从服务器时间同步 # 主从服务器同时配置crontab任务,与NTP服务器同步时间即可 */5 * * * * ntpdate 172.16.0.1 &>/dev/null 部署配置 主库配置 vi /etc/my.cnf server-id = 1 # 在复制架构中,需保持全局唯一 log-bin = mysql-bin # 默认在数据目录下 sync_binlog = 1 # 设置mariadb每次在提交事务前会将二进制日志同步到磁盘,保证服务器崩溃时不会丢失事件

MariaDB 10.0.X中,动态列支持 JSON 格式来获取数据。

MariaDB 10.0.X中,动态列(Dynamic Columns),可以支持 JSON 格式来获取数据. 为了兼容传统SQL语法,MariaDB 10和MySQL5.7支持原生JSON格式,即关系型数据库和文档型NoSQL数据库集于一身. 使用说明: ###表结构 create table assets (   item_name varchar(32) primary key, -- A common attribute for all items   dynamic_cols  blo

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源复制,一个slave可以有多个master,分别从各自的master复制不同的DB. 这个特性可以用在OLAP环境中,传统电商DB都是拆了再拆,分库分表,sharding,而OLAP环境或者大数据平台环境,通常需要各种数据的聚合,多个平台多个DB数据的复合查询,而这些数据分散在各个库中,怎么办了,当

MariaDB 10之TokuDB存储引擎

TokuDB存储引擎,你可以把它看做是ARCHIVE存储引擎的升级版,它拥有了密集压缩,并且支持事务. 压缩比: Engine Compression Table size [MB] InnoDB  none  2272 InnoDB  KEY_BLOCK_SIZE=8  1144 InnoDB  KEY_BLOCK_SIZE=4  584 MyISAM  none  1810 MyISAM  compressed with myisampack  809 Archive  default  2

循环-10. 求序列前N项和(15)

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和.注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行中输出部分和的值,精确到小数点后2位.题目保证计算结果不超过双精度范围. 输入样例: 20 输出样例: 32.66 #include <iostream> #include <stdio.h> using namespace std; int main(){ i

总结一下,MariaDB 10(MySQL5.6企业版分支)的主要新特性

① 支持48核的CPU,而5.5支持24核的CPU ② 内存热数据持久化,我们知道当系统重启或者mysql进程重启后,Innodb的内存池里面的热数据全部清空,需要重新把磁盘的数据缓存进来,然后根据 LRU最近最少使用原则,把热数据保持在内存里,冷数据踢出到磁盘里.这个过程是缓慢的.5.6里改进了这一点,会自动把内存的热数据导出到磁盘里,这样 mysql重启后,会立即从磁盘里导入Innodb内存池,减少了与磁盘IO的交互. ③ 在线DDL功能.5.5版本里,修改表结构会导致锁表,例如用户进件会卡

使用RPM包离线安装MariaDB 10.0.20 , 基于CentOS 6.6-x86-64

使用RPM包[离线]安装 MariaDB 10.0.20,基于CentOS 6.6-x86-64 Minimal 湘中朱生 2015-07-01 于深圳福田 QQ: 872007255 MariaDB交流群: 198111730 文档说明: 1. 网上有很多关于MariaDB/Mysql数据库的安装技术博客文档,主要有源码编译安装和Yum源安装,有些写得很规范优秀,但很少有基于离线RPM包安装的. 2. 源码编译安装对于初学者而言门槛过高, 很容易打击MariaDB初学者学习探索的积极性; Yu

mariadb 10.1查看per connection内存消耗

在mariadb 10.1版本中,在information_schema.processlist表中,新增了几个字段,其中有一个memory_used,其记录的是连接的内存消耗. 同时新增了一个状态变量memory_used,其记录的应该是所有连接加起来消耗的内存(官方并没有特别详细地解释https://mariadb.com/kb/en/mariadb/show-processlist/),应该类似于oracle pga的概念. 为了再检查下mysql占用内存远超过buffer pool的原因