如何将外键放入 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 是 reference
或 parent 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_id
。
persons table
中的Personal_id
是primary key
,orders table
中的Personal_id
是FOREIGN 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 table
是 orderID
.
Foreign key
of Orders table
是 links
到 persons table
.
Personal_id
columns
是 link 和 tables
.
的列
两个 code
块的作用相同,具体取决于您使用的是什么。
现实世界的例子:
assuming:
customer_Table
column
成为 restaurant table
中的 primary key
和 orders 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)
);
我想知道如何在 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 是 reference
或 parent 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_id
。
persons table
中的Personal_id
是primary key
,orders table
中的Personal_id
是FOREIGN KEY
。
现在除了 linking
foreign key
有什么帮助:
我能想到的两种通用方法:
1- 外键就像一个约束,确保没有任何操作会破坏 tables
之间的 links2- 外键也作为一个约束来阻止无效数据被插入到外键列中,因为它必须引用另一个 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 table
是 orderID
.
Foreign key
of Orders table
是 links
到 persons table
.
Personal_id
columns
是 link 和 tables
.
两个 code
块的作用相同,具体取决于您使用的是什么。
现实世界的例子:
assuming:
customer_Table
column
成为 restaurant table
中的 primary key
和 orders 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)
);