mysql之外键约束

在这里插入图片描述

1. 建表时创建外键

语法:
[CONSTRAINT 外键名称]FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)
创建外键时,外键的字段的类型和主表中参照的字段的类型必须相似。如果是是数值型,那么类型要一致,而且无符号也要一致。
如果是字符型,要求类型一致,长度可以不同。

mysql> CREATE TABLE news_cate(
    ->     id TINYINT UNSIGNED AUTO_INCREMENT KEY COMMENT '编号',
    ->     cateName VARCHAR(50) UNIQUE NOT NULL COMMENT '分类名称',
    ->     cateDesc VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分类描述'
    -> );
Query OK, 0 rows affected (0.86 sec)

mysql> CREATE TABLE news(
    -> id INT UNSIGNED AUTO_INCREMENT KEY COMMENT '编号',
    -> title VARCHAR(100) NOT NULL UNIQUE COMMENT '新闻标题',
    -> content VARCHAR(1000) NOT NULL COMMENT '新闻内容',
    -> cateId TINYINT UNSIGNED NOT NULL COMMENT '新闻所属分类编号',
    -> FOREIGN KEY(cateId) REFERENCES news_cate(id)
    -> );
Query OK, 0 rows affected (0.52 sec)

mysql> SHOW CREATE TABLE news;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| news  | CREATE TABLE `news` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
  `title` varchar(100) NOT NULL COMMENT '新闻标题',
  `content` varchar(1000) NOT NULL COMMENT '新闻内容',
  `cateId` tinyint unsigned NOT NULL COMMENT '新闻所属分类编号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `title` (`title`),
  KEY `cateId` (`cateId`),
  CONSTRAINT `news_ibfk_1` FOREIGN KEY (`cateId`) REFERENCES `news_cate` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8                   |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
2.动态删除外键

语法:ALTER TABLE tbl_name DROP FOREIGN KEY 外键名字;

mysql> SHOW CREATE TABLE news;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| news  | CREATE TABLE `news` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
  `title` varchar(100) NOT NULL COMMENT '新闻标题',
  `content` varchar(1000) NOT NULL COMMENT '新闻内容',
  `cateId` tinyint unsigned NOT NULL COMMENT '新闻所属分类编号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `title` (`title`),
  KEY `cateId_fk_newscateid` (`cateId`),
  CONSTRAINT `cateId_fk_newscateid` FOREIGN KEY (`cateId`) REFERENCES `news_cate` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8                   |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.13 sec)

mysql> ALTER TABLE news DROP FOREIGN KEY cateId_fk_newscateid;
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0
3. 动态添加外键

–语法: ALTER TABLE tbl_name ADD FOREIGN KEY(fk_name) REFERENCES 主表(字段);

mysql> ALTER TABLE news ADD FOREIGN KEY(cateId) REFERENCES news_cate(id);
Query OK, 0 rows affected (2.56 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE news;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| news  | CREATE TABLE `news` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
  `title` varchar(100) NOT NULL COMMENT '新闻标题',
  `content` varchar(1000) NOT NULL COMMENT '新闻内容',
  `cateId` tinyint unsigned NOT NULL COMMENT '新闻所属分类编号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `title` (`title`),
  KEY `cateId` (`cateId`),
  CONSTRAINT `news_ibfk_1` FOREIGN KEY (`cateId`) REFERENCES `news_cate` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8                   |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值