2014-07-07 2 views
0

저는 PHP를 통해서만 명령을 사용하여 MySQL을 수행하고 있습니다 (phpMyAdmin 인터페이스를 사용하지 않고 테이블 생성). 기본 키와 외부 키를 생성하는 데 약간의 문제가 있습니다. 열쇠. 이것은 현재 코드입니다. "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 구문에 오류가있어서 'PRIMARY KEY (id_Pergunta) ...'근처에서 사용할 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

아마 뭔가 어리석은 짓 일지 모르지만 그걸 알아낼 수는 없습니다.

+0

mysql_ * 함수를 mysqli_ * – Phantom

+0

ALL 함수로 바꿉니 까? 왜냐하면 나는 모든 것을 다 망쳐 버렸고 일을하지 못했기 때문에 ... – Xmayro

답변

1

첫째, 소문자 이름을 사용하려고, 난 그냥 당신이 열 이름은 다음 또한 FK

를 개최합니다 해당 테이블을 추가해야합니다 foreign keys를 사용하는 다음

PKs을 위해 그것을했다, 당신은 필요 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 구문에 오류가 있습니다. 1 행에서 'PRIMARY KEY (id_assunto)'근처에서 사용할 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. – Xmayro

+0

PHP 스크립트가 아닌 스크립트를 업데이트했습니다. ,하지만 mysql-cli에서 MYSQL 5.5.32를 사용하여 명령 행에서 시도해보십시오. PHP로 복사하는 것이 더 빠를 것입니다. 복사 붙여 넣기가 작동합니다. –

관련 문제