今天偶然间发现一个小细节
关于建立表的外键:
建立MySQL外键时出现一个error:
1005 - Can't create table 'dot_1.#sql-218_11' (errno: 150)
查询后才发现MySQL在建立表的外键的时候有一个要求:
建立外键的列必须有索引!
举例:
tclass(id,cname);
tstudent(id,sname,sclass);
要求学生的sclass字段建立外键到tclass的id,有了下面这一步才得以正确执行,否则报error:
create index idx_clazz on tstudent(sclass);
--------------------------------------------溜须拍马的分割线-------------------------------------
但是Oracle不需要建立index,直接可以建立索引,不会报错,执行通过;
希望各位遇到类似问题的码友注意了。
---------------------------------------------穿越2000年的分割线-------------------------------
Mysql数据库要创建FK外键,必须要INNODB的engine,否则扯淡!
create table clazz(
id int primary key auto_increment not null ,
name varchar(20)
)engine=innodb;
create table student(
id int primary key auto_increment not null,
sname varchar(20),
clazzid int,
key student_class_id (clazzid),
constraint fk_student_clazz foreign key (clazzid) references clazz (id)
)engine=innodb;
执行查询结果:
show create table student;
| student | CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sname` varchar(20) DEFAULT NULL,
`clazzid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `student_class_id` (`clazzid`),
CONSTRAINT `fk_student_clazz` FOREIGN KEY (`clazzid`) REFERENCES `clazz` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
"CONSTRAINT `fk_student_clazz` FOREIGN KEY
"
更换之后:
drop table student,clazz;
create table clazz(
id int primary key auto_increment not null ,
name varchar(20)
);
create table student(
id int primary key auto_increment not null,
sname varchar(20),
clazzid int,
key student_class_id (clazzid),
constraint fk_student_clazz foreign key (clazzid) references clazz (id)
);
show create table student;
//-----------------------------结果:--------------
| student | CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sname` varchar(20) DEFAULT NULL,
`clazzid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `student_class_id` (`clazzid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
默认是MyISAM;
分享到:
相关推荐
### MySQL 外键设置详解 #### 一、MySQL 外键的作用及意义 在数据库设计中,外键(Foreign Key)是一种重要的约束机制,用于确保数据表之间的引用完整性。通过设置外键,可以保证主表中的某列或某些列与从表中的...
MySql 外键设置详解 MySql 外键设置详解 一、外键的使用 外键是数据库中的一种约束,用于确保数据的一致性和完整性。外键的作用主要有两个:一是让数据库自己通过外键来保证数据的完整性和一致性;二是能够增加 ...
本文详细介绍了在MySQL中增加外键的方法,并提供了使用PHPMyAdmin管理工具和SQL语句来实现外键添加的操作步骤和注意事项。 首先,要成功地在MySQL中增加一个外键,需要满足几个前提条件: 1. 本表的列必须与外键...
在使用外键时,需要注意以下几点: * 存储引擎必须使用 InnoDB 引擎。 * 外键必须建立索引。 * 外键绑定关系这里使用了“ON DELETE CASCADE”和“ON UPDATE CASCADE”,意思是如果外键对应数据被删除或者更新时,将...
### MySQL外键详解 #### 一、外键概念与作用 **外键(Foreign Key)** 是数据库设计中用于确保数据完整性和关联性的一种机制。它通过定义一个表中的列或列组合,来引用另一个表的主键或唯一键,以此来建立两个表...
MySQL外键是数据库设计中的一个重要概念,主要用于维护数据的一致性和完整性。在关系数据库中,外键用于建立和加强两个表之间的联系,确保引用的完整性。本文将详细讲解MySQL中外键的使用及其重要性。 首先,理解...
### MySQL外键详解 #### 一、外键的基本概念与作用 外键(Foreign Key)是一种重要的数据库约束机制,主要用于确保数据库中多个表之间数据的一致性和完整性。它通过引用另一个表的主键来实现这一目标。外键的存在...
以上就是在设置MySQL数据库外键时需要注意的关键点。理解并正确应用这些知识点,能够帮助我们构建出高效、稳定且具有良好数据完整性的数据库系统。在实际操作中,应结合具体业务场景进行灵活调整和优化。
在MySQL数据库系统中,外键(Foreign Key)是一种重要的关系型数据库约束,它用于建立和维护两个表之间的关联。外键允许我们在一个表(被引用表)中引用另一个表(引用表)的主键,从而确保数据的一致性和完整性。在...
MySQL外键关联是数据库设计中的一个重要特性,它用于在两个表之间建立引用完整性约束,以确保数据的一致性和准确性。本文通过深入分析MySQL中外键关联问题,旨在帮助读者理解并掌握外键的创建、修改以及删除等操作的...
在MySQL数据库管理系统中,外键(Foreign Key)是一种约束机制,用于维护数据的一致性和完整性。外键确保了引用完整性,即一个表中的数据能够正确引用另一个表中的数据。当我们在设计关系型数据库时,使用外键可以...
以下是一些关于外键使用的条件和注意事项: 1. **外键约束条件**: - 表必须是InnoDB类型,因为MyISAM不支持外键。 - 外键列需要有索引,以便快速查询。在MySQL 4.1.2及以后的版本,创建外键时会自动创建索引,但...
需要注意的是,外键名在数据库中必须是唯一的,不建议手动指定外键名,以免出现命名冲突。 外键的约束模式决定了当父表中的数据发生变化时,子表如何响应。主要有三种模式: - `RESTRICT`(严格模式):不允许删除...
在MySQL数据库管理中,删除表是一项需要谨慎操作的任务,尤其是当表之间存在外键约束时。外键约束是关系数据库中确保数据完整性和一致性的重要机制,它不允许在父表(引用其他表的字段的表)中删除那些已被子表引用...
MySQL中的外键(Foreign Key)是一种数据库约束,用于在两个表之间建立联系,确保数据的一致性和完整性。...然而,需要注意的是,外键也会增加数据库操作的复杂性和性能开销,因此在设计时需要权衡其利弊。
在MySQL数据库管理中,外键约束是实现关系型数据库中数据完整性和参照完整性的关键机制。外键确保了不同表之间的引用完整性,即一个表中的数据必须存在另一个表的记录中。然而,当需要删除有外键约束的表数据时,...
总之,删除MySQL中的外键需要注意正确识别外键名称,理解错误信息,并按照正确的顺序执行操作。在遇到问题时,通过查询系统状态或检查表的创建语句来获取更多信息,以便找到解决问题的线索。在进行数据库维护时,...
### MySQL 主外键操作详解 在关系型数据库中,主键和外键是维护数据完整性和关联性的重要机制。MySQL 提供了一系列命令来创建、修改和删除这些键。本文将根据给定的文件内容,详细介绍如何进行 MySQL 的主外键操作...