CREATE TABLE seq_global (
sequence_name VARCHAR(20) NOT NULL PRIMARY KEY,
last_value BIGINT UNSIGNED NOT NULL
) ENGINE=InnoDB;
表 seq_global 包含两个字段:
- sequence_name: 序列的名称,必须是一个唯一的字符串。
- last_value:序列的当前值,必须是一个无符号整数。
可以通过以下命令来初始化全局序列:
INSERT INTO seq_global (sequence_name, last_value) VALUES ('my_seq', 0);
初始化后,可以使用以下命令来获取下一个值:
UPDATE seq_global SET last_value=last_value+1 WHERE sequence_name='my_seq';
SELECT last_value FROM seq_global WHERE sequence_name='my_seq';
使用全局序列创建自增列的方式是,将序列的下一个值作为列的默认值,然后在插入数据时,省去这个列的值。
CREATE TABLE my_table (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
INSERT INTO my_table (name) VALUES ('Alice');
INSERT INTO my_table (name) VALUES ('Bob');
SELECT * FROM my_table;
执行以上命令后,my_table 的数据如下:
id | name |
---|---|
1 | Alice |
2 | Bob |
注意,在使用全局序列创建自增列时,每个表只需要使用一个序列即可。
总之,MySQL全局序列是一项非常有用的特性,它可以帮助大家轻松地生成唯一的标识符和自增列,在实际开发中可以大大提高效率。