今天被外键约束搞深刻了,弄了一个上午,终于找到原因,特此记录,以后便于查阅。
我的sql:
CREATE TABLE `report_` (
`id_` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name_` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id_`)
);
CREATE TABLE `report_user_` (
`id_` int(10) unsigned NOT NULL AUTO_INCREMENT,
`report_id_` int(11) NOT NULL ,
PRIMARY KEY (`id_`)
);
alter table report_user_ add constraint fk_rport_use foreign key (report_id_)
references report_(id_) ON UPDATE CASCADE ON DELETE CASCADE;
如上便是我简化的sql语句,执行报错。
原因如下: 从表字段 ‘report_id_’ 类型为int(11),
需要关联的主表字段`id_`类型为int(11) unsigned ,,
T.N..D,就是因为这个‘unsigned’导致类型不一致,unsigned指非负整数。
-------
总结:
mysql创建外键要求比较严格,严格到有时候你找不到到底哪里错了。
如果碰到ERROR 1005: Can’t create table ‘./test/testt1.frm’ (errno: 150)这个错误的时候。
1.检查你的表是不是都是INNodb类型的,只有这种类型才可以创建外键。
2.检查字段名是不是有错误。
3.检查字段类型,最好一样。
4.比较隐蔽,检查字符集,为了迁移和使用的方便,尽量使用UTF8
查看信息日志:
show innodb status;
或者:
show engine innodb status;
其中有一项“LATEST FOREIGN KEY ERROR”显示了最近的一次外键约束出错的详细信息
------
分享到:
相关推荐
数据库表A: CREATE TABLE task_desc_tab ( id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT, <strong>taskname</strong> VARCHAR(200) NOT NULL COMMENT '任务名字', sqlname VARCHAR(20) ...
总之,解决MySQL创建外键时的ERROR 1005需要细致的错误分析和SQL语句审查。通过使用`SHOW ENGINE INNODB STATUS;`命令获取详细的错误信息,然后根据这些信息调整外键定义,通常可以成功创建外键并确保数据库结构的...
MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...
8. **权限问题**:如果没有足够的权限来创建外键,也会遇到1005错误。确保当前用户有足够的权限(如`CREATE TABLESPACE`,`ALTER TABLE`等)来执行外键创建。 9. **表结构冲突**:可能已存在一个与新外键冲突的约束...
MySQL无法创建外键的情况通常与数据表的字符集(Charset)和校对规则(Collate)设置不一致有关。在创建外键时,涉及到的两张表的字符集和校对规则需要保持一致,否则会导致外键约束无法正确建立。解决这个问题的...
以下是对MySQL删除外键问题的详细分析和解决方案。 首先,错误`Error on rename of ... (errno: 152)`通常意味着在尝试更改表结构(如删除外键)时遇到了问题。这个错误不是由于MySQL的bug,而是因为操作的不当。在...
在MySQL中,创建外键关联时遇到"errno:150"错误,通常是由于数据类型不匹配、缺少索引或不正确的约束设置等原因导致的。以下是对这些常见问题的详细解释: 1. **数据类型不匹配**:外键字段与主键字段的数据类型...
- **创建外键时**: - 定义外键名时,不要使用引号包围外键名。 - **查看外键**: - 使用`SHOW CREATE TABLE table_name;`命令查看表结构,可以看到外键的定义。 - **删除外键**: - 如果定义了外键名,则可以...
为了解决这个问题,我们可以利用MySQL中的一个系统变量`FOREIGN_KEY_CHECKS`来临时禁用外键约束检查。 首先,你可以通过以下SQL查询生成所有表的DROP语句,只需将`MyDatabaseName`替换为你的实际数据库名: ```sql...
这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。 一、问题的提出 创建两个表: ...
需求是这样的,一个资源表有分类r_class_id(分类表id对应的外键) 创建者r_up_creator(用户表id对应的外键) 审核者r_ver_id (用户表id对应的外键),这时候该怎么将其都查询出来呢? 首先用左连接: select ...
4. **创建外键的SQL语法**: ```sql CREATE TABLE child_table ( ... child_key_column datatype, FOREIGN KEY (child_key_column) REFERENCES parent_table(parent_key_column) ON DELETE {RESTRICT | ...
### MySQL常见错误及解决方案 #### 问题1:使用MySQL CommandLine Client,出现闪一下然后窗口就消失的情况,如何解决? 在初次使用MySQL CommandLine Client时,可能会遇到一个常见的问题:客户端窗口短暂显示后...
在MySQL中创建外键时,可能会遇到“Can't create table”这样的错误,这通常是由于多种原因造成的。以下是一些常见的导致外键创建失败的原因及其解决方法: 1. 字段类型和大小不匹配:确保主键和外键字段的类型完全...