当前位置: 首页 > 面试题库 >

MySQL的。无法创建表格errno 150

刁跃
2023-03-14
问题内容

我必须在MySQL中创建一个包含两个表的数据库,但是该脚本因errno 150(外键问题)而失败。我仔细检查了两个表上的外键字段是否相同,但找不到任何错误。

这是脚本

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

 DROP SCHEMA IF EXISTS `testdb`;
 CREATE SCHEMA IF NOT EXISTS `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
 USE `testdb`;

 DROP TABLE IF EXISTS `testdb`.`table1` ;

 CREATE  TABLE IF NOT EXISTS `testdb`.`table1` (
   `id` INT UNSIGNED NOT NULL ,
   `field1` VARCHAR(50) NULL ,
   PRIMARY KEY (`id`) )

 ENGINE = InnoDB;


 DROP TABLE IF EXISTS `testdb`.`table2` ;

 CREATE  TABLE IF NOT EXISTS `testdb`.`table2` (
   `id` INT NOT NULL AUTO_INCREMENT ,
   `field1` VARCHAR(50) NULL ,
   `date` DATE NULL ,
   `cnt` INT NULL ,
   PRIMARY KEY (`id`) ,
   INDEX `FK_table2_table1` (`field1` ASC) ,
   CONSTRAINT `FK_table2_table1`
   FOREIGN KEY (`field1`)
   REFERENCES `testdb`.`table1` (`field1` )
   ON DELETE NO ACTION
   ON UPDATE NO ACTION)

 ENGINE = InnoDB;

 SET SQL_MODE=@OLD_SQL_MODE;
 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

我已经在Windows和Ubuntu中使用不同版本的MySQL进行了尝试,但无法正常工作。

有任何想法吗?


问题答案:

table1.field1 没有定义索引。

需要对施加FOREIGN KEY约束field1

有了这个:

 CREATE  TABLE IF NOT EXISTS `testdb`.`table1` (
   `id` INT UNSIGNED NOT NULL ,
   `field1` VARCHAR(50) NULL ,
   KEY ix_table1_field1 (field1),
   PRIMARY KEY (`id`) )
 ENGINE = InnoDB;

然后一切都将按预期工作。



 类似资料:
  • 运行时收到此错误。

  • 我在创建sessionFactory对象时遇到问题。我将Hibernate与Maven和MySQL一起使用。怎么修? 日志错误: xml(在src/main/resources中): users.hbm.xml(在src/main/users.hbm.xml中):

  • 问题内容: 我正在尝试导入.sql文件及其在创建表时失败。 这是失败的查询: 我从同一数据库中导出了.sql,删除了所有表,现在我试图导入它,为什么会失败? MySQL:无法建立表格’./dbname/data.frm’(错误号:150) 问题答案: 从MySQL-外键约束文档: 如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引

  • 我刚开始使用hibernate,总是会遇到这样的错误: 错误:HHH000388:不成功:创建表用户(id bigint not null auto_increment,mail varchar(255),passwort varchar(255),primary key(id))错误:从存储引擎获取错误-1 这是我的映射类:

  • 我刚刚创建了一个新模式 我为要创建的表命名,但出现以下错误: 我搜索了错误,发现原因是我键入了保留字,如“order ”,但table2不可能是保留字,我尝试了许多不同的名称,总是得到相同的消息。列名未激活,所以我无法输入列名。

  • 我试图在我的DB2V10.5中创建DB2 MQT表,但是我得到了以下错误消息: 在“begin-of-statement”后面发现意外的令牌“CREATE TABLE T_MQT AS(SELECT ID,COL1,C”。预期的令牌可能包括:“”...SQLCODE=-104,SQLSTATE=42601,DRIVER=4.16.53 SQL代码:-104,SQL状态:42601 下面是我的cre