在MYSQL中使用引用

在MYSQL中使用引用,sql,mysql,foreign-keys,Sql,Mysql,Foreign Keys,我在这里得到了另一个问题的答案: 这是一个很好的答案,但我不理解关于参考资料的一点。我可以使用SQL语句,但我从未使用过引用 它们是用来干什么的 它们是如何使用的 请举个例子 REFERENCES关键字是的一部分,它使MySQL要求引用表的指定列中的值也存在于引用表的指定列中 这可以防止外键引用不存在或已删除的ID,并且可以选择性地防止您在仍引用行时删除行 一个具体的例子是,如果每个员工都必须属于某个部门,则可以从employee.departmentid引用department.id添加外键

我在这里得到了另一个问题的答案:

这是一个很好的答案,但我不理解关于参考资料的一点。我可以使用SQL语句,但我从未使用过引用

  • 它们是用来干什么的
  • 它们是如何使用的
  • 请举个例子

  • REFERENCES关键字是的一部分,它使MySQL要求引用表的指定列中的值也存在于引用表的指定列中

    这可以防止外键引用不存在或已删除的ID,并且可以选择性地防止您在仍引用行时删除行

    一个具体的例子是,如果每个员工都必须属于某个部门,则可以从
    employee.departmentid
    引用
    department.id
    添加外键约束

    运行以下代码创建两个测试表
    tablea
    tableb
    ,其中
    tableb
    中的列
    a\u id
    引用了
    tablea
    的主键<代码>表格a填充了几行

    CREATE TABLE tablea (
        id INT PRIMARY KEY,
        foo VARCHAR(100) NOT NULL
    ) Engine = InnoDB;
    
    INSERT INTO tablea (id, foo) VALUES
    (1, 'foo1'),
    (2, 'foo2'),
    (3, 'foo3');
    
    CREATE TABLE tableb (
        id INT PRIMARY KEY,
        a_id INT NOT NULL,
        bar VARCHAR(100) NOT NULL,
        FOREIGN KEY fk_b_a_id (a_id) REFERENCES tablea (id)
    ) Engine = InnoDB;
    
    现在尝试以下命令:

    INSERT INTO tableb (id, a_id, bar) VALUES (1, 2, 'bar1');
    -- succeeds because there is a row in tablea with id 2
    
    INSERT INTO tableb (id, a_id, bar) VALUES (2, 4, 'bar2');
    -- fails  because there is not a row in tablea with id 4
    
    DELETE FROM tablea WHERE id = 1;
    -- succeeds because there is no row in tableb which references this row
    
    DELETE FROM tablea WHERE id = 2;
    -- fails because there is a row in tableb which references this row
    

    重要提示:两个表都必须是InnoDB表,否则将忽略该约束。

    引用的
    关键字显示外键约束,这意味着:

    FOREIGN KEY (`chat_id` ) REFERENCES `chats`.`chat` (`id` )
    
    …当前表中的
    chat\u id
    列只能包含
    chat
    表、
    id
    列中已经存在的值

    例如,如果CHAT.id列包含:

    id
    ----
    a
    b
    c
    

    …您不能将a/b/c以外的任何值添加到
    chat\u id
    列中。

    当您使用引用时,我认为它还希望表必须存在于关系一侧。