`
莫生气
  • 浏览: 866265 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

转:在MySQL中使用外键

阅读更多
在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


分享到:
评论
1 楼 dehuai 2009-02-04  
原来如此,多亏你写了这篇文章。

相关推荐

    掌握数据完整性:深入理解MySQL中的外键

    例如,如果希望在删除部门时自动删除该部门的所有员工,可以定义如下外键: ```sql ALTER TABLE Employees ADD CONSTRAINT fk_department_cascade FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID...

    Mysql增加外键的方法

    本文详细介绍了在MySQL中增加外键的方法,并提供了使用PHPMyAdmin管理工具和SQL语句来实现外键添加的操作步骤和注意事项。 首先,要成功地在MySQL中增加一个外键,需要满足几个前提条件: 1. 本表的列必须与外键...

    MySQL中利用外键实现级联删除、更新

    在实践中,我们可以使用以下语句来创建一个具有级联删除和更新功能的外键: CREATE TABLE `userinfo` ( `sn` int(4) NOT NULL AUTO_INCREMENT, `userid` int(4) NOT NULL, `info` varchar(20) DEFAULT NULL, ...

    如何在MySQL数据库中定义外键

    这种设计确保了整机中使用的 CPU 必须存在于配件表中。因此,`pc` 表中的 CPU 型号字段受到 `parts` 表中 CPU 型号字段的约束。这构成了一个典型的外键约束场景。 #### 创建表结构 首先,我们来创建 `parts` 表: ...

    mysql处理添加外键时提示error 150 问题的解决方法

    MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并不是操作系统的文件权限错误或其他原因,而是 MySQL 一直...

    mysql数据库设置外键应该注意的几点

    在MySQL数据库中,外键是实现表间关系的重要机制,它确保了数据的一致性和完整性。设置外键时,有几点需要注意,以确保数据库设计的规范性和高效性。以下是对这些关键点的详细阐述: 1. **外键约束定义**: 外键是...

    MySQL外键详解

    ### MySQL外键详解 #### 一、外键的基本概念与作用 外键(Foreign Key)是一种重要的数据库约束机制,主要用于确保数据库中多个表之间数据的一致性和完整性。它通过引用另一个表的主键来实现这一目标。外键的存在...

    mysql 删除外键.png

    在MySQL数据库管理系统中,外键(Foreign Key)是一种约束机制,用于维护数据的一致性和完整性。外键确保了引用完整性,即一个表中的数据能够正确引用另一个表中的数据。当我们在设计关系型数据库时,使用外键可以...

    mysql的外键

    在MySQL数据库系统中,外键(Foreign Key)是一种重要的关系型数据库约束,它用于建立和维护两个表之间的关联。外键允许我们在一个表(被引用表)中引用另一个表(引用表)的主键,从而确保数据的一致性和完整性。在...

    mysql外键设置

    在这个例子中,`product_order` 表中定义了两个外键: - `fk_product`,用于参照 `product` 表中的复合主键 `(category, id)`。 - `fk_customer`,用于参照 `customer` 表的主键 `id`。 这样,就可以确保在 `...

    mysql外键的添加与删除参考.pdf

    在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY (vccId) REFERENCES ss_vcc(vccId) ON DELETE CASCADE; ``` 这条语句将在ss_accesscode表中添加一个外键约束...

    外键.sql ~MySQL创建外键的操作

    MySQL 外键

    mySql主外键关联例子

    知识点很简单,但是语句总忘,在这里写一个小例子,有助于大家记忆。mySql主外键关联例子

    MySQL命令行&MySql外键设置详解 .txt

    MySQL命令行&MySql外键设置详解 .txt

    MySql外键设置详解

    如果不使用外键的话,当单据 1、2 都使用了商品 ID=3 的商品时,如果删除商品表中 ID=3 的对应记录后,再查看单据 1、2 的时候就会查不到商品的名称。 二、添加外键的格式 添加外键的格式为: ALTER TABLE ...

    MySQL删除表的时候忽略外键约束的简单实现

    在MySQL数据库管理中,删除表是一项需要谨慎操作的任务,尤其是当表之间存在外键约束时。外键约束是关系数据库中确保数据完整性和一致性的重要机制,它不允许在父表(引用其他表的字段的表)中删除那些已被子表引用...

    MySQL外键的定义、作用、添加和删除

    为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在成绩表中添加外键约束。 外键的定义可以概括为:外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来...

    MySQL外键使用及说明详解

    外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;  3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以...

    数据一致性守护者:MySQL外键约束深度解析

    其中MySQL作为一种流行的关系型数据库管理系统(RDBMS),因其开放源代码特性、跨平台能力、高性能、可靠性、易于使用以及强大的社区支持等特点,在LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈中占据了...

Global site tag (gtag.js) - Google Analytics