2014-07-07 82 views
0

我正在通過PHP只使用命令(不使用phpMyAdmin接口來創建表)創建一個MySQL的命令,我在創建Primary和Foreign時遇到了一些問題鍵。這是我現在的代碼。PHP和MySQL外鍵按預期工作

$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()); 

該錯誤消息我得到的是這樣的::

「你

<?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(); 

?> 

我也是用這個(沒有外鍵,僅通過插入其他表的ID)嘗試在您的SQL語法中有錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以便在「PRIMARY KEY(id_Pergunta)」附近使用正確的語法...「

這可能是非常愚蠢的東西,但我無法弄清楚。

+0

將mysql_ *函數替換爲mysqli_ * – Phantom

+0

所有函數?因爲我只是放下了一切,它沒有工作... – Xmayro

回答

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

+0

好吧,我會試試這一個。 – Xmayro

+0

我使用exacly代碼製作了它,它創建了數據庫和「Aluno」表,但其他所有內容都沒有起作用,現在這個錯誤對我來說似乎是: 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第一行使用'PRIMARY KEY(id_assunto)'附近的正確語法 – Xmayro

+0

我更新了我的腳本(不是php版本)那裏有一些額外的字符(';') ,但我是從mysql-cli,使用MYSQL 5.5.32,從命令行嘗試它,它會更快,然後轉錄到您的PHP,複製粘貼將工作 –