在MySQL中使用外键
昨晚用Mysql建外键约束,始终没有成功,今天找到这个,原来只有InnoDB类型的表才可以使用外键.
只有InnoDB类型的表才可以使用外键
CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
)type=innoDB;
CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL,
FOREIGN KEY (owner) REFERENCES PERSON(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (id)
)type=innoDB;
然后打开MySQL Administrator终于看到 FOREIGN KEY有东西了,尝试手工删除后再用MySQL Administrator建立,成功:)
INSERT INTO person VALUES (NULL, 'Antonio Paz');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', @last),
(NULL, 'polo', 'red', @last),
(NULL, 'dress', 'blue', @last),
(NULL, 't-shirt', 'white', @last);
SELECT * FROM person;
SELECT * FROM shirt;
测试UPDATE关联
UPDATE PERSON SET id=3 WHERE id=1;
SELECT * FROM shirt;
测试DELETE关键
DELETE FROM PERSON WHERE id=3;
SELECT * FROM shirt;
看到有文章简单使用owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),进行连接,但这样的连接好像没任何意义,担看到“MySQL 3.23.7-alpha手册”有这样一句话“一些应用程序要求他们存在”或者“插入强制约束”、“级联删除”、“级联更新”这些特性是在MySQL甘个版本中才有吧
还有有文章说要建立INDEX (owner) 才可以,但我经测试并不需要,这可能是和MYSQL版本不同有关,我用的是MySQL4.1
PS.查看Mysql手册才知道从MySQL 4.1.2开始会自动建立这个INDEX (owner)
参考:
http://dev.mysql.com/doc/mysql/en/innodb-foreign-key-constraints.html
分享到:
相关推荐
例如,如果希望在删除部门时自动删除该部门的所有员工,可以定义如下外键: ```sql ALTER TABLE Employees ADD CONSTRAINT fk_department_cascade FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID...
本文详细介绍了在MySQL中增加外键的方法,并提供了使用PHPMyAdmin管理工具和SQL语句来实现外键添加的操作步骤和注意事项。 首先,要成功地在MySQL中增加一个外键,需要满足几个前提条件: 1. 本表的列必须与外键...
在实践中,我们可以使用以下语句来创建一个具有级联删除和更新功能的外键: CREATE TABLE `userinfo` ( `sn` int(4) NOT NULL AUTO_INCREMENT, `userid` int(4) NOT NULL, `info` varchar(20) DEFAULT NULL, ...
这种设计确保了整机中使用的 CPU 必须存在于配件表中。因此,`pc` 表中的 CPU 型号字段受到 `parts` 表中 CPU 型号字段的约束。这构成了一个典型的外键约束场景。 #### 创建表结构 首先,我们来创建 `parts` 表: ...
MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并不是操作系统的文件权限错误或其他原因,而是 MySQL 一直...
在MySQL数据库中,外键是实现表间关系的重要机制,它确保了数据的一致性和完整性。设置外键时,有几点需要注意,以确保数据库设计的规范性和高效性。以下是对这些关键点的详细阐述: 1. **外键约束定义**: 外键是...
### MySQL外键详解 #### 一、外键的基本概念与作用 外键(Foreign Key)是一种重要的数据库约束机制,主要用于确保数据库中多个表之间数据的一致性和完整性。它通过引用另一个表的主键来实现这一目标。外键的存在...
在MySQL数据库管理系统中,外键(Foreign Key)是一种约束机制,用于维护数据的一致性和完整性。外键确保了引用完整性,即一个表中的数据能够正确引用另一个表中的数据。当我们在设计关系型数据库时,使用外键可以...
在MySQL数据库系统中,外键(Foreign Key)是一种重要的关系型数据库约束,它用于建立和维护两个表之间的关联。外键允许我们在一个表(被引用表)中引用另一个表(引用表)的主键,从而确保数据的一致性和完整性。在...
在这个例子中,`product_order` 表中定义了两个外键: - `fk_product`,用于参照 `product` 表中的复合主键 `(category, id)`。 - `fk_customer`,用于参照 `customer` 表的主键 `id`。 这样,就可以确保在 `...
在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY (vccId) REFERENCES ss_vcc(vccId) ON DELETE CASCADE; ``` 这条语句将在ss_accesscode表中添加一个外键约束...
MySQL 外键
知识点很简单,但是语句总忘,在这里写一个小例子,有助于大家记忆。mySql主外键关联例子
MySQL命令行&MySql外键设置详解 .txt
如果不使用外键的话,当单据 1、2 都使用了商品 ID=3 的商品时,如果删除商品表中 ID=3 的对应记录后,再查看单据 1、2 的时候就会查不到商品的名称。 二、添加外键的格式 添加外键的格式为: ALTER TABLE ...
在MySQL数据库管理中,删除表是一项需要谨慎操作的任务,尤其是当表之间存在外键约束时。外键约束是关系数据库中确保数据完整性和一致性的重要机制,它不允许在父表(引用其他表的字段的表)中删除那些已被子表引用...
为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在成绩表中添加外键约束。 外键的定义可以概括为:外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来...
外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以...
其中MySQL作为一种流行的关系型数据库管理系统(RDBMS),因其开放源代码特性、跨平台能力、高性能、可靠性、易于使用以及强大的社区支持等特点,在LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈中占据了...