首页 > 解决方案 > 插入新行时如何自动增加自定义主键

问题描述

我希望数据库中的每个表在其主键中都有一个前缀。例如,表中的第一行EMPLOYERS应该有一个 idEMP_00000001等等。我怎样才能使插入的每个新行都有一个 id EMP_00000002, ...03, ...,最好是带有触发器?

标签: sqlite

解决方案


不要与 Sqlite 的工作方式作斗争,只需在需要时将前缀添加到普通的 rowid (如果您将在许多不同的查询中使用长版本以避免不必要的重复,可以将其包装在视图中),并坚持为了提高效率,在连接、外键等内部使用纯数字:

CREATE TABLE employee_data(id INTEGER PRIMARY KEY AUTOINCREMENT, name);
CREATE VIEW employees(id, name) AS SELECT printf('EMP_%08d', id), name FROM employee_data;
INSERT INTO employee_data(name) VALUES ('Bill'), ('Paul');
SELECT * FROM employees;
id            name
------------  ----------
EMP_00000001  Bill
EMP_00000002  Paul

推荐阅读