在开发过程中,经常会用到给某个表建立外键约束,这个时候问题来,执行外键约束的时候经常会遇到创建不成功的问题,出现如下提示:
引用
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引擎,执行失败!
——各位大侠,还有何解?
相关推荐
在MySQL中创建外键时,可能会遇到“Can't create table”这样的错误,这通常是由于多种原因造成的。以下是一些常见的导致外键创建失败的原因及其解决方法: 1. 字段类型和大小不匹配:确保主键和外键字段的类型完全...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,尤其在Windows平台上有着广泛的使用。"最新版windows mysql-8.0.31-winx64.zip"是一个包含MySQL 8.0.31版本的Windows 64位安装包,用于在Windows操作系统上...
在这个“sql-create-table.zip_Table”压缩包中,我们有一个名为"标准代码.txt"的文件,它很可能包含了关于创建SQL表的三十条基础语句。以下是一些可能涵盖的知识点: 1. **基本语法**: `CREATE TABLE 表名 (列名...
在MySQL数据库管理系统中,创建表(CREATE TABLE)是基本的数据操作语言(DML)之一,用于定义数据库中的数据结构。本教程将详细讲解如何通过Command-line Version Interface (CVI)来创建MySQL表格。 首先,我们...
从给定的文件信息中,我们可以提取到一系列与MySQL数据库管理相关的知识点,这些知识点主要集中在数据库的创建、用户管理、权限授予以及数据表的构建上。以下是对这些知识点的详细阐述: ### 数据库用户管理 #### ...
- **语法**: `CREATE TABLE table_name (column1 data_type FOREIGN KEY REFERENCES other_table(column), ...);` - 示例: 创建部门表 `department` 和员工表 `person`: - `CREATE TABLE department (num INT ...
在数据库管理中,建表(Create Table)是创建新数据表的基本操作,它是数据库设计的起点。本主题将深入探讨如何使用SQL(Structured Query Language)的`CREATE TABLE`语句来构建学生表、选课表和课程表。SQL是一种...
根据提供的文件信息,我们可以归纳出一系列与SQL Server相关的知识点,主要围绕着存储过程、视图、查询技巧等几个方面展开。 ### SQL Server 存储过程 #### 1. 创建存储过程 - **语法示例**:`CREATE PROCEDURE ...
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基础指令与语法 ##### 1. SQL SELECT - **用途**:用于从数据库中选取数据。 - **语法示例**: ```sql SELECT column_name(s) FROM table_name; ``` - **...
### 1. 数据库表结构设计 文件中的SQL语句展示了如何创建多个表以及这些表之间的关系。这些表的设计考虑了比赛的基本信息、门票详情、场地信息、观众信息等。下面分别介绍每个表的设计目的和字段含义。 #### `Game...
### T-SQL知识点详解 #### 一、数据库操作 ##### 创建数据库 在T-SQL中创建数据库使用`CREATE DATABASE`语句。语法示例如下: ```sql CREATE DATABASE [db_MgrDemo] ON PRIMARY (NAME = N'db_MgrDemo', FILENAME...
MySQL 外键的添加与删除参考 MySQL 外键是关系数据库管理系统中的一种约束机制,它能够确保数据的一致性和完整性。外键是指在一个表中字段的值必须存在于另一个表中的字段值中。MySQL 中的外键只能在 InnoDB 存储...
`Create table mysql.rar_MYSQL_Table` 提示我们这里涉及的是一个关于创建MySQL数据库表的主题。`mysql table`标签进一步确认了这一点。接下来,我们将深入探讨如何在MySQL中创建表,以及设计表时应考虑的关键要素。...
根据提供的文件内容,我们可以归纳总结出一系列关于MySQL数据库的重要知识点,包括了选择题涉及的SQL命令、函数使用、数据操作等方面。下面是详细的知识点解析: ### 1. 聚合函数 - 求数据总和 - **知识点**:在SQL...
### MySQL 外键设置详解 #### 一、MySQL 外键的作用及意义 在数据库设计中,外键(Foreign Key)是一种重要的约束机制,用于确保数据表之间的引用完整性。通过设置外键,可以保证主表中的某列或某些列与从表中的...
在SQL语言中,更新用户权限是一项重要的管理任务。根据给定的部分内容,我们可以详细解析这段SQL语句,并进一步探讨相关的SQL知识点。 ### SQL语句详解 #### 1. 更新语句(UPDATE) 这段SQL语句使用了`UPDATE`命令...
### SQL语句教程大全 #### 一、SQL指令概述 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。本教程将详细介绍一系列常见的SQL语句及其应用方式,旨在帮助初学者快速掌握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`的主键,形成了表间的关系。 综上所述,这份文档提供了构建一个基本的图书销售数据库所需...