【发布时间】:2019-11-30 02:03:12
【问题描述】:
CREATE TABLE category(
id int(10) NOT NULL AUTO_INCREMENT,
entity_type varchar(32),
entity_id INT(10),
PRIMARY KEY (id),
FOREIGN KEY (entity_id)
)
我收到一个错误
您的 SQL 语法有错误;似乎错误就在附近:' entity_id INT(10),主键(id),外键(entity_id))'在 第 3 行
我无法理解如何解决它。
而当我添加这个时
CREATE TABLE `Image` (
`Id [PK]` int (10) ,
`EntityType` varchar(32),
`EntityId [FK]` int(10)
);
上面的代码修复了错误
下面是给出外键约束的代码,即使我尝试先创建图像和类别表,然后在用户表中添加与它的关系
$sql_image = 'CREATE TABLE IF NOT EXISTS image (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
entity_type VARCHAR(32) NOT NULL,
entity_id INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id) )';
if ($db->database->createTable($sql_image)) { echo "Image Table Created Successfully"; }
$sql_category = 'CREATE TABLE IF NOT EXISTS category (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
entity_type VARCHAR(32) NOT NULL,
entity_id INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id) );';
if ($db->database->createTable($sql_category)) {
echo "Category Table Created Successfully"; }
$sql_user = 'Create TABLE IF NOT EXISTS user(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name varchar(255),
last_name varchar(255),
email varchar(255),
category int(10),
status boolean,
user_profile_photo int(10),
FOREIGN KEY (user_profile_photo) references image(entity_id),
FOREIGN KEY (category) references category(entity_id) );';
if ($db->database->createTable($sql_user)) {
echo "User Table Created Successfully"; }
【问题讨论】:
-
FOREIGN KEY (entity_id) REFERENCES Entity (id),这里Entity是关系表名,(id)是关系表中的列。 -
如果你去掉', FOREIGN KEY (entity_id)',它会起作用吗?
-
@Strawberry 是的,它可以在没有外键的情况下工作
-
如有疑问请阅读手册dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html。顺便说一句,外键只能引用 1 个表。
标签: php mysql create-table