gpt4 book ai didi

mysql - 创建唯一外键表

转载 作者:行者123 更新时间:2023-11-29 11:59:11 25 4
gpt4 key购买 nike

我正在使用 MySQL,并且有两个以下形式的表:

mysql> describe ing_categories;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| ID_Category | int(10) unsigned | NO | PRI | NULL | auto_increment |
| category | varchar(64) | NO | UNI | NULL | |
+-------------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> describe ing_titles;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| ID_Title | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(128) | NO | UNI | NULL | |
+----------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

我有第三个表包含外键记录,外键是上面的表:

mysql> describe ing_title_categories;
+-------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+----------------+
| ID_Title_Category | int(10) unsigned | NO | PRI | NULL | auto_increment |
| ID_Title | int(10) unsigned | NO | MUL | NULL | |
| ID_Category | int(10) unsigned | NO | MUL | NULL | |
+-------------------+------------------+------+-----+---------+----------------+

如何创建 ing_titles_categories 表以使外键唯一?

这是我的 SQL 语句:

CREATE TABLE ing_title_categories
(
ID_Title_Category INTEGER UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
ID_Title INTEGER UNSIGNED NOT NULL,
ID_Category INTEGER UNSIGNED NOT NULL,
FOREIGN KEY fk_title(ID_Title)
REFERENCES ing_titles(ID_Title)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY fk_category(ID_Category)
REFERENCES ing_categories(ID_Category)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB;

我搜索了其他问题,它们涉及为外键创建索引;但我不想通过外键进行索引,我希望约束对于外键对来说是唯一的。

工具:
MySQL服务器版本:5.6.26

注释:

  1. 我没有使用 PHP,而是通过 MySQL C++ Connector 使用 C++,所以请不要使用 PHP示例。

最佳答案

您添加唯一键或主键约束。这是一个例子:

CREATE TABLE ing_title_categories
(
ID_Title_Category INTEGER UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
ID_Title INTEGER UNSIGNED NOT NULL,
ID_Category INTEGER UNSIGNED NOT NULL,
FOREIGN KEY fk_title(ID_Title)
REFERENCES ing_titles(ID_Title)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY fk_category(ID_Category)
REFERENCES ing_categories(ID_Category)
ON UPDATE CASCADE
ON DELETE RESTRICT,
UNIQUE (ID_Title, ID_Category)
) ENGINE=InnoDB;

唯一约束的实现确实创建了一个索引。但是,需要该索引来强制执行约束。在适当的情况下,它还将用于查询。

请注意,这相当于:

create unique index idx_ing_title_categories_2 on ing_title_categories(ID_Title, ID_Category);

将约束放在 CREATE TABLE 语句中的一个优点是,您可以使用 CONSTRAINT 关键字为约束指定一个有意义的名称 - 当您想要弄清楚当约束被违反时会发生什么。

关于mysql - 创建唯一外键表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com