关于Mysql 外键使用的问题
2009-07-29 17:58
309 查看
在Mysql中使用foreign key 并不像oracle,access那么简单,现把使用过程应注意的问题做以讲解:
目标:建立下面的外键关系
第一步:建表
首先打开命令行窗口,进入Mysql bin目录,选择相应数据库后,建立T_USER表:
建立T_PASSPORT表:
注意红体字部分:type=InnoDB,关于InnoDB的说明如下:
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。也就是说如果要采用外键约束,表类型必须时InnoDB,mysql默认是MyISAM,这种类型不支持外键约束。
第二步:建立外键关系:
此外也可以在建表时直接指定外键:(以下代码未验证)
注意:如果表结构是myISAM,上面的代码虽然能能执行,但不起任何作用。References有的文章(特别是网友的笔记中)写成:Refrences初学者应注意。
第三步,测试
测试1:插入外键约束
外键约束,因为t_passport 中尚未有id为1的字段。
测试2、删除外键约束
说明:把T_user id列设为外键,参照外表t_passport 的id列, 当t_passport 的id列改变时,T_user会做相应的改变。
注意: 建立外键的列应该建立索引,且不能为空,引用以被引用的两列应该是同一类型。
目标:建立下面的外键关系
第一步:建表
首先打开命令行窗口,进入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; |
create table t_passport (id int(11) NOT NULL auto_increment PRIMARY KEY, serial VARCHAR(20)) type=InnoDB; |
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。也就是说如果要采用外键约束,表类型必须时InnoDB,mysql默认是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); |
第三步,测试
测试1:插入外键约束
mysql> insert into t_user values(1,'zhaoyuan'); ERROR 1216: Cannot add or update a child row: a foreign key constraint fails |
测试2、删除外键约束
mysql> delete from t_passport; Query OK, 1 row affected (0.06 sec) mysql> select * from t_user; Empty set (0.00 sec) |
注意: 建立外键的列应该建立索引,且不能为空,引用以被引用的两列应该是同一类型。
相关文章推荐
- 关于linux下使用phpmyadmin给mysql表关联外键的问题和解决办法
- 关于linux下使用phpmyadmin给mysql表关联外键的问题和解决办法
- 关于Mysql 外键使用的问题 推荐
- 关于使用Mysql(SqlYog)中文乱码的问题
- 关于使用MySql乱码问题
- 关于一个MYSQL语法(在查询中使用count)的兼容性问题
- 初次使用xampp MySQL关于端口port占用问题处理
- 关于mysql外键创建失败的问题
- 关于使用navicat for mysql在建立数据库连接时出现的2003 can't connect to mysql server on'localhost'(10038)问题
- 关于使用可视化图形工具navicat for mysql来创建外键的步骤
- 关于C++Builder 2007使用dbexpress + mysql的一些问题
- 关于mysql里 主键,外键,默认 联级删除的问题
- 关于使用MySQL的ODBC驱动建立数据源出错的问题
- 关于MySQL在使用过程中的问题
- 关于QT5使用wamp的mysql连接问题
- 关于mysql的update、delete、和insert into能否使用别名问题
- 关于使用Mysql(SqlYog)中文乱码的问题
- 关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 关于ssm框架使用mysql控制台出现警告问题
- 关于mysql 联表使用count的一个问题