精华内容
下载资源
问答
  • 当你试图在mysql创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql...
  • mysql创建外键关联

    2021-01-31 05:59:55
    自己的代码总提示“ERROR 1005: Can't create table (errno: 150)”的错误郁闷了好几天,看了下面的文章终于成功了,犯了下面提到的三情况中...在系统不同的列表中,当数据库所有参照合法或非合法关联时都会涉及到参...

    自己的代码总提示“ERROR 1005: Can't create table (errno: 150)”的错误郁闷了好几天,看了下面的文章终于成功了,犯了下面提到的三情况中的第三种,太不细心了,居然忽略了“UNSIGNED ”,大家也要多留意呀!!

    参照完整性(Referentialintegrity)是数据库设计中一个重要的概念。在系统不同的列表中,当数据库所有参照合法或非合法关联时都会涉及到参照完整性。当参照完整性存在时,任何与不存在记录的关联将变得无效化,由此可防止用户出现各种错误,从而提供更为准确和实用的数据库。

    参照完整性通常通过外键(foreign key)的使用而被广泛应用。长久以来,流行工具开源RDBMSMySQL并没有支持外键,原因是这种支持将会降低RDBMS的速度和性能。然而,由于很多用户对参照完整性的优点倍感兴趣,最近MySQL的不同版本都通过新InnoDB列表引擎支持外键。由此,在数据库组成的列表中保持参照完整性将变得非常简单。

    为了建立两个MySQL表之间的一个外键关系,必须满足以下三种情况:

    * 两个表必须是InnoDB表类型。

    * 使用在外键关系的域必须为索引型(Index)。

    * 使用在外键关系的域必须与数据类型相似。

    例子是理解以上要点的最好方法,新建一个parts的表,cpu字段用来存放所有的cpu配件型号,再新建一个pc的表,其中的cpumodel字段用来存放pc机中的cpu型号,显然,cpumodel字段中的所有记录应该存在于parts表中。

    mysql> create table parts(

    -> cpu char(20) not null,

    -> index(cpu)

    -> )engine=innodb;

    Query OK, 0 rows affected (0.01 sec)

    mysql> create table pc(

    -> cpumodel char(20) not null,

    -> index(cpumodel),

    -> foreign key(cpumodel) references parts(cpu)

    -> )engine=innodb;

    Query OK, 0 rows affected (0.01 sec)

    注意:对于非InnoDB表, FOREIGN KEY 语句将被忽略。对parts表添加数据1,2,3,接着对pc表进行测试,满足条件的 1 可以顺利insert进去,而不符合条件的字符 5 在insert表的时候,出现外键约束性错误,这正是我们想要的结果

    mysql> insert into parts values('1'),('2'),('3');

    Query OK, 3 rows affected (0.00 sec)

    Records: 3 Duplicates: 0 Warnings: 0

    mysql> insert into pc values('1');

    Query OK, 1 row affected (0.01 sec)

    mysql> insert into pc values('5');

    ERROR 1452 (23000): Cannot add or update a child row: a foreign

    key constraint fails (`Orange/pc`, CONSTRAINT `pc_ibfk_1` FOREIGN KEY

    (`cpumodel`) REFERENCES `parts` (`cpu`))

    如以上例子解释的,外键在捉摸数据入口错误上起着重要的作用,由此可建立更为强健更加集成的数据库。另一方面值得提到的是,执行外键核实是内部资料处理的过程,且不同表之间指定复杂的内部关系可以导致数据库的性能下降。所以,在参照完整性与性能考虑之间找到平衡点相当重要,而使用外键就是能够确保性能与稳健之间的最优结合。  我期望本期的有关外键的介绍对你有所好处,你将会在下回的MySQL数据库设计中感受到外键的好处。编程快乐!

    分享到:

    18e900b8666ce6f233d25ec02f95ee59.png

    72dd548719f0ace4d5f9bca64e1d7715.png

    2009-07-14 10:30

    浏览 6887

    评论

    展开全文
  • 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。 一、SQL语句创建数据表并设置主外键关系 create table demo.ChineseCharInfo ( ID int not null auto_increment, Hanzi varchar(10) ...
  • 本篇文章是对MySQL创建外键关联错误-errno:150进行了详细的分析介绍,需要的朋友参考下
  • MySQL创建外键关联报错1005

    千次阅读 2018-09-28 17:31:03
    1.外键类型不对应 2.外键字符编码不对应 3.没有建立对应的索引 4.是否有重复主键 附上建立索引以及外键的语句(参考) ALTER TABLE country add INDEX index_name(emp_id) ALTER TABLE emp add INDEX index_...

    主要原因有
    1.外键类型不对应
    2.外键字符编码不对应
    3.没有建立对应的索引
    4.是否有重复主键

    附上建立索引以及外键的语句(参考)

    ALTER TABLE country add  INDEX index_name(emp_id)
    
    ALTER TABLE emp add  INDEX index_name(c_id)
    
    ALTER TABLE emp ADD CONSTRAINT fk_emp_country FOREIGN KEY (c_id) REFERENCES country (emp_id) ON DELETE RESTRICT ON UPDATE CASCADE
    

    参考连接

    https://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

    展开全文
  • 关联2张表时出现了无法创建外键的情况,从这个博客看到,问题出在第六点的Charset和Collate选项在表级和字段级上的一致性上。我的2张表的编码charset和collate不一致,2张表都执行执行SQL语句: alter table 表名 ...
  • MYSQL添加外键关联

    2018-08-01 15:23:00
    SELECT * from stu st,course...如果我们要给 sid 做一个约束,即两张表中的 sid 要一一对应,所以我们要添加外键 score 关联 stu: 此时,更改score 中 sid 的值,因为此处的sid 必须与 stu 中的sid对应,stu 中没...

    1387811-20180801152238233-1496250333.png

    SELECT * from stu st,course co,score sc 
    where st.sid = sc.sid and sc.cid = co.cid

    1387811-20180801152248317-1517133949.png

    如果我们要给 sid 做一个约束,即两张表中的 sid 要一一对应,所以我们要添加外键

    score 关联 stu:
    1387811-20180801152253665-697872671.png

    此时,更改score 中 sid 的值,因为此处的sid 必须与 stu 中的sid对应,stu 中没有 sid= 1008,所以这个时候更改score中的sid = 1008 ,保存的时候会提示报错
    1387811-20180801152302113-1809990352.png

    转载于:https://www.cnblogs.com/friday69/p/9401476.html

    展开全文
  • 当 你试图在mysql创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql...

    当 你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的 bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导。

    在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序

    已知的原因:

    1, 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是

    TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11)

    都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED,

    这两字段必须严格地一致匹配,更多关于signed 和 unsigned

    的信息,请参阅:http://www.verysimple.com/blog/?p=57

    2, 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的放,你必须为它创建一个索引。

    3, 外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

    4, 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型

    5, 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug.

    6, 请确定你的Charset 和 Collate 选项在表级和字段级上的一致

    7, 你可能设置为外键设置了一个默认值,如 default=0

    8, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。

    9, ALTER 声明中有语法错误

    10. 要连接的两个表的编码格式不同

    展开全文
  • mysql外键建立心得

    2021-02-08 03:20:12
    mysql主主外键建立:(1)、确保参照的表和字段是存在的(2)、关联表必须是Innodb存储类型(3)、必须设置主关联表主键(4)、主键与外键数据类型和字符编码(unsigned)必须一致(5)、确保以上声明的句法是正确的附:mysql...
  • mysql外键关联

    2021-02-01 21:28:32
    主键:是唯一标识一条记录,不能有重复的,不允许为空,用来...创建外键的方式:方式一:表已经创建好了,继续修改表的结构来添加外键,代码如下:create table student(id int primary key auto_increment,name c...
  • 要在Mysql数据库平台建立外键关联,必须满足以下几个条件:1.两个表必须为 InnoDB 类型。2. 外键和被引用键必须是索引中的第一列,InnoDB 不会自动为外键和被引用键建立索引,必须明确创建它们。3. 外键与对应的被...
  • MySQL外键关联操作

    千次阅读 2020-10-07 22:02:31
    目录 文章目录目录MySQL 的外键约束创建表时定义外键(References,参照)...注:MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。 创建表时定义外键(References,参照) 在 CREATE TABLE 语句中,通过 FOREI
  • 通过给mysql的表字段添加外键约束,...1、创建表时直接创建外键约束create table books(bookid number(10) not null primary key,bookName varchar2(20) not null,price number(10,2),categoryId number(10) not nul...
  • 首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。下面,我们先创建以下测试用数据库表:CODE:[Copy to clipboard]CREATE TABLE `...
  • Mysql创建外键报错

    2021-01-19 06:27:14
    目标:创建表使得表B中的taskname为外键,参考表A中的taskname字段,创建表发现报错如下: [2018-07-19 15:02:29] [HY000][150] Create table 'daxin/#sql-5d_30' with foreign key constraint failed. There is no...
  • 本篇文章是对MySQL创建外键关联错误-errno:150进行了详细的分析介绍,需要的朋友参考下 当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示...
  • 主要介绍了MySQL使用外键实现级联删除与更新的方法,详细分析了mysql数据库与表的创建、数据插入、查询以及外链的使用与级联操作相关技巧,需要的朋友可以参考下
  • 外键关联 外键约束: foreign key, 让表与表之间产生关系, 从而保证数据的正确性 1.创建表时,添加外键 create table 表名( .... 外键字段 int, constraint 外键名称 foreign key(外键字段) references 关联表名...
  • 1.创建department表  create table department(  id int primary key,  director varchar(50) not null,  area varchar(50) check('南湖...2.创建classes表,并为department_id属性创建外键关联 create tab...
  • sql语句创建外键关联

    千次阅读 2021-01-29 10:26:47
    创建学生教师表为例: 学生 id 关联教师 tid 学生表: student 教师表: teacher sql语句 : USE school; CREATE TABLE student( id INT(10) NOT NULL PRIMARY KEY, NAME VARCHAR(30) DEFAULT NULL, tid INT(10) ...
  • 创建外键语法 ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ; 3.使用组合主键 如果一列不能唯一区分一...
  • mysql外键+两表关联

    2021-01-01 22:14:43
    mysql外键+两表关联 说明: 一般情况下,开发过程中是不建立外键创建员工部门表为例 第一种方式 建表的时候指明外键 -- 创建部门表 create table dept( id int primary key auto_increment, -- 部门编号 name...
  • 我有2张表,一张users表,一张safelog表,但是safelog表创建外键关联时一直报错,为什么?下面粘贴建表语句
  • MySQL外键关联(一对多) 外键说明    什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以重复 2)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,623
精华内容 19,849
关键字:

mysql创建外键关联

mysql 订阅