代码之家  ›  专栏  ›  技术社区  ›  user1032531

SQLite的MATCH NONE是什么意思?

  •  0
  • user1032531  · 技术社区  · 6 年前

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

    在CREATETABLE语句中显式定义它是否合适?

    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
    );
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Shawn    6 年前

    它与 MATCH 表达式 WHERE

    the documentation

    根据SQL92,可以将MATCH子句附加到复合外键定义,以修改处理子键中出现的空值的方式。如果指定了“MATCH SIMPLE”,则如果一个或多个子关键字值为空,则不需要子关键字来对应父表的任何行。如果指定了“完全匹配”,则如果任何子键值为空,则父表中不需要相应的行,但所有子键值都必须为空。最后,如果外键约束声明为“MATCH PARTIAL”,并且其中一个子键值为空,则父表中必须至少存在一行非空的子键值与父键值匹配的行。

    SQLite分析匹配子句(即,如果指定了匹配子句,则不会报告语法错误),但不会强制执行它们。SQLite中的所有外键约束都被当作指定了MATCH SIMPLE来处理。

    我不知道 MATCH NONE 应该是说,但这是另一个禁止行动的案件一样。

    非常

        2
  •  0
  •   MikeT    6 年前

    不匹配做什么?

    简而言之,当在外键中编码为约束时,SQLite中没有任何内容。

    在外键中,它对外键处理没有影响,它会被忽略,但仍会被解析,并期望一个关键字跟随它,这也会被考虑在内。

    它基本上支持 匹配 简单的 , 部分 满的 (显然)。然而,第二个关键字不限于 , 部分 满的 .

    • (不确定限制,如果有的话,但作为测试 无瘤皮肤 word必须适合关键字(sic)的双字格式。

    • 注意数值将导致语法错误。

    它基本上满足了来自其他DBM的SQL的使用,就像SQLite经常做的那样。

    SQLite Foreign Key Support - 6. Limits and Unsupported Features

    MATCH在SQL中除了外键之外还有其他用途:-

    匹配 Fred was here 但不是 Frederick was here .

    SQLite FTS3 and FTS4 Extensions


    MATCH也是表达式中的运算符,如下所示:-

    应用程序定义的函数。默认的match()函数 实现引发异常,对 有益的逻辑。

    SQL As Understood By SQLite - expression - The LIKE, GLOB, REGEXP, and MATCH operators


    在CREATE中显式定义它是否合适 表语句?

        3
  •  0
  •   user1032531    6 年前

    “MATCH NONE”表示如果子表中的任何键列为空,则父表中不需要相应的行。

    https://www3.sqlite.org/cgi/src/artifact/cf68fddd4643bbe3

    推荐文章