`
nbtlxx
  • 浏览: 253705 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

mysql 学习二: mysql中的外键使用

阅读更多
外键使用的好处在于可以帮助保持数据的一致性,当然缺点就是性能上的损失
而且只有在InnoDB类型的时候才可以使用外键

测试的基本顺序是这样
1. 建表
   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; 


  注意table shirt, 建立外键的语句和级联更新删除的语句
FOREIGN KEY (owner) REFERENCES PERSON(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (id)

2. 插入数据
   person表
   INSERT INTO person VALUES (NULL, sean');
   INSERT INTO person VALUES (NULL, 'chen');
   INSERT INTO person VALUES (NULL, 'wei');

   shirt表
   INSERT INTO shirt VALUES
   (NULL, 'dress', 'orange', 1),
   (NULL, 'polo', 'red', 2),
   (NULL, 'dress', 'blue',1),
   (NULL, 't-shirt', 'white',2);

   注意:第四个字段是代表owner, 这里输入person表中的Id
         建立起连接

3. 进行update关联测试
   3.1 更新person表的id
   update person set id= 3 where id = 1;
   3.2 查看shirt表的owner变化
   SELECT * FROM shirt;
   结果:
   最后owner为1的字段,内容变成3

4. 进行delete关联测试
   4.1 删除Person表中id=3的内容
       DELETE FROM PERSON WHERE id=3;
   4.2 查看shirt表的变化
       select * from shirt;
       结果:发现owner=3的记录被删除
      
测试通过,发现数据保持一致。

另外,在shirt中尝试删除owner作为index, 系统报错
另外,作者做了些实验:
  1. 尝试通过shirt表的字段改变,来改变person表的相关字段
     update shirt set owner=10 where owner=2
     报错

    查了mysql手册,mysql5.0开始,自动把外键值作为index,详细请查看手册

  2. mysql browser作为客户端工具,操作比较简单,容易上手,可以参考使用
  3. 没有解决的问题:
     shirt表中的owner作为index, 如何设置的?为什么不能取消?
     还请高手赐教!
  4. 建立外键的表,是跟谁被reference的进行修改
     也就是shirt表跟谁着person表进行更改、删除
     而不是相反的过程!
    
1
0
分享到:
评论

相关推荐

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

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

    Mysql增加外键的方法

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

    MySQL外键详解

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

    mysql外键设置

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

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

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

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

    ### 如何在MySQL数据库中定义外键 #### 定义数据表 假设某电脑生产商的数据库中包含了整机产品信息和配件供货信息。为了更好地管理这些信息,我们需要创建两个数据表:`pc` 表用于存储整机产品信息,而 `parts` 表...

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

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

    MySQL外键使用及说明详解

    外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);  2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较...

    mysql一个表有三个外键,其中该表的两个字段的应对的外键的表都是同一张表,解决如何将其查询出来

    需求是这样的,一个资源表有分类r_class_id(分类表id对应的外键) 创建者r_up_creator(用户表id对应的外键) 审核者r_ver_id (用户表id对应的外键),这时候该怎么将其都查询出来呢? 首先用左连接: select ...

    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外键设置详解 .txt

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

    mysql的外键

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

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

    MySQL 外键的定义、作用、添加和删除 外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有...外键是 MySQL 中的一个重要概念,它可以用来建立和加强两个表数据之间的连接,保证数据的参照完整性和可靠性。

    MySQL外键约束:数据引用完整性的守护神

    - **易于使用**:MySQL提供了简单直观的界面和丰富的文档,便于用户学习和使用。 - **可扩展性**:MySQL支持从小型应用到大型企业级应用的扩展。 - **社区支持**:由于其广泛的使用,MySQL拥有一个活跃的开发者社区...

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

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

    (mysql面试题)MySQL中的索引、主键和外键的概念及其作用及代码展示.txt

    ### MySQL中的索引、主键和外键的概念及其作用 #### 1. 索引(Index) **定义与作用** 索引是数据库中一种特殊的数据结构,它能够显著提高查询速度。通过索引,数据库管理系统可以快速地定位到表中的特定行,而...

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

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

    MySql的用法学习MySql用的,比较合适

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易于学习的特点在IT行业中占据了重要地位。本资源包显然旨在帮助初学者掌握MySQL的基本用法和概念,提供了一个详细的学习资料。 首先...

Global site tag (gtag.js) - Google Analytics