注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 利用IPSec实现网络安全之..
 帮助

关于Mysql 外键使用的问题


2007-09-28 11:30:37
 标签:mysql key foreign   [推送到技术圈]

版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
Mysql中使用foreign key 并不像oracleaccess那么简单,现把使用过程应注意的问题做以讲解:
目标:建立下面的外键关系
 
 
 
第一步:建表
首先打开命令行窗口,进入Mysql bin目录,选择相应数据库后,建立T_USER表:
 
create table t_user (id int(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(20),group_id int(10)) type=InnoDB;
 
建立T_PASSPORT表:
 
create table t_passport (id int(11) NOT NULL auto_increment PRIMARY KEY, serial VARCHAR(20)) type=InnoDB;
 
注意红体字部分:type=InnoDB关于InnoDB的说明如下:
 
InnoDB MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。也就是说如果要采用外键约束,表类型必须时InnoDBmysql默认是MyISAM,这种类型不支持外键约束。
    
第二步:建立外键关系:
 
alter table t_user add foreign key(id) references t_passport (id) on delete cascade on update cascade;
 
此外也可以在建表时直接指定外键:(以下代码未验证)
 
create table temp( id int, name char(20), foreign key(id) references outTable(id) on delete cascade on update cascade);
 
注意:如果表结构是myISAM,上面的代码虽然能能执行,但不起任何作用。References有的文章(特别是网友的笔记中)写成:Refrences初学者应注意。
 
第三步,测试
测试1:插入外键约束
 
mysql> insert into t_user values(1,'zhaoyuan');
ERROR 1216: Cannot add or update a child row: a foreign key constraint fails
外键约束,因为t_passport 中尚未有id1的字段。
 
测试2、删除外键约束
 
mysql> delete from t_passport;
Query OK, 1 row affected (0.06 sec)
 
mysql> select * from t_user;
Empty set (0.00 sec)
 
 
说明:把T_user id列设为外键,参照外表t_passport id, t_passport id列改变时,T_user会做相应的改变。
注意: 建立外键的列应该建立索引,且不能为空,引用以被引用的两列应该是同一类型。
 

本文出自 “Grow up” 博客,转载请与作者联系!



上一篇 雪藏  下一篇 学习原来是这样的



    文章评论
 
2007-09-28 21:27:43
mysql> insert into t_user values(1,'zhaoyuan');
ERROR 1216: Cannot add or update a child row: a foreign key constraint fail
先把外键约束记下来

2007-09-29 10:41:29
支持,好文章不在篇幅长,而在于小巧实用。向博主学习!

2007-09-29 11:38:53
SDKGFJKDFHTKJDSHGKJ FHGKJH

2007-10-01 14:31:30
外键约束在文章开头的图形示例上已经给了啊

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: