mysql创建序列
这里我要做的事情,创建mysql序列,然后在某个表中的一个字段的默认值为序列的模。
注意:我当时使用的是mariadb,版本不够高不支持创建序列。
创建序列,意思是序列的开始为1,下一个数值+1
CREATE SEQUENCE {序列名} START WITH 1 INCREMENT BY 1 CYCLE;
改变表结构,在原来的基础上修改默认值,默认值为序列的模。
ALTER TABLE {表名} ALTER COLUMN {字段名} SET DEFAULT (MOD(nextval(`{序列名}`),2));
示例:
CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1 CYCLE;
ALTER TABLE test_mod ALTER COLUMN b SET DEFAULT (MOD(nextval(`test_seq`),2));
当然你也可以不用这样子修改表结构,在创建table的时候在字段上直接设置默认值就行了。
后来,我在备份好数据库之后导入数据库到另一台主机上,出现了问题。
这是报错信息:
ERROR 1100 (HY000) at line 2598: Table ‘seq_worker_id’ was not locked with LOCK TABLES
意思是在2598行,我的seq_worker_id没有和表一起锁住,因为seq_worker_id是我创建的序列,与表(SDTX_PICTURE)关联在一起了。
找到2598行
把
LOCK TABLES SDTX_PICTURE
WRITE;
改成就行了
LOCK TABLES SDTX_PICTURE
WRITE, seq_worker_id
WRITE;
如果你是linux系统,而且文件太大了。可以用sed修改,具体怎么修改百度一下就知道了。