`
feng5588feng
  • 浏览: 12605 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

MySQL 外键约束

 
阅读更多
  查看文章   
MySQL 外键约束

创建测试主表. ID 是主键.
CREATE TABLE test_main (
  id      INT,
  value   VARCHAR(10),
  PRIMARY KEY(id)
);


-- 创建测试子表.
CREATE TABLE test_sub (
  id      INT,
  main_id INT,
  value   VARCHAR(10),
  PRIMARY KEY(id)
);


-- 插入测试主表数据.
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');

-- 插入测试子表数据.
INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');



默认外键约束方式
mysql> ALTER TABLE test_sub
    ->   ADD CONSTRAINT main_id_cons
    ->   FOREIGN KEY (main_id)
    ->   REFERENCES  test_main(id);
    -> //
Query OK, 2 rows affected (0.17 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> DELETE FROM
    ->   test_main
    -> WHERE
    ->   id = 1;
    -> //
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constrai
nt fails (`test`.`test_sub`, CONSTRAINT `main_id_cons` FOREIGN KEY (`main_id`) R
EFERENCES `test_main` (`id`))


MySQL使用下面这个语句删除外键约束
ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;



DELETE CASCADE 方式
mysql> ALTER TABLE test_sub
    ->   ADD CONSTRAINT main_id_cons
    ->   FOREIGN KEY (main_id)
    ->   REFERENCES  test_main(id)
    ->   ON DELETE CASCADE//
Query OK, 2 rows affected (0.16 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> DELETE FROM
    ->   test_main
    -> WHERE
    ->   id = 1;
    -> //
Query OK, 1 row affected (0.02 sec)

mysql> SELECT
    ->   *
    -> FROM
    ->   test_sub;
    -> //
+----+---------+--------+
| id | main_id | value  |
+----+---------+--------+
|  2 |       2 | TWOTWO |
+----+---------+--------+
1 row in set (0.00 sec)


MySQL使用下面这个语句删除外键约束
ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;




UPDATE CASCADE方式
mysql> ALTER TABLE test_sub
    ->   ADD CONSTRAINT main_id_cons
    ->   FOREIGN KEY (main_id)
    ->   REFERENCES  test_main(id)
    ->   ON UPDATE CASCADE;
    -> //
Query OK, 1 row affected (0.14 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> UPDATE test_main SET id = 5 where id = 2
    -> //
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test_sub//
+----+---------+--------+
| id | main_id | value  |
+----+---------+--------+
|  2 |       5 | TWOTWO |
+----+---------+--------+
1 row in set (0.00 sec)


MySQL使用下面这个语句删除外键约束
ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;


SET NULL方式
mysql> ALTER TABLE test_sub
    ->   ADD CONSTRAINT main_id_cons
    ->   FOREIGN KEY (main_id)
    ->   REFERENCES  test_main(id)
    ->   ON DELETE SET NULL;
    -> //
Query OK, 1 row affected (0.13 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> DELETE FROM
    ->   test_main
    -> WHERE
    ->   id = 5;
    -> //
Query OK, 1 row affected (0.05 sec)

mysql>
mysql> SELECT
    ->   *
    -> FROM
    ->   test_sub;
    -> //
+----+---------+--------+
| id | main_id | value  |
+----+---------+--------+
|  2 |    NULL | TWOTWO |
+----+---------+--------+
1 row in set (0.00 sec)


分享到:
评论

相关推荐

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

    ### 数据一致性守护者:MySQL 外键约束深度解析 #### 引言 在现代软件开发中,特别是Web应用程序领域,数据库扮演着极其重要的角色。其中MySQL作为一种流行的关系型数据库管理系统(RDBMS),因其开放源代码特性、...

    MySQL外键约束常见操作方法示例【查看、添加、修改、删除】

    在MySQL数据库中,外键约束是关系型数据库中用于维护数据完整性和一致性的重要工具。它确保了一张表中的数据与另一张表的数据之间的关联性,通常用于实现一对一、一对多或多对多的关系。本篇文章将详细讲解如何进行...

    详解MySQL 外键约束

    MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 2.外键的使用条件 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 外键列必须建立了索引,MySQL ...

    总结三种MySQL外键约束方式

    在数据库设计中,外键约束是确保数据完整性的重要机制,特别是在关系型数据库如MySQL中。外键用于建立两个表之间的关联,确保一个表中的数据(外键)引用另一个表(主表)中存在的数据(主键)。本文将详细介绍MySQL...

    MySQL外键约束的实例讲解

    MySQL外键约束是数据库设计中的一个重要概念,它用于在两个表之间建立联系,确保数据的一致性和完整性。外键约束的使用确保了当一个表(父表)中的数据发生更改时,与其关联的另一个表(子表)的相关数据也会相应...

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

    MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于Web应用程序的后端数据存储。它基于结构化查询语言(SQL)来管理数据,并且是LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈的一部分,这个...

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

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

    详解MySQL中的外键约束问题

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建、检索、更新和删除等操作都...MySQL外键约束条件  MySQL的外键约束条件有以下几种:  · CASCADE : 从父表删除或更新行时自动删除

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

    MySQL 中的外键只能在 InnoDB 存储引擎中生效,而其他存储引擎将忽略外键约束。 添加外键 --------- 在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY ...

    禁用启用所有外键约束.tst

    首先,让我们来看看如何在MySQL中禁用和启用外键约束: 1. **禁用外键约束**: 在MySQL中,可以使用以下SQL语句临时禁用外键约束: ```sql SET FOREIGN_KEY_CHECKS = 0; ``` 这行命令会关闭对当前会话中外键...

    MySQL的约束-外键约束

    在数据库设计中,数据完整性是至关...总结,外键约束是MySQL数据库设计中的关键组成部分,它保证了表之间的关联性,维持数据的完整性和一致性。理解并正确使用外键约束,对于构建健壮、可维护的数据库系统至关重要。

    MySQL外键约束的禁用与启用命令

    在MySQL数据库系统中,外键约束(Foreign Key Constraints)是一种重要的数据完整性机制,它确保了表之间的参照完整性,即一个表中的数据只能引用另一个表中存在的数据。外键约束可以防止非法数据的插入,保证数据库...

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

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

    头歌MySQL数据库实训答案有目录.pdf

    * 外键约束(FOREIGN KEY):用于建立表之间的关系,例如 `CREATE TABLE t_student(id INT PRIMARY KEY, name VARCHAR(22), classId int, CONSTRAINT fk_stu_class1 FOREIGN KEY(classId) REFERENCES t_class(id));...

    mysql外键设置

    1. **存储引擎限制**:MySQL 的外键约束只支持 InnoDB 存储引擎,不支持 MyISAM 等其他类型的存储引擎。 2. **命名规则**:外键名称可以使用 `constraint 'fk_name'` 或 `constraint "fk_name"` 形式指定。 3. **...

    数据库外键约束方式

    在 MySQL 中,外键约束可以通过 FOREIGN KEY 语句来实现,例如: CREATE TABLE t_user ( id INT NOT NULL, name VARCHAR(30), groupid INT, PRIMARY KEY (id), FOREIGN KEY (groupid) REFERENCES t_group(id) ...

Global site tag (gtag.js) - Google Analytics