sqlite - SQLite的MATCH NONE是什么意思?

标签 sqlite

以下CREATE TABLE语句已从DB Browser导出用于SQLite。

MATCH NONE是做什么的? (位于CONSTRAINT语句的最后一行)

在CREATE TABLE语句中明确定义它是否被认为合适?

CREATE TABLE IF NOT EXISTS `Reports` (
    `ID`    integer NOT NULL PRIMARY KEY AUTOINCREMENT,
    `ParameterTypeID`   integer,
    `ReportTypeID`  integer NOT NULL,
    `DurationToSpan`    integer NOT NULL,--# of Days or # of Week
    `SpanDurationType`  char ( 4 ) NOT NULL,--Day,Week
    `Name`  nvarchar ( 250 ) NOT NULL,
    `Description`   nvarchar ( 500 ) DEFAULT NULL,
    `DateCreated`   datetime DEFAULT current_timestamp,
    `DateModified`  datetime DEFAULT current_timestamp,
    `CreatedBy` nvarchar ( 100 ) DEFAULT 'Admin',
    `IsActive`  boolean DEFAULT 1,
    `SortBy`    char ( 4 ) NOT NULL, --Amit, confirm NOT NULL is okay with your code
    CONSTRAINT `FK_Reports_0_0` FOREIGN KEY(`ReportTypeID`) REFERENCES `ReportsType`(`ID`) MATCH NONE ON UPDATE NO ACTION ON DELETE NO ACTION
);

最佳答案

尽管共享关键字,但它与MATCH子句中的WHERE表达式无关。
the documentation外键上:

根据SQL92,可以将MATCH子句附加到复合外键定义,以修改处理子键中出现的NULL值的方式。如果指定了“ MATCH SIMPLE”,则如果一个或多个子关键字值为NULL,则不需要子关键字与父表的任何行相对应。如果指定了“ MATCH FULL”,则如果任何子键值为NULL,则父表中不需要相应的行,但是所有子键值必须为NULL。最后,如果将外键约束声明为“ MATCH PARTIAL”,并且子键值之一为NULL,则父表中必须至少存在一行,其非NULL子键值与父键值匹配。
SQLite解析MATCH子句(即,如果指定一个子句,则不报告语法错误),但不强制执行它们。 SQLite中的所有外键约束都像指定了MATCH SIMPLE一样进行处理。

我不知道MATCH NONE应该是什么意思,但是和其他情况一样,这是另一个禁忌。
诸如此类的东西,非sqlite列类型以及列名周围的所有反引号使我认为该表最初是与其他RDBMS一起使用的,有人只是将定义复制并粘贴到sqlite中,因此对此类事情非常宽大,实际接受了。

关于sqlite - SQLite的MATCH NONE是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571320/

相关文章:

android - 我需要带有游标加载器的内容提供程序吗?

Android SQLite 插入工作,查询不工作

mysql - 按 "position"排序,但最后放置 0

mysql - Rails 4 - 比较来自 MySQL 和 SQLite 的数据

perl - 错误消息:无法对未定义的值调用方法“做”

sqlite - 无法在Windows上通过TDM-GCC使用cgo编译Go应用程序

ruby-on-rails - Rails - 按小时排序

java - 无法使用 SQLite 在 Android Studio 中创建 2 个表

Python Sqlite3 : INSERT INTO table VALUE(dictionary goes here)

python - 如何简单地使用 Python API 将文本文件放入 sqlite?