在 SQLite 中创建表时,我想使用另一个表中的值来定义列的默认值(因为该列是外键)。像这样:
CREATE TABLE Test_1(A1 INTEGER PRIMARY KEY, B1 TEXT NOT NULL);
CREATE TABLE Test_2(A2 INTEGER PRIMARY KEY, B2 INTEGER NOT NULL DEFAULT [a value in column A1 of Test_1]);
我假设 Test_1
已经填充了为 Test_2
表中的 B2
提供可能值的记录。例如,对于“状态”列(即 B2
),这些可能是一些常量,如“已创建”、“进行中”、“已暂停”、“已完成”。
我当然可以从 Test_1
中选择一个值的主键并将其硬编码为 B2
的默认值,但是如果我更改Test_1
的数据。同时,我们不能在 CREATE
中使用 SELECT
语句。
如果这在 SQLite 中不可行,其他 SQL 引擎是否可行?或者更一般地说,这是否应该由应用程序逻辑而不是数据库设计来强制执行?
最佳答案
我想你可以使用 TRIGGER
您可以在 INSERT 上测试 B2
的值,如果它没有被填充,那么您可以在 Test_1
的 A1
列中选择一个值> 并填充列:
CREATE TRIGGER IF NOT EXISTS Test_2_B2_value
AFTER INSERT ON Test_2
FOR EACH ROW WHEN Test_2.B2 IS NULL
BEGIN
NEW.B2 = (SELECT A1 FROM Test_1 LIMIT 1);
END
关于sql - 使用另一个表中的数据设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29908714/