MYSQL中如何使用外键
使用外键的条件:
1.这两个表必须是InnoDB表。 MyISAM表暂时不支持外键(据说以后的版本可能会支持),但至少目前不支持);
2.外键列必须建立索引。 MySQL 4.1.2及以后版本在建立外键时会自动创建索引,但如果是更早的版本则需要显示。 ;
3.外键关系中两个表的列必须具有相似的数据类型,即可以相互转换的列。例如,int和tinyint可以使用,但是int和char不能;
www .2cto.com
外键的好处:它可以关联两个表,保证数据一致性,实现一些级联操作;
外键的定义语法:
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
/> 引用 tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT |级联|设置为空|没有行动|设置默认值} ]
[更新时{RESTRICT |级联|设置为空|没有行动| SET DEFAULT}]
此语法可用于 CREATE TABLE 和 ALTER TABLE。如果不指定CONSTRAINT符号,MYSQL会自动生成一个名称。
ON DELETE和ON UPDATE表示事件触发限制。可以设置的参数有:
RESTRICT(限制表中外键更改)
CASCADE(跟随外键更改)
SET NULL(设置空值)
SET DEFAULT(设置默认值) value)
NO ACTION(无操作,默认)
www.2cto.com
举个例子简单演示一下它的使用。做两只表,大哥和小弟,兄弟表是主键,小弟table 为外键:
创建表:
1CREATE TABLE `dage` (
2 `id` int(11) NOT NULL auto_increment,
3 `name ` varchar(32) default '',
4 PRIMARY KEY (`id`)
5) ENGINE=InnoDB DEFAULT CHARSET=latin1;
6
7CREATE TABLE `xiaodi` (
8 `id` int(11) NOT NULL auto_increment,
9 `dage_id` int(11) 默认 NULL,
10 `name` varchar(32) 默认 '' ,
11 主键 (`id`),
12 键 `dage_id` (`dage_id`),
13 约束 `xiaodi_ibfk_1` 外键 (`dage_id`) 引用 `dage` (`id`)
14) ENGINE=InnoDB DEFAULT CHARSET=latin1;
插入大哥:
1> insert into dage(name)values('Causeway Bay');
2查询正常,1行受影响(0.01秒)
3mysql> select * from dage;
4+----+--------+
5|编号 |姓名 |
6+----+--------+
7| 1 |铜锣湾|
8+----+----- ---+
91 行(0.00 秒)
www.2cto.com
插入小弟:
1mysql> insert into xiaodi(dage_id,name)values(1,'铜锣湾_小弟A');
2查询正常,1行受影响(0.02秒)
3
4mysql> select * from xiaodi;
5+----+--- ------+------------ ---+
6|编号 |达格_id |名称 |
7+----+---------+------------- -+
8| 1 | 1 |铜锣湾_A哥 |
9+----+---------+------------ --+
删除大哥:
1mysql> delete from dage where id=1;
2ERROR 1451 (23000): 无法删除或更新父行:外键约束失败 (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1 ` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)) www.2cto.com
提示:不行,有限制,请跟着大哥和小弟,你不能离开我们独自的!
插入新弟弟:
1mysql> insert into xiaodi(dage_id,name) Values(2,'旺角_小弟A'); (23000): 无法添加或更新子行:外键约束失败 (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
3
提示:小子,你想反抗!你还没有大哥呢!
为事件触发限制添加外键约束:
1mysql> show create table xiaodi;
2...
3 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
4...
5mysql> alter table xiaodi dropforeign key xiaodi_ibfk_1;
6查询正常,1行受影响(0.04秒)
7记录:1重复:0警告:
8mysql> alter table xiaodi 添加外键(dage_id)引用 dage(id) on 删除级联更新级联;
9查询正常,1行受影响(0.04秒)
10记录:1重复:0警告:0
再次尝试删除大哥:
1mysql> delete from dage where id=1;
2查询正常,1行受影响(0.01秒)
3 www.2cto.com
4mysql> select * from dage;
5Empty设置(0.01秒)
6
7mysql> select * from xiaodi;
8空设置(0.00秒)
以上就是MYSQL中如何使用外键。编辑贝丽说明其中的一些知识点在我们的日常工作中可能会看到或者用到。的。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MYSQL中如何使用外键