如何将外键放入 mysql

how to put foreign key in mysql

我想知道如何在 table、

中使用外键

我这里有一个代码:

create table penerbit_buku(
  id_buku char(8), 
  foreign key(id_buku) references buku(id_buku),
  id_penerbit char(3), 
  foreign key(id_penerbit) references penerbit(id_penerbit)
)

我可以改用这个代码吗:

create table penerbit_buku(
  id_buku char(8) references buku(id_buku),
  id_penerbit char(3) references penerbit(id_penerbit)
)

我都试过了,都成功了,对吗?

示例:

    CREATE TABLE Orders (
    ID int NOT NULL,
    Number int NOT NULL,
    PersonID int,
    PRIMARY KEY (ID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
    );

外键必须引用另一个 table

中的主键
    create table penerbit_buku
    (id_buku char(8), 
    id_penerbit char(3), 
    foreign key(id_buku) references buku(id_buku),
    foreign key(id_penerbit) references penerbit(id_penerbit)
    );

我需要看看你的其他 table 以便在代码中提供更好的帮助

你可以使用这个:

ALTER TABLE `table1`
ADD CONSTRAINT `FK_table1_table2` FOREIGN KEY (`fk_id`) REFERENCES `table2` (`id`);

不,MySQL 解析但 忽略 标准内联 REFERENCES 语法。

当您声明一个外键以及一个单独的列定义时,它接受合法的语法 SQL,但随后不存储外键约束。没有报错,但是好像你根本就没有写外键语法

您必须将外键声明为 table 级约束(上面的第一个示例)。

这是 MySQL 缺少标准 SQL 功能的情况。该问题早在 2004 年就已报告,但从未修复! https://bugs.mysql.com/bug.php?id=4919

这个问题的原因是在历史上,外键约束不是MySQL本身支持的,而是InnoDB存储引擎支持的,这是当时其他公司的。他们必须为 CREATE TABLE 和 ALTER TABLE 实现自己的解析器以支持外键,并且当 table 时,他们不想采取额外的步骤来支持内联外键语法-级外键语法将起作用。

InnoDB 架构师posted 回复:

[6 Sep 2006 10:03] Heikki Tuuri

This will be fixed in MySQL foreign keys, when they are available for all table types.

MySQL 项目正逐步将外键和类似功能直接集成到 MySQL 产品中。也许再过几年,我们会看到对标准 FK 语法的更好支持。

先看看FOREIGN KEY的描述。

一个FOREIGN KEY是一个键,用来link两个tables在一起。

A FOREIGN KEY 是一个 table 中的 field(或 fields 的集合),它引用另一个 table 中的 PRIMARY KEY ].

通常具有 foreign key 的 table 是 child table。另一个 table 是 referenceparent table.

因为我看不到你的table,我给你举个不同的例子。

看下面两个table:

Persons table:
Personal_id  LastName   FirstName  age

1            pretty       bob       20
2            angry        jack      30
3            happy        sue       28

Order Table:
OrderID OrderNumber Personal_id
1          77895      3
2          44678      3
3          22456      2
4          24562      1

现在看看 Orders table 中的 Personal_id column 如何指向 persons table 中的 Personal_idpersons table中的Personal_idprimary keyorders table中的Personal_idFOREIGN KEY

现在除了 linking foreign key 有什么帮助:

我能想到的两种通用方法:

1- 外键就像一个约束,确保没有任何操作会破坏 tables

之间的 links

2- 外键也作为一个约束来阻止无效数据被插入到外键列中,因为它必须引用另一个 table

中的主键列

MySql中的代码示例:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (Personal_id) REFERENCES Persons(Personal_id)
);

代码示例是 SQL-Server/MS Access/Oracle:

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(Personal_id)
);

Primary key of Orders tableorderID.

Foreign key of Orders tablelinkspersons table.

Personal_id columns 是 link 和 tables.

的列

两个 code 块的作用相同,具体取决于您使用的是什么。

现实世界的例子:

assuming:

customer_Table column 成为 restaurant table 中的 primary keyorders table 中的 foreign key

如果服务员在机器中输入 customer_Table 数字 20,他错误地输入了 customer_Table 200 这样的密钥在 restaurant table 中不存在 primary key所以他不能。

额外: 如果你想允许命名 FOREIGN KEY 约束,并在许多 columns 上定义一个 FOREIGN KEY 约束怎么办?

MySQL / SQL 服务器/Oracle/MS Access:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    Personal_id int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (Personal_id)
    REFERENCES Persons(Personal_id)
);