sql - 使用另一个表中的数据设置默认值

标签 sql sqlite

在 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_1A1 列中选择一个值> 并填充列:

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/

相关文章:

sql - 将 "DBML"文件转换为 "SQL database file"

android - SQLite ExecSql 不能从文件中工作

sql - Postgresql:根据表列中的最大匹配数对结果进行排序

sql - 在 where in 子句中返回所有结果 (Sql Server)

mysql - 找到用户问题答案匹配百分比的最佳方法是什么?

sql - 在PL/SQL Oracle中出错

c# - 部署 SQLite + Entity Framework C# 应用程序时出错。 [重现确认。]

Java更新SQL数据库SQL报错?

vb.net - .NET : don't get SQLite in-memory database to work

android - 将csv导入mysql和sqlite时换行