- 浏览: 347963 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。
外键的使用条件:
1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
外键的定义语法:
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
搞个例子,简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键:
建表:
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) default NULL,
10 `name` varchar(32) default '',
11 PRIMARY KEY (`id`),
12 KEY `dage_id` (`dage_id`),
13 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
14) ENGINE=InnoDB DEFAULT CHARSET=latin1;
插入个大哥:
2Query OK, 1 row affected (0.01 sec)
3mysql> select * from dage;
4+----+--------+
5| id | name |
6+----+--------+
7| 1 | 铜锣湾 |
8+----+--------+
91 row in set (0.00 sec)
插入个小弟:
2Query OK, 1 row affected (0.02 sec)
3
4mysql> select * from xiaodi;
5+----+---------+--------------+
6| id | dage_id | name |
7+----+---------+--------------+
8| 1 | 1 | 铜锣湾_小弟A |
9+----+---------+--------------+
把大哥删除:
2ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提示:不行呀,有约束的,大哥下面还有小弟,可不能扔下我们不管呀!
插入一个新的小弟:
2ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
3
提示:小子,想造反呀!你还没大哥呢!
把外键约束增加事件触发限制:
2
3 CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
4
5mysql> alter table xiaodi drop foreign key xiaodi_ibfk_1;
6Query OK, 1 row affected (0.04 sec)
7Records: 1 Duplicates: 0 Warnings:
8mysql> alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade;
9Query OK, 1 row affected (0.04 sec)
10Records: 1 Duplicates: 0 Warnings: 0
再次试着把大哥删了:
2Query OK, 1 row affected (0.01 sec)
3
4mysql> select * from dage;
5Empty set (0.01 sec)
6
7mysql> select * from xiaodi;
8Empty set (0.00 sec)
得,这回对应的小弟也没了,没办法,谁让你跟我on delete cascade了呢!
例子说明的应该蛮清楚了吧,其他功能对应手册自己实践吧!:-)
发表评论
-
mysq的主从复制、备份、还原
2011-11-24 14:51 1296搭建实验环境说明: 在 RH5.4 yum安装 mysql部 ... -
mysql负载均衡完美解决方案V1.0(2)
2011-06-30 14:23 14027.haproxy安装配置 下载编译安装: wget http ... -
mysql负载均衡完美解决方案V1.0(1)
2011-06-30 14:21 1605mysql负载均衡完美解决 ... -
SP2-0618: 无法找到会话标识符
2011-03-11 15:00 1054SQL> set autotrace on;SP2-06 ... -
用SQL删除重复记录的N种方法
2010-12-03 12:34 1000例如:id name ... -
SQL获取所有用户名,数据库名、所有表名、所有字段名及字段类型
2010-08-16 17:56 25621.获取所有用户名:SELECT name FROM Sysu ... -
将mysql中的数据迁移到sqlserver中
2010-07-29 16:40 17531.安装mysql数据库的ODBC驱动,mysql-conn ... -
搞定使用MySQL导入外部的SQL文件执行
2010-07-28 18:41 2246很多的时候都需要将外 ... -
判断数据库中表是否存在,并创建
2010-06-16 15:30 2112//SQLServer 2000 IF NOT EXI ... -
sql server中用sql语句查看表结构信息
2010-05-24 16:37 1157select * from information_schem ... -
Berkeley DB Java Edition 使用手册
2010-05-21 17:06 2219package test; import com.sleep ... -
介绍和使用Berkeley DB Java Edition(嵌入式数据库)
2010-05-21 16:49 1237一、 简介 Berkeley DB Java ... -
Berkely DB Java Edition学习笔记
2010-05-21 16:45 1060Berkely DB对于高并发、要求速度快的应用来说是个不错的 ... -
三种SQL分页方法
2010-02-08 16:06 1035表中主键必须为标识列,[ID] int IDENTITY (1 ... -
经典 SQL 语句集锦(收藏版,必看)
2009-11-11 09:11 956下列语句部分是MsSql语 ... -
SQL操作全集
2009-07-05 20:03 748下列语句部分是Mssql语 ... -
MySQL基本命令总结
2009-06-24 20:25 1118测试环境:mysql 5.0.45【注:可以在mysq ... -
Oracle数据库开发的一些经验积累
2009-06-18 23:23 9541、不安装Oracle客户连接Oracle 8的方法请将以下文 ... -
Oracle函数列表
2009-06-18 23:09 829PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并 ... -
Oracle临时表空间Temp满了怎么办
2009-06-18 23:04 3077最近遇到这样一个问 ...
相关推荐
alter table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(主键字段名) 例如,为表 student 添加外键约束,具体语句如下: mysql> alter table student add constraint FK_ID foreign ...
在数据库设计中,外键(Foreign Key)是一种重要的约束机制,用于确保数据表之间的引用完整性。通过设置外键,可以保证主表中的某列或某些列与从表中的相应列或列组合之间的数据一致性。 ##### 1. 外键的重要性 - ...
在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY (vccId) REFERENCES ss_vcc(vccId) ON DELETE CASCADE; ``` 这条语句将在ss_accesscode表中添加一个外键约束...
在使用ALTER TABLE语句时,如果需要删除已经存在的外键,不能直接使用DROP FOREIGN KEY,而要先通过SHOW CREATE TABLE查看外键的确切名称,然后使用ALTER TABLE语句配合DROP FOREIGN KEY命令来删除指定的外键约束。...
MySQL外键是数据库设计中的一个重要概念,主要用于维护数据的一致性和完整性。在关系数据库中,外键用于建立和加强两个表之间的联系,确保引用的完整性。本文将详细讲解MySQL中外键的使用及其重要性。 首先,理解...
删除外键可以使用 alter table drop foreign key '外键名'; 语句。如果不定义外键名,可以先输入 alter table drop foreign key,会提示出错。然后,根据出错信息中显示的系统默认外键名来删除外键。 七、举例实例 ...
这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。 一、问题的提出 创建两个表: ...
外键约束(FOREIGN KEY)
### MySQL外键设置详解 #### 一、外键的基本概念 在关系型数据库设计中,外键(Foreign Key)是一种非常重要的约束机制,用于确保数据的一致性和完整性。通过定义外键,可以实现不同表之间的关联,从而确保引用的...
这个“mysql外键教程.zip”压缩包包含了关于MySQL外键使用的多个方面,下面将详细解释这些知识点。 首先,我们了解下外键的基础知识。外键(Foreign Key)是数据库设计中的一个重要概念,它是一个字段或者一组字段...
为了解决这个问题,我们可以利用MySQL中的一个系统变量`FOREIGN_KEY_CHECKS`来临时禁用外键约束检查。 首先,你可以通过以下SQL查询生成所有表的DROP语句,只需将`MyDatabaseName`替换为你的实际数据库名: ```sql...
MySQL中的外键(Foreign Key)是一种数据库约束,用于在两个表之间建立联系,确保数据的一致性和完整性。这种机制允许你在一张表(被引用表)中引用另一张表(参照表)的主键,以此来维护相关记录的一致性。在MySQL...
### MySQL外键详解 #### 一、外键概念与作用 **外键(Foreign Key)** 是数据库设计中用于确保数据完整性和关联性的一种机制。它通过定义一个表中的列或列组合,来引用另一个表的主键或唯一键,以此来建立两个表...
### MySQL外键详解 #### 一、外键的基本概念与作用 外键(Foreign Key)是一种重要的数据库约束机制,主要用于确保数据库中多个表之间数据的一致性和完整性。它通过引用另一个表的主键来实现这一目标。外键的存在...
MySQL外键是数据库设计中一个重要的概念,它用于在两个表之间建立关联,确保数据的完整性和一致性。本文将深入探讨MySQL中外键的使用、条件、好处以及定义语法。 首先,外键约束是实现数据库关系完整性的一种方式,...
CONSTRAINT `userinfo_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 在上面的语句中,我们创建了一个 userinfo 表,...
在MySQL数据库系统中,外键(Foreign Key)是一种重要的关系型数据库约束,它用于建立和维护两个表之间的关联。外键允许我们在一个表(被引用表)中引用另一个表(引用表)的主键,从而确保数据的一致性和完整性。在...
MySQL外键是数据库设计中一个重要的概念,用于在两个表之间建立关联,确保数据的一致性和完整性。在MySQL中,外键主要用于实现参照完整性,它允许一个表中的字段引用另一个表中的主键,从而实现两个表之间的逻辑联系...
### 数据一致性守护者:MySQL 外键约束深度解析 #### 引言 在现代软件开发中,特别是Web应用程序领域,数据库扮演着极其重要的角色。其中MySQL作为一种流行的关系型数据库管理系统(RDBMS),因其开放源代码特性、...