我只是通过PHP使用命令来做一些MySQL(不使用phpMyAdmin接口来创建表),而且我在创建主键和外键时遇到了一些问题。这是我目前的代码。
<?php
$conectar = mysql_connect("localhost", "root", "") or die (mysql_error());
//mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error());
mysql_select_db("DataBaseTeste") or die(mysql_error());
mysql_query("CREATE TABLE Pergunta("
. "id_Pergunta INT AUTO_INCREMENT,"
. "Descricao TEXT,"
. "Nivel VARCHAR,"
. "PRIMARY KEY(id_Pergunta),"
. "FOREIGN KEY(id_Assunto) REFERENCES Assunto(id_Assunto))")Or die(mysql_error());
mysql_query("CREATE TABLE Aluno("
. "id_Aluno INT NOT NULL,"
. "AlunoNome CHAR,"
. "Grupo CHAR,"
. "PRIMARY KEY(id_Aluno))")Or die(mysql_error());
mysql_query("CREATE TABLE Assunto("
. "id_Assunto INT,"
. "Descricao VARCHAR,"
. "PRIMARY KEY(id_Assunto))")Or die(mysql_error());
mysql_close();
?>
我也试过使用它(没有FOREIGN KEY,只需插入另一个表的id):
$conectar = mysql_connect("localhost", "root", "") or die (mysql_error());
//mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error());
mysql_select_db("DataBaseTeste") or die(mysql_error());
mysql_query("CREATE TABLE Pergunta("
. "id_Pergunta INT AUTO_INCREMENT,"
. "Descricao TEXT,"
. "Nivel VARCHAR,"
. "PRIMARY KEY(id_Pergunta),"
. "id_Assunto INT)")Or die(mysql_error());
我得到的错误信息是:
&#34;您的SQL语法出错了;检查与您的MySQL服务器版本相对应的手册,以便在#PRREARY KEY(id_Pergunta)附近使用正确的语法......&#34;
这可能是非常愚蠢的事情,但我无法弄清楚。
答案 0 :(得分:1)
首先,尝试使用小写名称,我只是为PKs
然后要使用foreign keys
,您必须添加列名称,该表格将保存FK
此外,你需要使用INNODB
,不记得MyIsam
是否允许你FK,但我推荐它,请注意INNODB
也会为它们创建一个索引。
CREATE TABLE assunto(
id_assunto INT,
descricao VARCHAR(254),
PRIMARY KEY(id_assunto)
)ENGINE=INNODB;
CREATE TABLE aluno(
id_aluno INT NOT NULL,
alunoNome CHAR(254),
grupo CHAR,
PRIMARY KEY(id_aluno)
)ENGINE=INNODB;
CREATE TABLE pergunta(
id_pergunta INT AUTO_INCREMENT,
id_assunto int,
descricao TEXT,
nivel VARCHAR(254),
PRIMARY KEY(id_pergunta),
FOREIGN KEY(id_assunto) REFERENCES assunto(id_assunto)
)ENGINE=INNODB;
让我给你添加一个PHP版本,记下执行顺序。
<?php
$conectar = mysql_connect("localhost", "root", "") or die (mysql_error());
//mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error());
mysql_select_db("DataBaseTeste") or die(mysql_error());
mysql_query("CREATE TABLE aluno("
. "id_aluno INT NOT NULL,"
. "alunoNome CHAR,"
. "grupo CHAR,"
. "PRIMARY KEY(id_aluno))")Or die(mysql_error());
mysql_query("CREATE TABLE assunto("
. "id_assunto INT,"
. "descricao VARCHAR,"
. "PRIMARY KEY(id_assunto))")Or die(mysql_error());
mysql_query("CREATE TABLE Pergunta("
. "id_pergunta INT AUTO_INCREMENT,"
. "id_assunto INT AUTO_INCREMENT,"
. "descricao TEXT,"
. "Nivel VARCHAR,"
. "PRIMARY KEY(id_pergunta),"
. "FOREIGN KEY(id_assunto) REFERENCES assunto(id_assunto))")Or die(mysql_error());
mysql_close();
这是一个工作的sqlfiddle Mysql 5.1,我使用的是5.5.32,但显示为5.1也会起作用。 http://sqlfiddle.com/#!8/f88b5/3