## 添加外鍵
mysql中提供了兩種方式增加外鍵.
多索引,外鍵本身是一個索引,外鍵要求外鍵字段本身也是一種普通索引.
#### 方法一 (在創建表的時候增加外鍵(類似主鍵) )
語法: 在從表中創建
~~~
create table articles(
foreign key(從表外鍵字段) references 主表(主表主鍵);
);
~~~
創建完外鍵之后,多了個MUL,多索引.外鍵本身是一個索引,外鍵要求外鍵字段本身也是一種普通索引.
~~~
+---------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | MUL | NULL | |
+---------+---------+------+-----+---------+----------------+
~~~
通過命令 : show create table posts 查看 :
~~~
| posts | CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`), //創建外鍵時自動增加的普通索引
CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) //外鍵索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
~~~
#### 方法二(在從表創建表后增加外鍵)
語法 :
~~~
alter table 從表 add [constraint `外鍵名`] foreign key(從表外鍵字段) references 主表(主表主鍵);
~~~
查看結果
~~~
| posts | CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_user` (`user_id`), //使用了指定的外鍵名稱 "user_user"
CONSTRAINT `user_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
~~~
在創建外鍵的時候可以額外指定外鍵的名稱.
#### 修改/刪除外鍵
外鍵不允許修改,只能刪除后再添加外鍵.
語法:
~~~
alter table 從表 drop foreign key `外鍵名稱`
~~~
外鍵名稱外面要加反引號,英文標點符號的波浪線號.
刪除外鍵的時候不能刪除跟隨外鍵創建的普通索引,只會刪除外鍵自己.
#### 刪除普通索引
語法:
~~~
alter table 從表 drop index `索引名稱`;
~~~
- 數據庫介紹
- 數據庫基本概念
- SQL介紹
- MySQL服務端架構
- 庫操作
- 表操作
- 字段類型
- 整數類型
- 小數類型
- 字符串類型
- 日期/時間類型
- json類型
- 字段屬性
- Null
- 默認值
- 列描述
- 主鍵
- 自動增長
- 唯一鍵
- 數據庫基礎操作
- 增
- 刪
- 改
- 查
- 運算符
- 算術運算符
- 比較運算符
- 邏輯運算符
- in運算符
- is運算符
- like運算符
- 高級查詢
- 聯合查詢
- 連接查詢
- 交叉連接
- 內連接
- 外連接
- Using關鍵字
- 子查詢
- 標量子查詢
- 列子查詢
- 行子查詢
- 表子查詢
- exists子查詢
- 子查詢特定關鍵字
- 用戶權限管理
- 用戶管理
- 權限管理
- 外鍵
- 外鍵操作
- 外鍵基本要求
- 約束
- 視圖
- 事務安全
- 自動事務
- 手動事務
- 事務特點
- 變量
- 系統變量
- 會話變量
- 局部變量
- 流程結構
- if分支
- while循環
- 函數
- 內置函數
- 字符串函數
- 時間函數
- 數學函數
- 其他函數
- 存儲過程
- 與函數的區別
- 存儲過程操作
- 存儲過程的形參類型
- 觸發器
- 觸發器概念
- 觸發器操作