使用SQL语法连接数据库中的表

时间:2017-07-03 15:05:14

标签: mysql

我正在尝试连接数据库中的两个表。 我有表用户和表权限。

用户表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) DEFAULT NULL,
  `last_name` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

当局表:

CREATE TABLE `authorities` (
  `authorities_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `authorities` varchar(45) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,

  PRIMARY KEY (`authorities_id`),
  CONSTRAINT FOREIGN KEY(`user_id`) REFERENCES user(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

表格是这样创建的。在创建权限表时,我收到了无法创建表的错误。我做错了什么?

1 个答案:

答案 0 :(得分:1)

使用以下代码,不使用“CONSTRAINT”

CREATE TABLE `authorities` (
  `authorities_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `authorities` varchar(45) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,

  PRIMARY KEY (`authorities_id`),
  FOREIGN KEY(`user_id`) REFERENCES user(`id`)
   ON DELETE CASCADE 

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

为CONSTRAINT命名

CREATE TABLE `authorities` (
  `authorities_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `authorities` varchar(45) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,

  PRIMARY KEY (`authorities_id`),
  CONSTRAINT `fk_authorities_user` FOREIGN KEY(`user_id`) REFERENCES user(`id`)
  ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

link

INNODB中的另一个问题是你不能使用“ON DELETE SET DEFAULT”你必须使用“ON DELETE CASCADE”或“ON DELETE SET NULL”