错误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