0 0

MYSQL外键之痛ERROR 1005 (HY000): Can't create table 'ecims.#sql-1ba8_212' (errno: 155

在开发过程中,经常会用到给某个表建立外键约束,这个时候问题来,执行外键约束的时候经常会遇到创建不成功的问题,出现如下提示:
引用

ERROR 1005 (HY000): Can't create table 'ecims.#sql-1ba8_212' (errno: 150)


我的建表语句如下:
CREATE TABLE PRD_PARTNER(
    PKID                    CHAR(32)        NOT NULL,
    ENTERPRISE_FLAG         BIT(1),
    FULL_NAME               VARCHAR(500),
    PARTNER_NAME            VARCHAR(100),
    PARTNER_CODE            VARCHAR(20),
    INPUT_CODE              VARCHAR(10),
    DISPLAY_ORDER           INT,
    ADDRESS                 VARCHAR(500),
    POSTAL_CODE             VARCHAR(10),
    PHONE                   VARCHAR(20),
    FAX                     VARCHAR(20),
    WEBSITE                 VARCHAR(100),
    ACTIVE_FLAG             BIT(1),
    REMARK                  VARCHAR(500),
    RECORD_MODIFIED_USER    VARCHAR(50),
    RECORD_MODIFIED_DTM     DATETIME,
    RECORD_MODIFIED_IP      VARCHAR(50),
    RECORD_CREATED_USER     VARCHAR(50),
    RECORD_CREATED_DTM      DATETIME,
    RECORD_CREATED_IP       VARCHAR(50),
    RECORD_VERSION          BIGINT,
    PRIMARY KEY (PKID)
)ENGINE=INNODB
COMMENT='合作伙伴'
;
CREATE TABLE PRD_PARTNER_CONTACT(
    PKID                    CHAR(32)        NOT NULL,
    PARTNER_PKID            CHAR(32),
    FIRST_NAME              VARCHAR(20),
    LAST_NAME               VARCHAR(20),
    GENDER                  VARCHAR(10),
    CELL                    VARCHAR(20),
    PHONE                   VARCHAR(20),
    FAX                     VARCHAR(20),
    JOB_TITLE               CHAR(10),
    DEPARTMENT              VARCHAR(50),
    EMAIL                   VARCHAR(100),
    IM_NO                   VARCHAR(100),
    DISPLAY_ORDER           VARCHAR(10),
    MAJOR_CONTACT_FLAG      BIT(1),
    REMARK                  VARCHAR(500),
    RECORD_MODIFIED_USER    VARCHAR(50),
    RECORD_MODIFIED_DTM     DATETIME,
    RECORD_MODIFIED_IP      VARCHAR(50),
    RECORD_CREATED_USER     VARCHAR(50),
    RECORD_CREATED_DTM      DATETIME,
    RECORD_CREATED_IP       VARCHAR(50),
    RECORD_VERSION          BIGINT,
    PRIMARY KEY (PKID)
)ENGINE=INNODB
COMMENT='合作伙伴联系人'
;

ALTER TABLE PRD_PARTNER_CONTACT ADD CONSTRAINT FK_PRD_PARTNER_CONTACT_P 
    FOREIGN KEY (PARTNER_PKID)
    REFERENCES PRD_PARTNER(PKID)
;


数据库信息如下(数据库引擎InnoDB):
引用

mysql  Ver 14.14 Distrib 5.5.17, for Win32 (x86)

Connection id:          763
Current database:       ecims
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.5.17 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 59 min 52 sec


度娘了许久,仍未解决问题,现将已尝试的方法汇总如下:
1、工具问题,比较喜欢用navicat来管理数据库,
尝试:用命令行工具导入,执行失败!
2、两个字段的类型或者大小不严格匹配
尝试:字段均为char(32),失败!
3、你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的,你必须为它创建一个索引。
尝试:主键,执行失败!
尝试建立
CREATE INDEX IX_PRD_PARTNER_CONTACT_P ON PRD_PARTNER_CONTACT(PARTNER_PKID)
;

再次尝试执行失败!
4、外键的名字是一个已经存在的一个键值
尝试:在键名后面加上几个随机的字符以测试,失败!
5、其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎
尝试:已经是InnoDB引擎,执行失败!


——各位大侠,还有何解?
2014年9月19日 11:54

1个答案 按时间排序 按投票排序

0 0

你的SQL,我使用mysql workbench是可以成功执行的。是否已试过呢?

2014年9月19日 12:32

相关推荐

    MYSQL建立外键失败几种情况记录Can't create table不能创建表

    在MySQL中创建外键时,可能会遇到“Can't create table”这样的错误,这通常是由于多种原因造成的。以下是一些常见的导致外键创建失败的原因及其解决方法: 1. 字段类型和大小不匹配:确保主键和外键字段的类型完全...

    最新版windows mysql-8.0.31-winx64.zip

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,尤其在Windows平台上有着广泛的使用。"最新版windows mysql-8.0.31-winx64.zip"是一个包含MySQL 8.0.31版本的Windows 64位安装包,用于在Windows操作系统上...

    sql-create-table.zip_Table

    在这个“sql-create-table.zip_Table”压缩包中,我们有一个名为"标准代码.txt"的文件,它很可能包含了关于创建SQL表的三十条基础语句。以下是一些可能涵盖的知识点: 1. **基本语法**: `CREATE TABLE 表名 (列名...

    createtable.zip_CREATE TABLE_MYSQL_cvi mysql_mysql c_mysql creat

    在MySQL数据库管理系统中,创建表(CREATE TABLE)是基本的数据操作语言(DML)之一,用于定义数据库中的数据结构。本教程将详细讲解如何通过Command-line Version Interface (CVI)来创建MySQL表格。 首先,我们...

    IntroSQL_V4_All_SQL_Statements

    从给定的文件信息中,我们可以提取到一系列与MySQL数据库管理相关的知识点,这些知识点主要集中在数据库的创建、用户管理、权限授予以及数据表的构建上。以下是对这些知识点的详细阐述: ### 数据库用户管理 #### ...

    SQLServer数据库基础知识笔记.docx

    - **语法**: `CREATE TABLE table_name (column1 data_type FOREIGN KEY REFERENCES other_table(column), ...);` - 示例: 创建部门表 `department` 和员工表 `person`: - `CREATE TABLE department (num INT ...

    create-table.rar_Table

    在数据库管理中,建表(Create Table)是创建新数据表的基本操作,它是数据库设计的起点。本主题将深入探讨如何使用SQL(Structured Query Language)的`CREATE TABLE`语句来构建学生表、选课表和课程表。SQL是一种...

    SQL Server复习题.txt

    根据提供的文件信息,我们可以归纳出一系列与SQL Server相关的知识点,主要围绕着存储过程、视图、查询技巧等几个方面展开。 ### SQL Server 存储过程 #### 1. 创建存储过程 - **语法示例**:`CREATE PROCEDURE ...

    Sql-Server数据库查询语句练习题含答案.docx

    CREATE TABLE table_name ( column_name data_type constraint, ... [ PRIMARY KEY (column_name,...n) ], [ FOREIGN KEY (column_name,...n) REFERENCES referenced_table(referenced_column,...n) ] ); ```...

    SQL高手速成SQL语法教学

    ### SQL高手速成SQL语法教学知识点汇总 #### 一、SQL基础指令与语法 ##### 1. SQL SELECT - **用途**:用于从数据库中选取数据。 - **语法示例**: ```sql SELECT column_name(s) FROM table_name; ``` - **...

    比赛SQL.txt

    ### 1. 数据库表结构设计 文件中的SQL语句展示了如何创建多个表以及这些表之间的关系。这些表的设计考虑了比赛的基本信息、门票详情、场地信息、观众信息等。下面分别介绍每个表的设计目的和字段含义。 #### `Game...

    t-sql(自己整理).docx

    ### T-SQL知识点详解 #### 一、数据库操作 ##### 创建数据库 在T-SQL中创建数据库使用`CREATE DATABASE`语句。语法示例如下: ```sql CREATE DATABASE [db_MgrDemo] ON PRIMARY (NAME = N'db_MgrDemo', FILENAME...

    mysql外键的添加与删除参考.pdf

    MySQL 外键的添加与删除参考 MySQL 外键是关系数据库管理系统中的一种约束机制,它能够确保数据的一致性和完整性。外键是指在一个表中字段的值必须存在于另一个表中的字段值中。MySQL 中的外键只能在 InnoDB 存储...

    Create table mysql.rar_MYSQL_Table

    `Create table mysql.rar_MYSQL_Table` 提示我们这里涉及的是一个关于创建MySQL数据库表的主题。`mysql table`标签进一步确认了这一点。接下来,我们将深入探讨如何在MySQL中创建表,以及设计表时应考虑的关键要素。...

    MySQL数据库考试试题及答案

    根据提供的文件内容,我们可以归纳总结出一系列关于MySQL数据库的重要知识点,包括了选择题涉及的SQL命令、函数使用、数据操作等方面。下面是详细的知识点解析: ### 1. 聚合函数 - 求数据总和 - **知识点**:在SQL...

    mysql外键设置

    ### MySQL 外键设置详解 #### 一、MySQL 外键的作用及意义 在数据库设计中,外键(Foreign Key)是一种重要的约束机制,用于确保数据表之间的引用完整性。通过设置外键,可以保证主表中的某列或某些列与从表中的...

    sql 常用sql语句

    在SQL语言中,更新用户权限是一项重要的管理任务。根据给定的部分内容,我们可以详细解析这段SQL语句,并进一步探讨相关的SQL知识点。 ### SQL语句详解 #### 1. 更新语句(UPDATE) 这段SQL语句使用了`UPDATE`命令...

    SQL语句教程大全

    ### SQL语句教程大全 #### 一、SQL指令概述 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。本教程将详细介绍一系列常见的SQL语句及其应用方式,旨在帮助初学者快速掌握SQL的基本操作,...

    SQL-design.rar_C# SQL 创建表

    string sql = "CREATE TABLE DSGL42.TableName (Column1 datatype, Column2 datatype, ...)"; SqlCommand command = new SqlCommand(sql, connection); command.ExecuteNonQuery(); ``` 这里的"TableName"、"Column1...

    数据库文档

    例如,在`table_book_order`中,`Order_customer_id`和`book_id`都作为外键,分别引用`table_customer_order`和`table_book`的主键,形成了表间的关系。 综上所述,这份文档提供了构建一个基本的图书销售数据库所需...

Global site tag (gtag.js) - Google Analytics