Mysql外鍵約束


  外鍵是表與表之間的某種約定關系,由於這個關系的存在,我們能讓表之間的數據更加完整,關聯性更強。

(1).創建外鍵約束

  創建測試環境:

mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)

mysql> use test_db;
Database changed
mysql> create table user_table(id int key,name varchar(20),age int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into user_table values('1','zhangsan','18'),('2','lisi','19'),('3','wangwu','20');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from user_table;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | zhangsan |   18 |
|    2 | lisi     |   19 |
|    3 | wangwu   |   20 |
+------+----------+------+
3 rows in set (0.00 sec)

   create table [表名]([字段名] [字段類型] [字段約束],...,[constraint [外鍵字段名]] foreign key (本表字段名) references [父表表名]([父表字段名]) [ON DELETE CASCADE] [ON UPDATE CASCADE]);

mysql> create table job_table(job_id int,user_id int,job_name varchar(20),foreign key (user_id) references user_table(id) ON DELETE CASCADE ON UPDATE CASCADE);
Query OK, 0 rows affected (0.05 sec)

  其中,ON DELETE CASCADE和ON UPDATE CASCADE表示父表刪除或更新,那么自動刪除或更新子表中對應的行。

  另外,創建外鍵需要滿足以下條件:1.確保父表和字段的存在;2.父表的字段必須是索引,外鍵的字段默認是普通索引;3.數據庫引擎必須是innodb,一般默認是這個;4.外鍵字段和關聯字段的數據類型必須一致。

(2).刪除外鍵約束

  alter table [表名] drop foreign key [外鍵字段名];

mysql> show create table job_table\G  //沒有寫外鍵字段名需要先查看一下
*************************** 1. row ***************************
       Table: job_table
Create Table: CREATE TABLE `job_table` (
  `job_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `job_name` varchar(20) DEFAULT NULL,
  KEY `user_id` (`user_id`),
  CONSTRAINT `job_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_table` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> alter table job_table drop foreign key `job_table_ibfk_1`;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table job_table\G
*************************** 1. row ***************************
       Table: job_table
Create Table: CREATE TABLE `job_table` (
  `job_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `job_name` varchar(20) DEFAULT NULL,
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

(3).添加外鍵約束

  alter table [表名] add [constraint [外鍵字段名]] foreign key (本表字段名) references [父表表名]([父表字段名]) [ON DELETE CASCADE] [ON UPDATE CASCADE];

mysql> alter table job_table add foreign key (user_id) references user_table(id) ON DELETE CASCADE ON UPDATE CASCADE;
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table job_table\G                                                                *************************** 1. row ***************************
       Table: job_table
Create Table: CREATE TABLE `job_table` (
  `job_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `job_name` varchar(20) DEFAULT NULL,
  KEY `user_id` (`user_id`),
  CONSTRAINT `job_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_table` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM