我有两个表,table1是一个列ID的父表,table2是一个列IDFromTable1(不是实际的名称),当我把一个FK IDFromTable1到ID在table1,我得到的错误外键约束是不正确形成的错误。我想删除表2记录,如果表1记录被删除。谢谢你的帮助

ALTER TABLE `table2`  
   ADD CONSTRAINT `FK1` 
      FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`) 
      ON UPDATE CASCADE 
      ON DELETE CASCADE;

如果还需要其他信息,请告诉我。我是mysql的新手


当前回答

显示此错误的另一个可能原因。我创建表的顺序是错误的。我试图从一个尚未创建的表中引用一个键。

其他回答

我也有同样的问题,但我解决了。

只要确保列'ID'在'table1'有唯一的索引!

当然,这两个表中'ID'和'IDFromTable1'的列的类型和长度必须相同。但是你已经知道了。

甚至我在mysql和libase上也遇到了同样的问题。 这就是问题所在: 要引用其他表的列的表在数据类型或数据类型大小方面都不同。

Error appears in below scenario:
Scenario 1:
Table A has column id, type=bigint
Table B column referenced_id type varchar(this column gets the value from the id column of Table A.)
Liquibase changeset for table B:

    <changeset id="XXXXXXXXXXX-1" author="xyz">
            <column name="referenced_id" **type="varchar"**>
        </column>
            </changeset>
    <changeSet id="XXXXXXXXXXX-2" author="xyz">
                <addForeignKeyConstraint constraintName="FK_table_A"
                    referencedTableName="A" **baseColumnNames="referenced_id**"
                    referencedColumnNames="id" baseTableName="B" />
    </changeSet>

Table A changeSet:

    <changeSet id="YYYYYYYYYY" author="xyz">
     <column **name="id"** **type="bigint"** autoIncrement="${autoIncrement}">
                    <constraints primaryKey="true" nullable="false"/>
                </column>
    </changeSet>

Solution: 
correct the type of table B to bigint because the referenced table has type bigint.

Scenrario 2:
The type might be correct but the size might not.
e.g. :
Table B : referenced column type="varchar 50"
Table A : base column type ="varchar 255"

Solution change the size of referenced column to that of base table's column size.

我正在使用HeidiSQL,为了解决这个问题,我必须在引用表中创建一个索引,其中所有列都被引用。

即使字段名和数据类型相同,但排序规则不相同,也会导致该问题。

例如

资源描述 name | data 类型           | 排序 ActivityID           |         INT                         | latin1_general_ci ActivityID           |         INT                         | utf8_general_ci

试着把它变成

资源描述 name | data 类型           | 排序 ActivityID           |         INT                         | latin1_general_ci ActivityID           |         INT                         | latin1_general_ci

....

这对我很管用。

这个问题很容易解决

例如:你有两个表的名字用户和帖子,你想创建外键在帖子表和你使用phpMyAdmin

1)在post表中添加新列 (名称:use_id |类型:类似用户表中的id |长度:类似用户表中的id |默认值:NULL |属性:unsigned | index: index)

2)在结构标签进入关系视图 (约束名称:自动设置由phpmyAdmin |列名称:select user_id |表:用户|键:id,…)

它被简单地解决了

Javad mosavi伊朗/urmia