Php 尝试创建表时无法修复mysql中的语法错误
我犯了一个错误 您的SQL语法有错误;似乎错误就在附近:' 实体id INT(10)、主键(id)、外键(实体id))'位于 第3行 我无法理解如何修理它 而当我加上这个Php 尝试创建表时无法修复mysql中的语法错误,php,mysql,create-table,Php,Mysql,Create Table,我犯了一个错误 您的SQL语法有错误;似乎错误就在附近:' 实体id INT(10)、主键(id)、外键(实体id))'位于 第3行 我无法理解如何修理它 而当我加上这个 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) ) 上面的代码修
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)
)
上面的代码修复了错误
下面的代码给出了外键约束,即使我尝试先创建图像和类别表,然后在用户表中向其添加关系
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"; }
如果希望添加外键,则需要定义引用表的含义,即
实体\u id
所属的表
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)'
FOREIGN KEY (product_category, product_id)
REFERENCES second_table(category, id)
我可以看到2个错误
1) “MySQL需要外键和引用键的索引”。如果不需要,MySQL将在引用表(用户)上创建键,但必须在实体_id(图像、类别)上的引用表上创建键
2) '外键和引用键中的相应列必须具有相似的数据类型。整数类型的大小和符号必须相同'
看
这将合成并生成表(您需要决定键k1和k2的类型):-
- 即使表具有相同的排序规则,列也可能具有不同的排序规则
$sql\u image='如果不存在,则创建表映像(
id INT(10)UNSIGNED NOT NULL AUTO_INCREMENT,//INT(10)UNSIGNED应该与下面用户表中的相同。
实体类型VARCHAR(32)不为空,
主键(id)
)';
如果($db->database->createTable($sql\u image)){
echo“已成功创建图像表
”;
}
$sql_category='创建表(如果不存在)类别(
id INT(10)UNSIGNED NOT NULL AUTO_INCREMENT,//INT(10)UNSIGNED应该与下面用户表中的相同。
实体类型VARCHAR(32)不为空,
主键(id)
);';
如果($db->database->createTable($sql\U类别)){
echo“类别表创建成功
”;
}
$sql_user='如果用户不存在,则创建表(
id INT(10)非空自动增量主键,
名字varchar(255),
姓氏varchar(255),
电子邮件varchar(255),
类别int(10)UNSIGNED NOT NULL,//int(10)UNSIGNED应该是类别表中的匹配id。
状态布尔值,
用户配置文件照片int(10)未签名非空,
外键(用户配置文件\照片)引用图像(id),
外键(类别)引用类别(id)
);';
如果($db->database->createTable($sql\u user)){
echo“已成功创建用户表
”;
}
外键(实体id)引用实体(id)
,这里的实体
是关系表名称,(id)
是关系表中的列。如果删除',外键(实体id)',它工作吗?@是的,它工作时没有外键如果有疑问,请阅读手册。顺便说一句,外键只能引用1个表。我有两个表用户和博客引用实体\u id我如何使用多个references@harshal,只需写入外键行,然后在第二行更改表。请参阅我的文章,我编辑了itI,但出现上述错误:#1215-无法添加外键约束可能是因为表用户和博客未创建。否,它也不能与一个外键一起使用,因此可能需要先添加表,然后创建另一个具有此外键约束的表
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) REFERENCES Entity(entity_id)
)
drop table if exists us;
drop table if exists i;
drop table if exists c;
CREATE TABLE IF NOT EXISTS i (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
entity_type VARCHAR(32) NOT NULL,
entity_id INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id) );
alter table i
add key k1(entity_id);
CREATE TABLE IF NOT EXISTS c (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
entity_type VARCHAR(32) NOT NULL,
entity_id INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id) );
alter table c
add key k2(entity_id);
Create TABLE IF NOT EXISTS us(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name varchar(255),
last_name varchar(255),
email varchar(255),
category int(10) unsigned,
status boolean,
user_profile_photo int(10) unsigned,
FOREIGN KEY fk1(user_profile_photo) references i(entity_id),
FOREIGN KEY (category) references c(entity_id)
);
$sql_image = 'CREATE TABLE IF NOT EXISTS image (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, // int(10) UNSIGNED should be same as that in user table below.
entity_type VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
)';
if ($db->database->createTable($sql_image)) {
echo "Image Table Created Successfully<br><br>";
}
$sql_category = 'CREATE TABLE IF NOT EXISTS category (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, // int(10) UNSIGNED should be same as that in user table below.
entity_type VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
);';
if ($db->database->createTable($sql_category)) {
echo "Category Table Created Successfully<br><br>";
}
$sql_user = 'CREATE TABLE IF NOT EXISTS user(
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name varchar(255),
last_name varchar(255),
email varchar(255),
category int(10) UNSIGNED NOT NULL, //int(10) UNSIGNED should be match id from category table.
status boolean,
user_profile_photo int(10) UNSIGNED NOT NULL,
FOREIGN KEY (user_profile_photo) references image(id),
FOREIGN KEY (category) references category(id)
);';
if ($db->database->createTable($sql_user)) {
echo "User Table Created Successfully<br><br>";
}