我无法弄清楚如何在我的示例中使用on delete cascade
。
CREATE TABLE `users` (
`login` varchar(16) NOT NULL,
`password` varchar(16) NOT NULL,
PRIMARY KEY (`login`),
UNIQUE KEY `login` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `employees` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) NOT NULL,
`Surname` varchar(25) NOT NULL,
`Birthday` date NOT NULL,
`Adres` varchar(50) NOT NULL,
`Telephone` varchar(25) NOT NULL,
`login` varchar(16) DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `login` (`login`),
CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`login`) REFERENCES `users` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
一个表存储有关员工的信息,如果他有帐户(登录),则会有另一个包含登录名和密码的表。
我的目标:
Users
表中的唯一记录),因此Employees.Login
不应该使用NOT NULL进行限制。Users
中添加新用户,然后将其分配给某个员工。前两个已经完成。我现在不知道怎么做 3 。
答案 0 :(得分:1)
您已将CONSTRAINT置于错误的CREATE TABLE语句中。它继续引用表"users"
,因为这是您希望在删除另一个表中的行时自动删除的表。
您希望在"ID"
表中放置一个可为空的"users"
,该表是唯一的,并且是"employees"
的外键。
答案 1 :(得分:0)
使用此查询:
CREATE TABLE `users` (
`login` varchar(16) NOT NULL,
`password` varchar(16) NOT NULL,
PRIMARY KEY (`login`),
UNIQUE KEY `login` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `employees` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) NOT NULL,
`Surname` varchar(25) NOT NULL,
`Birthday` date NOT NULL,
`Adres` varchar(50) NOT NULL,
`Telephone` varchar(25) NOT NULL,
`login` varchar(16) DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `login` (`login`),
CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`login`) REFERENCES `users` (`login`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
答案 2 :(得分:0)
基于 Hammerite 的建议,现在我的表格定义如下:
CREATE TABLE `employees` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) NOT NULL,
`Surname` varchar(25) NOT NULL,
`Birthday` date NOT NULL,
`Adres` varchar(50) NOT NULL,
`Telephone` varchar(25) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `users` (
`login` varchar(16) NOT NULL,
`password` varchar(16) NOT NULL,
`employee_id` int(11) NOT NULL,
PRIMARY KEY (`login`),
UNIQUE KEY `login` (`login`),
UNIQUE KEY `employee_id` (`employee_id`),
CONSTRAINT `users_ibfk_1` FOREIGN KEY (`employee_id`) REFERENCES `employees` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
login
表employees
列
employee_id
表格中创建了另一列User
。它是唯一的外键,不能为空,因为我不想要任何人都不使用的用户帐户。现在如果我这样做:
INSERT INTO users VALUES('login123','password',2);
然后我执行此操作后将删除此行:
DELETE FROM employees WHERE id=2;
我确信我需要在employees
表到users
表中进行一些引用,这就是为什么我没有考虑这样的解决方案。
谢谢!