错误1005(HY000)MySQL错误
我有以下代码:错误1005(HY000)MySQL错误,mysql,Mysql,我有以下代码: CREATE DATABASE IF NOT EXISTS courses; USE 'courses' CREATE TABLE IF NOT EXISTS teachers( id INT(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, addr VARCHAR(255) NOT NULL, phone INT NOT NULL
CREATE DATABASE IF NOT EXISTS courses;
USE 'courses'
CREATE TABLE IF NOT EXISTS teachers(
id INT(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
addr VARCHAR(255) NOT NULL,
phone INT NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS lessons(
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
room TINYINT NOT NULL,
length INT NOT NULL,
lesson_date DATETIME NOT NULL,
teacher INT NOT NULL,
course INT NOT NULL,
FOREIGN KEY(teacher) REFERENCES teachers(id),
FOREIGN KEY(course) REFERENCES courses(id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS courses(
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
title VARCHAR(200) NOT NULL,
length INT NOT NULL,
description TEXT DEFAULT '',
previous INT NOT NULL,
FOREIGN KEY(previous) REFERENCES courses(id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
执行此代码后,我有一个错误:错误1005(HY000)
无法创建表“课程.课程”(错误号:150)
我做错了什么?你有两个问题。第一个很简单:您不能在
课程中创建外键,因为表还不存在,所以表创建失败。要解决此问题,请在课程结束后移动创建课程表
第二个问题是,classes.teacher
列的类型与teacher.id
列的类型不同。只有当列的类型相同,并且您已将teacher.id
定义为INT(10)UNSIGNED
,而lessons.teacher
只是INT
(有符号,隐含长度11),才能创建外键。将课程.教师
列的定义更改为相同类型:
teacher INT(10) UNSIGNED NOT NULL,
外键(课程)引用课程(id)-引用一个尚不存在的表。请使用带有反勾号的“课程”。尚未创建课程
表,它在课程表的外键
部分中引用。尝试交换最后两个表的顺序。您不能在TEXT