首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL中创建外键的错误:1215 Cannot add the foreign key constraint

引言: MySQL中经常会需要创建父子表之间的约束,这个约束是需要建立在主外键基础之上的,这里解决了一个在创建主外键约束过程中碰到的一个问题。 1....碰到错误 在创建外键之时,使用的SQL和碰到错误信息如下: alter table `product' add CONSTRAINT `sid_ref` FOREIGN KEY (`sid`)...REFERENCES `sealer` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 碰到的错误信息如下: 无法正确的插入外键约束。...问题分析 主外键更多的是某表的主键与子表的某个列进行关联,要求是具备相同的数据类型和属性,问题会不会出现在这里?...解决的办法 修改product.sid中的数据类型,添加unsigned和字段的长度,将其设置为相同即可。 5.

2.5K50

如何将生产环境的字段类型从INT修改为BIGINT

但是相应的停机时间就会很长,ID列是聚集索引,因此修改前还必须删除索引键。问题一下子就浮出水面了。 如果用这种方式修改,推测会引起至少好几个小时的停机。另外由此产生的日志可能还要占据大量的磁盘。...事实证明这样做的的确也觉少了宕机时间。 具体实践 在我们的测试和开发环境中,我做了大量工作,确保这种方法能够像预期的那样工作。以下部分总结了测试工作。...假定已经将数据库恢复到一个开发环境,并从创建副本表开始 创建副本数据表 在一个新还原的AdventureWorks数据库中,创建一个PersonNEW表,使用BIGINT数据类型作为聚集索引列,如下所示...,最后一步是交换表,交换索引、约束、表名、外键、触发器和几个数据库权限,以拒绝访问某些列。...使用SSIS包定期更新PersonNew表,以将数据从可用性组中的报告实例转移 在计划的维护窗口中,多做一个SSIS传输,然后创建触发器以使表为只读。还关闭了访问此表的应用程序。

5.1K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一般数据库增量数据处理和数据仓库增量数据处理的几种策略

    这种数据表一般会提供一列能够记载这条记录生成的历史时间,或者说这个操作发生的时间,越早的操作时间越靠前,越晚的操作时间越靠后。...第二类 - 有修改时间特征的数据表 这类表中的数据一般属于可以修改带有维护性质的数据,比如像会员信息表,创建会员的时候会生成一条记录,会在 CreateDate 标记一下,并且在 UpdateDate...很遗憾的是,抽取出来的数据中只保留了创建时间,但是并没有任何能够标识修改行为的列。...很简单的概念 - 即每次加载数据源中的数据时,基于主键或者唯一列到目标表中查询是否存在,如果不存在就插入。如果存在就比较关键列数据是否相等,不相等就修改。...对于具有事实性质的数据表,需要考虑使用上面通用的集中增量数据处理的方案,选择一个合适的方式来处理数据。保证在 Staging 事实中的数据相对于后面的 DW 数据库来说就是新增的或者已修改过的数据。

    3.2K30

    如何将生产环境的字段类型从INT修改为BIGINT

    但是相应的停机时间就会很长,ID列是聚集索引,因此修改前还必须删除索引键。问题一下子就浮出水面了。 如果用这种方式修改,推测会引起至少好几个小时的停机。另外由此产生的日志可能还要占据大量的磁盘。...事实证明这样做的的确也觉少了宕机时间。 具体实践 在我们的测试和开发环境中,我做了大量工作,确保这种方法能够像预期的那样工作。以下部分总结了测试工作。...假定已经将数据库恢复到一个开发环境,并从创建副本表开始 创建副本数据表 在一个新还原的AdventureWorks数据库中,创建一个PersonNEW表,使用BIGINT数据类型作为聚集索引列,如下所示...,最后一步是交换表,交换索引、约束、表名、外键、触发器和几个数据库权限,以拒绝访问某些列。...使用SSIS包定期更新PersonNew表,以将数据从可用性组中的报告实例转移 在计划的维护窗口中,多做一个SSIS传输,然后创建触发器以使表为只读。还关闭了访问此表的应用程序。

    3K10

    Django中基表的创建、外键字段属性简介、脏数据概念、子序列化

    Django中基表的设置 通过图书管理系统引入多表操作:如果我们创建表的方式是先抽象出表与表之间相同的字段建一个父类,然后在用每个表类去继承这个父类,如下面的代码,我们将无法得到期望的表字段。...假设图书管理系统中书、出版社、作者、作者详细信息四张表之间的关系如下: """ 表关系 1)Book 和 Publish 一对多:外键在多的一方 Book 2)Book 和 Author 多对多:外键在查询频率高的一方...更合理) """ Django orm中外键字段属性详解 在建表之前我们对外键字段属性进行了解: 1)related_name在外键中设置外键反向查询的字段名:正向找字段名,反向找related_name...例子:部门没有了,部门员工里的部门字段改为未分组部门的id字段为NULL 注:多对多字段不能设置on_delete级联关系,如果要处理级联关系,需要手动明确关系,处理表关系中的多个外键 3)db_constraint...,将两张表设置为级联,并将外键反向查询的字段名设置为detail 数据库中脏数据介绍 数据库中常见的并发操作所带来了一致性问题包括:丢失的修改,不可重复读,读“脏”数据,幻读。

    4.3K30

    警务数据仓库的实现

    对每一个实际应用问题,可利用 SSIS 为其开发一个数据集成方案(称为一个SSIS包)。SSIS 提供了一系列支持应用开发的内置任务和容器,数据源、数据查找、数据转换、数据目的等配置控件。...用户只要配置数据流中各种控件的参数,几乎无需编写一行代码,就可以创建 SSIS 包来解决 ETL 等复杂的商业智能数据集成问题。...将 OLTPHotel 旅馆入住表 LGRZ 的数据抽取出来,派生出年、月、日、时等新列,加载到数据仓库 HuangDW_Hotel 目的表 FactHotel(旅馆事实表)之中。...(一)将包另存到SSIS服务器 1、进入 SSIS 包文件所在的文件夹 2、打开 SSIS 包的设计窗口 3、指定 SSIS 包另存的服务器 4、为 SSIS 包副本命名 5、配置包保护级别 6、将包另存到服务器...这表明存储在 SSIS 服务器中的包 HDC_ETL_Hotel,已作为 SQL Server 数据库服务器中的一个代理作业。

    6400

    数据仓库中如何使用索引

    本篇主要介绍如何对数据仓库中的关系表建立索引,注意是在关系数据库中的关系表,而不是SSAS中的数据表。...如果在维度表中有其他用于查询、排序、分组的列,也可以创建非聚集索引,就如同你在事务性数据库中一样。...当发现用来创建分区和聚集索引在同一列上并且在保存分区事实表的文件组上创建了索引,那么SQLServer 将自动用事实表分区来分区索引(例如,索引会有和事实表相同的的分区函数和列)。...下一步,创建非聚集索引在每个事实表的外键上,并且考虑混合外键和日期键,如图1所示可以见建立类似用CustomerKEY + DateKEY 的索引。...开始单纯严谨彻底地评估以便在数据仓库中建立索引。 总结 本篇只是简单介绍了一般数据仓库的关系数据表如何建立索引,但是很多时候要根据实际请款来建立索引,甚至有时候不能使用索引。

    1.8K70

    「数据ETL」从数据民工到数据白领蜕变之旅(四)-有了PowerQuery还需要SSIS吗?

    鉴于笔者所能触达的读者群体,多数为业务背景的数据分析工作者,本篇给大家带来简单的入门实操演示,让大家减少对专业IT型工具的恐惧心理。...当然还有许多领域PowerQuery是缺陷的,例如增量更新机制,更为复杂的缓慢变化维的处理,重新生成数据仓库的代理键替代原有的业务主键等功能。...本次只生成一个时间戳的字段,无需依赖于上游的字段,直接用SSIS里的内置函数得到,同样地拖拉一下函数即可。生成的新列,甚至可以替换原来列的内容,或作为新列添加。...同样地,SSIS已经自动帮我们按源的数据类型和字段名称,生成了SQL语句用来创建目标表(若是已经有现成表,直接选择即可,会将源数据直接插入到目标表中存放,怎样避免重复插入及插入数据去重等,就需要一些进阶的用法...同样地转到【映射】选项卡中,可以看到SSIS自动帮我们创建好对应的列匹配关系,若源和目标的字段名称不同,需要手动去在输入列与目标列中做匹配映射调整。

    3.6K20

    mysql索引的类型和优缺点

    在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。...如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。...也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。 3....外键索引 如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。 5....作为一般规律,key_len数据列里的值越小越好(意思是更快)。 ref数据列给出了关联关系中另一个数据表里的数据列的名字。

    2.4K70

    mysql索引的类型和优缺点

    在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。...如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。...也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。 3....外键索引 如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。 5....作为一般规律,key_len数据列里的值越小越好(意思是更快)。 ref数据列给出了关联关系中另一个数据表里的数据列的名字。

    1.1K30

    mysql的索引有哪几种_MySQL索引数据结构

    因此,应该只为那些最经常出现在查询条件(wherecolumn=)或排序条件(orderbycolumn)中的数据列创建索引。...如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字unique把它定义为一个唯一索引。...也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。...4、外键索引 如果为某个外键字段定义了一个外键约束条件,mysql就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。...在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。

    1.2K10

    大数据分析工具Power BI(五):数据模型介绍

    数据模型介绍一、模型关系在数据分析过程中,我们会将数据表分为事实表和维度表两种类型的表。事实表发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中,事实表也叫明细表。...例如,一个按照地区、产品、月份划分的销售量和销售额的事实表如下:在以上事实表的示例中,"地区ID"、"产品ID"、"月份ID"为键值列,"销售量"、"销售额"为度量列,所谓度量列就是列的数据可度量,度量列一般为可统计的数值列...产品维度表中的"产品ID"与事实表中的"产品ID"相匹配,称为"键属性",在当前产品维度表中一个"产品ID"只有一个"产品名称",显示时使用"产品名称"来代替,所以"产品名称"也被认为是"键属性"的一部分...每个维度表中的键值属性都与事实表中对应的维度相匹配,在维度表中"产品ID"类似关系型数据库中的主键,在事实表中"产品ID"类似关系型数据库中的外键,维度表和事实表就是按照键值属性"产品ID"进行关联的。...在企业中客户信息表、人员信息表、区域信息表等都是维度表,Power BI中我们可以通过模型视图来创建两表或者多表之间的关系,这里建立的关系就是创建的事实表与维度表之间的关系。

    2.1K71

    数据仓库中的维度表和事实表概述

    事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性纬度表的主键,而维度表包含事实记录的特性...事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与纬度表中对应项的相关索引字段之外的任何数据。...一般来说,一个事实数据表都要和一个或多个纬度表相关联,用户在利用事实数据表创建多维数据集时,可以使用一个或多个维度表。...维度表 维度表可以看作是用户来分析数据的窗口,纬度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构...在维度表中,每个表都包含独立于其他维度表的事实特性,例如,客户维度表包含有关客户的数据。维度表中的列字段可以将信息分为不同层次的结构级。

    4.7K30

    MYSQL中约束及修改数据表

    30:删除表中的数据 DELETE FROM 数据表名 WHERE 条件; 31:外键约束的参照操作(外键约束的要求解析) 外键约束保证数据一致性,完整性,实现一对多或者一对一关系 (含有外键的表称为子表...) 外键约束的要求 1:父表和子表必须使用相同的存储引擎,而且禁止使用临时表 2:数据表的存储引擎只能为InnoDB 3:外键列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同...4:外键列和参照列必须创建索引。...如果外键列不存在索引的话,MYSQL将自动创建索引 ? ?...33:外键约束的参照操作 CASCADE:从父表删除或者更新且自动删除或者更新子表中匹配的行 《在两表中插入记录,必须先在父表中插入记录》 SET NULL:从父表删除或者更新行,并且设置子表中的外键列为

    3.2K80

    MySQL数据库的设计和命令行模式下建立详细过程

    1.数据表的设计 MySQL数据库管理系统(DBMS)中,包含的MySQL中定义数据字段的类型对你数据库的优化是非常重要的。...外键:一个表可以有多个列是外键。 唯一键:一个表可以有多个列是唯一键。 索引:一个表可以有多个列是索引。...唯一键可以起到唯一约束的作用,当然主键也可以起到唯一约束的作用。当然我们可以不建立唯一键和主键,直接为指定的数据表的列添加唯一约束。唯一约束保证指定列的值不能重复。...,使用如下命令: #查看表中的列 SHOW COLUMNS FROM student; #或者直接使用describe describe student; image.png (6)创建数据表course...搜索 [4]MySQL引擎 [5]MySQL中的四种Key [6]SQL的主键和外键约束 [7]唯一索引和唯一约束有什么区别

    2.1K00

    MySQL 数据库基础知识(系统化一篇入门)

    、数据表的基本操作 4.1、数据库的基本操作 4. 2、数据表的基本操作 1、创建、查看数据表 2、修改数据表 五、数据表字段的约束 5.1、主键约束 5.2、外键约束 5.3、唯一性约束 5.4、..., name varchar(20), primary key(id) ); 5.2、外键约束 如果表A的主键是表B中的字段,则该字段称为表B的外键;另外表A称为主表,表B称为从表。...外键是用来 实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或删除的级联操作将使 得日常维护更轻松。外键主要用来保证数据的完整性和一致性。...其基本语法如下: -- 在创建数据表时语法如下: CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段) -- 将创建数据表创号后语法如下: ALTER...函数 作用 sum() 计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0 avg() 计算指定列的平均值,如果指定列类型不是数值类型则计算结果为0 max() 计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算

    5.1K60

    Mysql-5-数据表的基本操作

    主键约束要求主键列的数据唯一,并且不能为空。主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询速度。主键分为两种类型:单字段主键和多字段联合主键。...一个表可以有一个或者多个外键。外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键必须等于另一个表中主键的某个值。 下面介绍几个概念。...是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的主键。...例:定义数据表tb_employee5,并且在该表中创建外键约束 创建一个部门表tb_dept1,表结构如下表所示 字段名称 数据类型 备注 id int(11) 部门编号 name varchar(22...pri为该列主键的一部分;uni表示该列是unique索引的一部分;mul表示在列中某个给定值允许出现多次。

    1.7K60

    操作数据表

    打开数据库    use 数据库 ---- use mydata 查看数据库    show databases 显示当前用户打开的数据库   SELECT DATABASE(); 创建数据表 语法...删除主键约束 语法:ALTER TABLE tbl_name DROP PRIMARY KEY; 外键约束      外键用来在两个表的数据之间建立连接,它可以是一列或者多列。...一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。引擎必须为InnoDB。..."外键名"为定义的外键约束的名称,一个表中不能有相同名称的外键,"字段名"表示子表需要添加外键约束的字段列:"主表名"表子表外键所一来的表的名称;''主键列"表主表中定义的主键列或组合....FOREIGN KEY [index_name] (index_col_name,...) reference_definition 例子:student表中的sid参照grape表中的gid添加外键

    86460

    SQL 基础(二)数据表的创建、约束、修改、查看、删除

    文章目录 数据类型 数据表示方式 数据表创建 Management Studio 建表 SQL 指令建表 数据表约束 Constrain NULL / NOT NULL UNIQUE 列约束 表约束 PRIMARY...数据精度:能精确到小数点后的位数,小数点右侧位数 数据表创建 Management Studio 建表 建立表格其实就是定义每一列的过程 数据库表节点,新建 定义列属性,完成建表操作 SQL 指令建表...,约束某一列或几列作为外部键,包含外键的表称为从表(或参照表),主键所在表称为主表(或被参照表)。...既可表约束又可列约束 为保证参照完整性,系统保证外键的取值为: 空值 主键取值 换言之,外键存在至少需要两张表,在第一张表中作为主键的属性在第二张表(从表,参照表)中做普通属性,则此键称为第一张表(主表...,被参照表)的外键 列约束 -- FOREIGN KEY 列约束 create table s5 ( Sno varchar(6) NOT NULL constraint s5_foreign FOREIGN

    1.1K20

    MySQL数据库操作教程

    :FOREIGN KEY --外键约束要求: --1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表 --2.数据表的存储引擎只能为InnoDB /* 3.外键列和参照列必须具有相似的数据类型。...其中数字的长度或者是否有符号位都必须相同 但是,若是字符的长度,则可以不同 */ --4.外键列和参照列必须创建索引,如果外键列不存在索引。!MySQL将自动创建索引!...外键约束的参照操作及功能: 1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行 2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL (ps.如果使用该选项,...:FOREIGN KEY --外键约束要求: --1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表 --2.数据表的存储引擎只能为InnoDB /* 3.外键列和参照列必须具有相似的数据类型。...其中数字的长度或者是否有符号位都必须相同 但是,若是字符的长度,则可以不同 */ --4.外键列和参照列必须创建索引,如果外键列不存在索引。!MySQL将自动创建索引!

    4.8K10
    领券