数据库没有拿桌子

时间:2013-04-22 04:41:56

标签: php mysql

我在phpmysql.i中比较新,需要一些帮助...

我在windows7.server版本中使用wamp服务器是2.2.22而php版本是5.3.13.我的数据库名称是db_attendance1。我有两个表usersleave。在用户表中我有以下列

empID(int)
username(varchar)
password(varchar)
mac(varchar)
ip(varchar)

在离开表格中我有以下列

lid(int)
empname(varchar)
username(varchar)
nod(int)
sdate(date)
edate(date)
reason(varchar)
action(varchar)

现在我想在离开表中使用empID。我可以使用它。我必须说我已经应用了一个代码,但它不能正常工作。它给出了以下错误..

1005 - 无法创建表'db_attendance1.leave'(错误号:150)(详情......)

详细介绍了以下内容..

InnoDB文档

支持事务,行级锁定和外键

[变量|缓冲池| InnoDB状态]

和代码

create table `leave`(
lid INT NOT NULL AUTO_INCREMENT,
empID INT,
empname VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
nod INT NOT NULL,
sdate DATE,
edate DATE,
reason VARCHAR(255) NOT NULL,
PRIMARY KEY(lid),
FOREIGN KEY(empID) REFERENCES users(empID)
);  

所以有什么不对......请帮帮我..

4 个答案:

答案 0 :(得分:0)

create table users(

empID INT,
PRIMARY KEY(empID) /*<<< ADD THIS */
);
create table `leave`(
lid INT NOT NULL AUTO_INCREMENT,
empID INT,
empname VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
nod INT NOT NULL,
sdate DATE,
edate DATE,
reason VARCHAR(255) NOT NULL,
PRIMARY KEY(lid),
FOREIGN KEY(empID) REFERENCES users(empID)
);  

答案 1 :(得分:0)

在外键声明之前使用INDEX(empID)

答案 2 :(得分:0)

尝试此操作来修复错误:

create table `leave`(
`lid` bigint(20) NOT NULL AUTO_INCREMENT,
`empID` INT(11),
`empname` VARCHAR(255) NOT NULL,
`username` VARCHAR(255) NOT NULL,
`nod` INT(11) NOT NULL,
`sdate` DATE,
`edate` DATE,
`reason` VARCHAR(255) NOT NULL,
PRIMARY KEY(`lid`),
FOREIGN KEY(`empID`) REFERENCES users(`empID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=311 ;

答案 3 :(得分:0)

errno: 150是外键约束错误。您可以在失败的SHOW ENGINE INNODB STATUS失败后立即在同一连接上发出查询CREATE TABLE,以获取更多详细信息。

需要注意的事项:

  1. 父表和属性是否存在? (users.empid必须首先存在)
  2. 父级和子级属性是否具有相同的确切数据类型? (在这种情况下签署了INT)
  3. 父表和子表中的属性是否有索引(正常,唯一或主键)?