CREATE TABLE data (id CHAR(9) NOT NULL DEFAULT '',
val TEXT,
PRIMARY KEY (id));
创建服务表
CREATE TABLE ids (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
创建生成id值的触发器
CREATE TRIGGER tr_bi_data
BEFORE INSERT
ON data
FOR EACH ROW
BEGIN
INSERT INTO ids () VALUES ();
SET NEW.id = CONCAT('CS', LPAD(LAST_INSERT_ID(), 7, '0'));
DELETE FROM ids;
END
创建禁止id值更改的触发器
CREATE TRIGGER tr_bu_data
BEFORE UPDATE
ON data
FOR EACH ROW
BEGIN
SET NEW.id = OLD.id;
END
插入一些数据,检查结果
INSERT INTO data (val) VALUES ('data-1'), ('data-2');
SELECT * FROM data;
id | val
: | : -
CS0000001 | data-1
CS0000002 | data-2
尝试更新,确保id更改被禁止
UPDATE data SET id = 'CS0000100' WHERE val = 'data-1';
SELECT * FROM data;
id | val
: | : -
CS0000001 | data-1
CS0000002 | data-2
再插入一个数据,确保枚举继续
INSERT INTO data (val) VALUES ('data-3'), ('data-4');
SELECT * FROM data;
id | val
: | : -
CS0000001 | data-1
CS0000002 | data-2
CS0000003 | data-3
CS0000004 | data-4
你几乎没有选择:
可能实现
id
值的触发器id
值更改的触发器id
更改被禁止db<&燃气轮机;小提琴here
缺点:
id
值编辑(必须改为使用复制和删除旧记录,无法设置自定义值)李>相关问题 更多 >
编程相关推荐