天道酬勤,学无止境

当我收到外键约束错误时,是否可以“捕获”MySQL 中的无效值?(Is it possible to "catch" the invalid value in MySQL when I get a foreign key constraint error?)

问题

我正在将一个约 15 万行的 CSV 文件导入到 MySQL (InnoDB) 表中。

在导入过程中的某个时刻,由于外键约束错误而失败。

它显示故障发生在哪一列:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails 
(`db`.`table`, CONSTRAINT `fk` FOREIGN KEY (`otherTableId`) REFERENCES `otherTable`
(`otherTableId`))

是否有可能“抓住”那个价值是什么?

我还没有尝试任何东西,因为我不知道该尝试什么。 :P


编辑:

啊——所以我在 MySQL 文档中找到了以下命令:

SHOW ENGINE INNODB STATUS\G

我从该命令中找到了以下信息:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2014-01-22 16:27:26 2afaf98b8940 Transaction:
TRANSACTION 85952, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
4 lock struct(s), heap size 376, 1 row lock(s), undo log entries 1
MySQL thread id 944, OS thread handle 0x2afaf98b8940, query id 66223 System lock
{{QUERY}}
Foreign key constraint fails for table {TABLE INFO}:
,
  CONSTRAINT `fk` FOREIGN KEY (`Id`) REFERENCES `table` (`id`)
Trying to add in child table, in index `fk` tuple:
DATA TUPLE: 2 fields;
 0: len 11; hex 4163636573736f72794964; asc AccessoryId;;
 1: len 4; hex 80000003; asc     ;;

But in parent table `db`.`table`, in index `PRIMARY`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 5; compact format; info bits 0
 0: len 6; hex 46494c544552; asc FILTER;;
 1: len 6; hex 000000007300; asc     s ;;
 2: len 7; hex fb000001b01476; asc       v;;
 3: len 1; hex 46; asc F;;
 4: len 9; hex 756e646566696e6564; asc undefined;;

我在这里寻找的是:

Trying to add in child table, in index `fk` tuple:
DATA TUPLE: 2 fields;
 0: len 11; hex 4163636573736f72794964; asc AccessoryId;;
 1: len 4; hex 80000003; asc     ;;

我不知道 'AccessoryId' 之前的 'asc' 是什么意思,但这让我看到我没有忽略 CSV 的第一行。


编辑2:

啊——我想了一会儿“asc”代表什么,因为前面有十六进制,我认为它的意思是“ASCII”

我将 '4163636573736f72794964' 转换为 ASCII 并得到了“AccessoryId”,所以这只是我试图导入的文本的十六进制值。


所以答案是:

SHOW ENGINE INNODB STATUS\G

并搜索标题为: LATEST FOREIGN KEY ERROR

您可以从那里获取您的信息。 如果有人知道检索此信息的更好或自动方式,我会接受它作为答案。

回答1

不幸的是,没有比从SHOW ENGINE INNODB STATUSLATEST FOREIGN KEY ERROR部分获得外键错误更好的方法了。 列信息打印为例如:

Trying to add in child table, in index `fk` tuple:
DATA TUPLE: 2 fields;
 0: len 11; hex 4163636573736f72794964; asc AccessoryId;;
 1: len 4; hex 80000003; asc     ;;

这是从索引 ( fk ) 打印完整的列集,正如您猜测的那样,格式是:

<column index>:
  len <length of bytes stored>;
  hex <hex representation of bytes>;
  asc <ascii representation of bytes>;;

更不幸的是,InnoDB 对 MySQL 的列类型如何存储以提供合理的打印表示了解得不够多,因此某些值有点“奇怪”,例如80000003是为整数 3 存储的字节的十六进制表示( InnoDB 在内部翻转高位)。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • MySQL错误1215:无法添加外键约束(MySQL Error 1215: Cannot add foreign key constraint)
    问题 我正在尝试将新架构向前工程到我的数据库服务器上,但是我不知道为什么会收到此错误。 我试图在这里搜索答案,但是我发现的所有内容都说过将数据库引擎设置为Innodb或确保要用作外键的键是它们自己表中的主键。 如果我没记错的话,我都做过这两件事。 你们还有其他帮助吗? Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint -- ----------------------------------------------------- -- Table `Alternative_Pathways`.`Clients_has_Staff` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` ( `Clients_Case_Number` INT NOT NULL , `Staff_Emp_ID` INT NOT NULL , PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) , INDEX `fk_Clients_has
  • 外键在MySQL中不起作用:为什么我要插入外列中没有的值?(Foreign key not working in MySQL: Why can I INSERT a value that's not in the foreign column?)
    问题 我已经在MySQL中创建了一个表: CREATE TABLE actions ( A_id int NOT NULL AUTO_INCREMENT, type ENUM('rate','report','submit','edit','delete') NOT NULL, Q_id int NOT NULL, U_id int NOT NULL, date DATE NOT NULL, time TIME NOT NULL, rate tinyint(1), PRIMARY KEY (A_id), CONSTRAINT fk_Question FOREIGN KEY (Q_id) REFERENCES questions(P_id), CONSTRAINT fk_User FOREIGN KEY (U_id) REFERENCES users(P_id)); 这样就创建了我想要的表(尽管“ DESCRIBE actions;”命令向我显示外键是MUL类型的键,但我不确定这是什么意思)。 但是,当我尝试输入问题或用户表中不存在的Q_id或U_id时, MySQL仍然允许这些值。 我做错了什么? 如何防止带有外键的表接受无效数据? 更新1 如果我在末尾添加TYPE=InnoDB ,则会收到错误消息: 错误1005(HY000):无法创建表“ ./quotes/actions
  • 错误1452:无法添加或更新子行:外键约束失败(ERROR 1452: Cannot add or update a child row: a foreign key constraint fails)
    问题 我已经在MySQL Workbench中创建了表,如下所示: 订单表: CREATE TABLE Ordre ( OrdreID INT NOT NULL, OrdreDato DATE DEFAULT NULL, KundeID INT DEFAULT NULL, CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID), CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID) ) ENGINE = InnoDB; 产品表: CREATE TABLE Produkt ( ProduktID INT NOT NULL, ProduktBeskrivelse VARCHAR(100) DEFAULT NULL, ProduktFarge VARCHAR(20) DEFAULT NULL, Enhetpris INT DEFAULT NULL, CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID) ) ENGINE = InnoDB; 和ORDERLINE表: CREATE TABLE Ordrelinje ( Ordre INT NOT NULL, Produkt INT NOT NULL, AntallBestilt INT
  • MySQL:错误1215(HY000):无法添加外键约束(MySQL : ERROR 1215 (HY000): Cannot add foreign key constraint)
    问题 我已经阅读了Silberschatz的数据库系统概念,第6版。 我将在MySQL的OS X上实现第2章所示的大学数据库系统。 但是我在创建表格course遇到了麻烦。 餐桌department看起来像 mysql> select * from department -> ; +------------+----------+-----------+ | dept_name | building | budget | +------------+----------+-----------+ | Biology | Watson | 90000.00 | | Comp. Sci. | Taylor | 100000.00 | | Elec. Eng. | Taylor | 85000.00 | | Finance | Painter | 120000.00 | | History | Painter | 50000.00 | | Music | Packard | 80000.00 | | Physics | Watson | 70000.00 | +------------+----------+-----------+ mysql> show columns from department -> ; +-----------+---------------+------+-
  • MySQL外键错误1005 errno 150主键作为外键(MySQL Foreign Key Error 1005 errno 150 primary key as foreign key)
    问题 我正在使用MySQL Workbench制作一个小型数据库。 我有一个名为“ Immobili”的主表,它具有由四列组成的主键:(Comune,Via,Civico,Immobile)。 我还有其他三个表,它们具有相同的主键(Comune,Via,Civico,Immobile),但是这些字段也引用了表Immobili。 第一个问题:我能否制作同时也是外键的主键? 第二个问题:当我尝试导出更改时,它说: Executing SQL script in server # ERROR: Error 1005: Can't create table 'dbimmobili.condoni' (errno: 150) CREATE TABLE IF NOT EXISTS `dbimmobili`.`Condoni` ( `ComuneImmobile` VARCHAR(50) NOT NULL , `ViaImmobile` VARCHAR(50) NOT NULL , `CivicoImmobile` VARCHAR(5) NOT NULL , `InternoImmobile` VARCHAR(3) NOT NULL , `ProtocolloNumero` VARCHAR(15) NULL , `DataRichiestaSanatoria` DATE NULL ,
  • 错误:删除表违反外键约束。 仍然从表中引用键ID(许多)(ERROR: delete on table violates foreign key constraint. Key id is still referenced from table (many))
    问题 我正在使用Rails和PostgreSQL,并且正在建立基本的一对多关系,其中一个Auction具有很多Bid 。 但是,当我尝试删除拍卖(具有出价)时,出现以下错误: 错误:表“拍卖”上的更新或删除违反了表“出价”上的外键约束“ fk_rails_43e9021cbf”。 详细信息:仍从表“出价”中引用键(id)=(1)。 删除没有出价的拍卖不会出错。 令我感到困惑的部分是在我的Auction模型中,我有: has_many :bids, dependent: :destroy 由于我有一个从属的destroy子句,为什么仍然出现此错误? 编辑:我尝试删除整个数据库,然后重新创建/重新迁移所有内容-仍然会收到相同的错误。 回答1 在Rails v4.2中,您可以执行以下操作: 创建迁移以更新外键 20160321165946_update_foreign_key.rb class UpdateForeignKey < ActiveRecord::Migration def change # remove the old foreign_key remove_foreign_key :posts, :users # add the new foreign_key add_foreign_key :posts, :users, on_delete: :cascade end
  • MySQL:无法建立表格(错误编号:150)(MySQL: Can't create table (errno: 150))
    问题 我正在尝试导入.sql文件及其在创建表时失败。 这是失败的查询: CREATE TABLE `data` ( `id` int(10) unsigned NOT NULL, `name` varchar(100) NOT NULL, `value` varchar(15) NOT NULL, UNIQUE KEY `id` (`id`,`name`), CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 我从同一数据库中导出.sql,删除了所有表,现在我试图导入它,为什么会失败? MySQL:无法建立表格'./dbname/data.frm'(错误号:150) 回答1 从MySQL-外键约束文档: 如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。 如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。 如果不满足这些条件,MySQL将返回错误1005,并在错误消息中引用错误150,这意味着未正确形成外键约束。 同样,如果由于错误150而导致ALTER TABLE失败
  • MySQL错误1452-无法添加或更新子行:外键约束失败(Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails)
    问题 我有一个奇怪的问题。 我正在尝试向一个引用另一个表的表添加外键,但是由于某种原因它失败了。 以我对MySQL的有限了解,唯一可能令人怀疑的是,在另一个表上有一个外键引用了我要引用的表。 我对两个表都进行了SHOW CREATE TABLE查询, sourcecodes_tags是带有外键的表, sourcecodes是被引用的表。 CREATE TABLE `sourcecodes` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) unsigned NOT NULL, `language_id` int(11) unsigned NOT NULL, `category_id` int(11) unsigned NOT NULL, `title` varchar(40) CHARACTER SET utf8 NOT NULL, `description` text CHARACTER SET utf8 NOT NULL, `views` int(11) unsigned NOT NULL, `downloads` int(11) unsigned NOT NULL, `time_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON
  • 假外键约束失败(Bogus foreign key constraint fail)
    问题 我收到此错误消息: 第40行的错误1217(23000):无法删除或更新父行:外键约束失败 ...当我尝试放一张桌子时: DROP TABLE IF EXISTS `area`; ...定义如下: CREATE TABLE `area` ( `area_id` char(3) COLLATE utf8_spanish_ci NOT NULL, `nombre_area` varchar(30) COLLATE utf8_spanish_ci NOT NULL, `descripcion_area` varchar(100) COLLATE utf8_spanish_ci NOT NULL, PRIMARY KEY (`area_id`), UNIQUE KEY `nombre_area_UNIQUE` (`nombre_area`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; 有趣的是,我已经删除了模式中具有针对area外键的所有其他表。 实际上,除了area表外,数据库是空的。 如果数据库中没有其他对象,怎么可能会有子行? 据我所知,InnoDB不允许在其他模式上使用外键,对吗? (我什至可以将RENAME TABLE area TO something_else运行RENAME TABLE
  • 使用Laravel模式构建和外键“常规错误:1005无法创建表”(“General error: 1005 Can't create table” Using Laravel Schema Build and Foreign Keys)
    问题 本质上,我和这个家伙有同样的问题,要减去表前缀。 因为我没有表前缀,所以他的修复不起作用。 http://forums.laravel.com/viewtopic.php?id=972 我正在尝试使用Laravel的Schema Builder来构建一个表,如下所示: Schema::create('lessons', function($table) { $table->increments('id'); $table->string('title')->nullable(); $table->string('summary')->nullable(); $table->timestamps(); }); Schema::create('tutorials', function($table) { $table->increments('id'); $table->integer('author'); $table->integer('lesson'); $table->string('title')->nullable(); $table->string('summary')->nullable(); $table->string('tagline')->nullable(); $table->text('content')->nullable(); $table-
  • 无法删除表:外键约束失败(Can't drop table: A foreign key constraint fails)
    问题 在MySQL中,我想删除一个表。 我做了很多尝试,但始终收到错误消息,即不能删除名为bericht的表。 这是我得到的错误: #1217-无法删除或更新父行:外键约束失败 我该如何放下这张桌子? 回答1 这应该可以解决问题: SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1; 正如其他人指出的那样,即使这是问题中要问的内容,这也几乎永远不是您想要的。 一个更安全的解决方案是删除依赖于表bericht删除之前bericht 。 请参阅CloudyMarble答案以了解有关操作方法。 当我不想或无法删除和重新创建数据库本身时,我在帖子中使用bash和方法删除数据库中的所有表。 当其他表对您要删除的表具有外键约束并且您使用的是InnoDB数据库引擎时,会发生#1217错误。 此解决方案暂时禁用检查约束,然后重新启用它们。 阅读文档以获取更多信息。 确保根据bericht删除表中的外键约束和字段,否则可能会使数据库处于损坏状态。 回答2 试试这个: SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'YourTable'; 这应该为您提供哪些表具有要删除的表的引用,一旦删除这些引用
  • MySQL 错误号 121(MySQL errorno 121)
    问题 我在 MySQL 创建中收到此错误。 我正在做: CREATE TABLE `blogReply` ( `Id` INT(24) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key of This Table', `blogId` INT(24) NOT NULL COMMENT 'Blog where this reply was posted', `userId` INT(24) NULL COMMENT 'User the blog was posted by', `name` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Name of the user that the reply was posted by', `email` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Email of the user that the reply was posted by', `http` VARCHAR(300) NULL DEFAULT 'Unknown' COMMENT 'The Webaddress of the user that the reply was posted by', `message` TEXT NOT
  • 在 Django 迁移期间收到“ValueError: Found wrong number (0) of constraints for ...”(Received “ValueError: Found wrong number (0) of constraints for …” during Django migration)
    问题 在使用 Django 1.7 迁移时,我遇到了一个在开发中有效但在生产中无效的迁移: ValueError: Found wrong number (0) of constraints for table_name(a, b, c, d) 这是由AlterUniqueTogether规则引起的: migrations.AlterUniqueTogether( name='table_name', unique_together=set([('a', 'b')]), ) 阅读 Django 错误数据库中的错误等,似乎是关于数据库中现有的unique_together与迁移历史不匹配。 如何解决此错误并完成迁移? 回答1 (Postgres 和 MySQL 答案) 如果您查看实际表(使用\d table_name )并查看索引,您将找到唯一约束的条目。 这就是 Django 试图找到并删除的。 但它找不到完全匹配的。 例如, "table_name_...6cf2a9c6e98cbd0d_uniq" UNIQUE CONSTRAINT, btree (d, a, b, c) 在我的情况下,键(d, a, b, c)的顺序与它要删除的约束(a, b, c, d)不匹配。 我回到我的迁移历史并更改了原始的AlterUniqueTogether以匹配数据库中的实际顺序。
  • What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?(What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?)
    问题 我在mysql中尝试过: mysql> alter table region drop column country_id; 并得到了: ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to './product/region' (errno: 150) 有任何想法吗? 外键东西? 回答1 如果您的表使用InnoDB引擎,通常会出现此错误。 在这种情况下,您将必须删除外键,然后执行alter table并删除列。 但是棘手的部分是您不能使用列名来删除外键,而必须找到用于对其进行索引的名称。 为此,请发出以下选择: SHOW CREATE TABLE区域; 这应该显示索引的名称,如下所示: CONSTRAINT region_ibfk_1 FOREIGN KEY( country_id )参考country ( id )开删除无操作更新无操作 现在只需发出: alter table region drop外键region_ibfk_1 ; 最后是: 更改表区域放置列country_id; 而且你很好走! 回答2 这确实是一个外键错误,您可以使用perror查明: shell$ perror 150 MySQL error code 150: Foreign key constraint is
  • mysql外键约束格式错误(mysql Foreign key constraint is incorrectly formed error)
    问题 我有两个表,当我将FK放在IDFromTable1到table1 ID上时, table1是具有列ID的父表和具有列IDFromTable1 table2 (不是实际名称),我得到错误Foreign key constraint is incorrectly formed error 。 我想删除表2记录,如果table1记录被删除。 谢谢你的帮助 ALTER TABLE `table2` ADD CONSTRAINT `FK1` FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`) ON UPDATE CASCADE ON DELETE CASCADE; 让我知道是否需要其他信息。 我是mysql新手 回答1 我在HeidiSQL中遇到了同样的问题。 您收到的错误非常神秘。 我的问题最终是外键列和引用列的类型或长度不同。 外键SMALLINT(5) UNSIGNED ,而引用SMALLINT(5) UNSIGNED INT(10) UNSIGNED 。 一旦将它们都设置为相同的确切类型,外键创建就可以完美地工作了。 回答2 使用MyISAM引擎创建父表时,我遇到了同样的问题。 这是一个愚蠢的错误,我已修复: ALTER TABLE parent_table ENGINE=InnoDB; 回答3 确保列是相同的
  • 【MySQL】企业共享库:MySQL常见的错误代码
    145 :文件无法打开。 1005:MYSQL创建表失败 1006:MYSQL创建数据库失败   1007:MYSQL数据库已存在,创建数据库失败 1008:MYSQL数据库不存在,删除数据库失败   1009:MYSQL不能删除数据库文件导致删除数据库失败  1010:MYSQL不能删除数据目录导致删除数据库失败1011:MYSQL删除数据库文件失败 1012:MYSQL不能读取系统表中的记录 1016:文件无法打开,使用后台修复或者使用 phpmyadmin 进行修复。 Quote: 开始=>所有程序=>附件=>命令提示符输入 mysql 所在硬盘盘符 cd mysql 所在目录cd bin 输入 myisamchk -f D:usr/local/mysql/data/bbs/PW_members.MYI ps : D:usr/local/mysql/data/bbs 是你论坛数据库的路径 -f 根据具体情况选择,一般也可以选择 -r 注意你的 系统C盘或放数据库的硬盘空间是否足够,一般小于 1G 很容易出现错误。 或用mysqlcheck命令进行修复。具体的方法:利用命令行进入mysql/bin目录,执行 mysqlcheck -o -r phpwind -uroot -p 其中phpwind是你数据库的名称,root是你的数据库用户名,然后会提示你输入密码
  • Java + MySQL完整性违规处理(Java + MySQL integrity violation handling)
    问题 我使用JDBC(MySQL数据库)编写Java程序。 当我违反mysql完整性(尝试插入相同的主键值)时,我捕获了SQL异常。 我应该用它永远不会发生的方式编写它(首先是布尔函数检查主键值是否不在数据库中,然后再调用insert),还是可以通过异常处理它呢? 例子 : catch (SQLException ex) {ex.printStackTrace(); showSomeErrorDialog(); } 回答1 实际上,基本上有两种方法可以实现此目的: 在同一事务内插入-之前测试记录是否存在。 确定是否钓到的的SQLException#getSQLState() SQLException开头23这是一个约束违反按照SQL规范。 也就是说,它可能是由比“仅仅”违反约束更多的因素引起的。 您不应将每个SQLException都修改为约束违例。 public static boolean isConstraintViolation(SQLException e) { return e.getSQLState().startsWith("23"); } 我选择第一个,因为它在语义上更正确。 实际上,这并非例外情况。 您即知道它可能会发生。 但是,在繁重的并发环境中,如果事务未同步(可能不知不觉或无法优化性能),则可能会失败。 然后,您可能想确定异常。 也就是说
  • InnoDB mySQL无法设置“ ON DELETE SET DEFAULT”。如何设置?(InnoDB mySQL unable to set "ON DELETE SET DEFAULT'. How to set?)
    问题 我正在尝试创建一个名为EMPLOYEE的表。 当我使用以下语句而不使用“ ON DELETE SET DEFAULT”时,它正在工作。 这是我在“ ON DELETE SET DEFAULT”中得到的错误: ERROR 1005 (HY000): Can't create table 'COMPANY.EMPLOYEE' (errno: 150) 这是DDL CREATE TABLE EMPLOYEE ( Fname VARCHAR(15) NOT NULL, Minit CHAR, Lname VARCHAR(15) NOT NULL, Ssn CHAR(9) NOT NULL DEFAULT '123456789', Bdate DATE, ADDRESS VARCHAR(30), Sex CHAR, Salary DECIMAL(10,2), Super_Ssn CHAR(9) NOT NULL DEFAULT '123456789', Dno INT NOT NULL DEFAULT -99, PRIMARY KEY (Ssn), FOREIGN KEY (Super_Ssn) REFERENCES COMPANY.EMPLOYEE(Ssn) ON DELETE SET DEFAULT ON UPDATE CASCADE )ENGINE=InnoDB; 请帮我!!!
  • 无法启用约束。 一或多个行包含违反非空,唯一或外键约束的值(Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints)
    问题 我进行了外部联接并在informix数据库中成功执行,但是我的代码中出现以下异常: DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat); 无法启用约束。 一或多个行包含违反非null,唯一或外键约束的值。 我知道问题所在,但不知道如何解决。 我进行外部联接的第二个表包含一个复合主键,在先前的外部联接查询中该主键为null。 编辑: SELECT UNIQUE a.crs_e, a.crs_e || '/ ' || a.crst crs_name, b.period, b.crscls, c.crsday, c.from_lect, c.to_lect, c.to_lect - c.from_lect + 1 Subtraction, c.lect_kind, e.eval, e.batch_no, e.crsnum, e.lect_code, e.prof_course FROM rlm1course a, rfc14crsgrp b, ckj1table c, mnltablelectev d, OUTER(cc1assiscrseval e) WHERE a.crsnum = b.crsnum AND b.crsnum = c.crsnum AND b.crscls = c.crscls AND b
  • 错误代码:1005。无法创建表“…”(错误号:150)(Error Code: 1005. Can't create table '…' (errno: 150))
    问题 我在Internet上搜索了此问题的解决方案,并检查了Stack Overflow问题,但是没有一种解决方案适合我的情况。 我想创建一个从表sira_no到metal_kod的外键。 ALTER TABLE sira_no ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU) REFERENCES metal_kod(METAL_KODU) ON DELETE SET NULL ON UPDATE SET NULL ; 该脚本返回: Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150) 我尝试将索引添加到被引用的表中: CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU); 我在两个表(字符集和排序规则)上都检查了METAL_KODU,但找不到该问题的解决方案。 我该如何解决这个问题? 这是metal_kod表: METAL_KODU varchar(4) NO PRI DURUM bit(1) NO METAL_ISMI varchar(30) NO AYAR_YOGUNLUK smallint(6) YES 100 回答1 错误代码:1005-您的代码中的主键引用错误