`
_Yggd
  • 浏览: 89203 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

mysql 建立外键出现的问题

 
阅读更多
mysql 建外键的时候出150错误

Mysql错误:error Code: 1005. Can't create table 'joblog.sc' (errno: 150)



create table sc
(
    id int(10) unsigned not null auto_increment comment 'id',
    Sno int(10) unsigned not null default '0' comment '学号',
    Cno int(10) unsigned not null default '0' comment '课程号',
    Grade int(10) unsigned default null comment '成绩',
    primary key (id),
      constraint FK_sc_1 foreign key (Sno) references student(id) ,
      constraint FK_sc_2 foreign key(Cno) references course(id) 
)engine=InnoDB default charset=gb2312;

原因是message_demo表的type(外键)属性和message_type表的id(主键)定义不同,由于我是在建立表之后再建立的外键关系,之前给type字段加了个unsigned,而id字段又没加,因此报错。



“FOREIGN KEY约束”
外键定义服从下列情况:

·         所有tables必须是InnoDB型,它们不能是临时表。

·         在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。

·         在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。

·         不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中,这是因为对这些列的索引必须总是包含一个前缀长度。

·         如果CONSTRAINTsymbol被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。

. 外键

外键增强为数据库开发人员提供了多项益处:

·         假定关联设计恰当,外键约束使得程序员更难将不一致性引入数据库。

·         数据库服务器具有集中式约束检查功能,因而没有必要在应用程序一侧执行这类检查。这样,就消除了不同应用程序使用不同方式检查约束的可能性。

·         使用级联更新和删除,简化了应用程序代码。

·         设计恰当的外键有助于以文档方式记录表间的关系。

请记住,这些好处是以数据库服务器为执行必要检查而需的额外开销为代价的。服务器额外检查会影响性能,对于某些应用程序,该特性不受欢迎,应尽量避免。(出于该原因,在一些主要的商业应用程序中,在应用程序级别上实施了外键逻辑)。
分享到:
评论

相关推荐

    外键.sql ~MySQL创建外键的操作

    MySQL 外键

    Mysql增加外键的方法

    总之,通过上述的知识点介绍,我们可以了解到,在MySQL中建立外键并不复杂,关键是要确保数据表的存储引擎是InnoDB,并且要正确设置外键与主键的数据类型,同时还需要注意外键的触发限制条件。只有在实际的操作中...

    mysql建立外键

    建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键...

    mysql的外键

    在MySQL数据库系统中,外键(Foreign Key)是一种重要的关系型数据库约束,它用于建立和维护两个表之间的关联。外键允许我们在一个表(被引用表)中引用另一个表(引用表)的主键,从而确保数据的一致性和完整性。在...

    mysql处理添加外键时提示error 150 问题的解决方法

    MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...

    MySQL外键的定义、作用、添加和删除

    MySQL 外键的定义、作用、添加和删除 外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有...外键是 MySQL 中的一个重要概念,它可以用来建立和加强两个表数据之间的连接,保证数据的参照完整性和可靠性。

    mysql 删除外键.png

    当我们在设计关系型数据库时,使用外键可以帮助我们建立表与表之间的关联,形成数据库的实体关系模型。 "mysql 删除外键.png" 这个文件很可能是关于如何在MySQL中删除外键的一个教程或示例的截图。通常,删除外键...

    MySQL中利用外键实现级联删除、更新

    在创建外键时,要求父表必须有对应的索引,子表在创建外键时也会自动创建对应的索引。在创建索引时,可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、NO ACTION、SET NULL 和 CASCADE。其中 ...

    MySQL外键使用及说明详解

    外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;  3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以...

    解析在MySQL里创建外键时ERROR 1005的解决办法

    然而,在创建外键时,有时会遇到错误代码1005,这个错误通常意味着外键约束无法正确建立。错误信息可能很简单,如"Can't create table 'db_qxztc.qx_userssssnew' (errno: 150)",这并不提供足够的信息来诊断问题。...

    mysql外键设置

    - **维护关系的完整性**:通过定义外键,可以在删除或更新主表的数据时,自动检查并处理从表中的相关记录,避免出现“悬挂”记录的情况。 - **简化查询操作**:例如,当需要查询某个产品的信息以及与之关联的订单...

    MySQL外键创建失败1005原因汇总

    8. **权限问题**:如果没有足够的权限来创建外键,也会遇到1005错误。确保当前用户有足够的权限(如`CREATE TABLESPACE`,`ALTER TABLE`等)来执行外键创建。 9. **表结构冲突**:可能已存在一个与新外键冲突的约束...

    MySQL创建数据表并建立主外键关系详解

    MySQL创建数据表并建立主外键关系是数据库设计中常见的操作,这对于数据的一致性和完整性至关重要。主键和外键是关系型数据库中的关键概念,它们用于确保数据的关联性和引用完整性。 首先,让我们理解一下主键和...

    MySql外键设置详解

    MySql 外键设置详解 MySql 外键设置详解 一、外键的使用 外键是数据库中的一种约束,用于确保数据的一致性和完整性。外键的作用主要有两个:一...但是,需要注意创建外键时的注意事项,并且正确地使用外键约束类型。

    mysql添加外键的四种方式

    在MySQL数据库中,外键是实现关系数据库间关联的重要手段,它可以确保数据的一致性和完整性。外键约束允许一个表中的字段引用另一个表中的主键,这样就形成了表与表之间的联系。以下将详细介绍四种在MySQL中添加外键...

    如何在MySQL数据库中定义外键

    ### 如何在MySQL数据库中定义外键 #### 定义数据表 假设某电脑生产商的数据库中包含了整机产品信息和配件供货信息。为了更好地管理这些信息,我们需要创建两个数据表:`pc` 表用于存储整机产品信息,而 `parts` 表...

    MySQL删除外键问题小结

    以下是对MySQL删除外键问题的详细分析和解决方案。 首先,错误`Error on rename of ... (errno: 152)`通常意味着在尝试更改表结构(如删除外键)时遇到了问题。这个错误不是由于MySQL的bug,而是因为操作的不当。在...

    mysql数据库设置外键应该注意的几点

    如果不一致,MySQL将无法识别并创建外键约束。 3. **NULL值处理**: 外键字段可以允许`NULL`值,这意味着子表中的一些记录可能没有对应的父表记录。然而,这可能会影响数据完整性。如果希望外键字段不能为空,应...

    Mysql表创建外键报错解决方案

    数据库表A: CREATE TABLE task_desc_tab ( id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT, <strong>taskname</strong> VARCHAR(200) NOT NULL COMMENT '任务名字', sqlname VARCHAR(20) ...

Global site tag (gtag.js) - Google Analytics