2

我正在玩mysql,我发现了两种定义外键的方法:

CREATE TABLE posts(
    id INT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    post_title VARCHAR(255) NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY name (user_id) REFERENCES users(id)
);

和:

CREATE TABLE posts(
    id INT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    post_title VARCHAR(255) NOT NULL,
    PRIMARY KEY(id),
    CONSTRAINT name
        FOREIGN KEY(user_id) 
        REFERENCES users(id)
);

这两者有什么区别?它们是否相同,只是您喜欢如何编写的偏好问题?还是有一些不同?

4

1 回答 1

2

FOREIGN KEY约束中所述:

CREATE TABLEor语句中 InnoDB 外键约束定义的语法ALTER TABLE如下所示:

[约束[符号]]外键
    [ index_name ] ( index_col_name , ...)
    参考tbl_name ( index_col_name ,...)
    [ON DELETE参考选项]
    [ON UPDATE参考选项]

参考选项:
    限制 | 级联 | 设置空 | 无动作

index_name表示外键 ID。如果给定,如果明确定义了外键的索引,则忽略它。否则,如果InnoDB为外键创建索引,它将index_name用于索引名称。

外键定义受以下条件约束:

[ deletia ]

  • 如果给定子句,则该值在数据库中必须是唯一的。如果没有给出子句,则自动创建名称。CONSTRAINT symbolsymbolInnoDB

[ deletia ]

如果在创建外键时FOREIGN KEY子句包含CONSTRAINT名称,则可以引用该名称来删除外键。否则,该fk_symbol值是InnoDB在创建外键时在内部生成的。

因此,您的第一个示例创建了一个自动命名的外键约束,其索引名为name(如果尚不存在);而您的第二个示例创建了一个name以自动生成的索引名称命名的外键约束(如果尚不存在)。

除此之外,它们是相同的。

于 2012-11-29T08:58:20.680 回答