## 添加外键
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循环
- 函数
- 内置函数
- 字符串函数
- 时间函数
- 数学函数
- 其他函数
- 存储过程
- 与函数的区别
- 存储过程操作
- 存储过程的形参类型
- 触发器
- 触发器概念
- 触发器操作