sqlite - 插入新行时如何自动增加自定义主键
问题描述
我希望数据库中的每个表在其主键中都有一个前缀。例如,表中的第一行EMPLOYERS
应该有一个 idEMP_00000001
等等。我怎样才能使插入的每个新行都有一个 id EMP_00000002, ...03, ...
,最好是带有触发器?
解决方案
不要与 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
推荐阅读
- angular - 是否可以改变角度的视图技术?
- java - 如何从文件中获取 JSON 对象并使用 Apache Camel 路由将其映射到 Java 类?
- ruby-on-rails - 找不到 /home/rails/webapp/Gemfile.lock 所需的 'bundler' (2.1.4)。(Gem::GemNotFoundException) 运行 docker build
- amazon-web-services - AWS Glue 动态框架 - 如果没有数据,则没有列标题
- django - ImportError:运行 collectstatic 时没有名为 rest_framework 的模块
- artifactory - 使用 jfrog CLI 在 Artifactory 中转储文件的存储校验和
- javascript - (JSX) 是 React 中 javascript 的语法扩展是什么意思
- typescript - 如何制作没有任何或对象的 TypeScript 类型保护?
- python - 就 Big O 而言,该解决方案的运行时间复杂度和空间复杂度是多少?
- java - 使用 springProfile 配置时,Logback-spring.xml 创建多个日志文件