#php #mysql #sql
#php #mysql #sql
Вопрос:
Я немного работаю с MySQL, используя команды только через PHP (без использования интерфейса 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();
?>
Я также пытался использовать это (без внешнего КЛЮЧА, просто вставив идентификатор другой таблицы):
$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());
Сообщение об ошибке, которое я получаю, выглядит следующим образом:
«У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘PRIMARY KEY (id_Pergunta) …»
Вероятно, это что-то довольно глупое, но я не могу в этом разобраться.
Комментарии:
1. Замените функции mysql_ * на mysqli_*
2. ВСЕ функции? потому что я только что обновил все, и это не сработало…
Ответ №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, но show as 5.1 тоже будет работать.
http://sqlfiddle.com /#!8/f88b5/3
Комментарии:
1. Я использовал точно такой же код, который вы создали здесь, и он создал базу данных и таблицу «Aluno», но все остальное не сработало, и теперь у меня появляется вот эта ошибка: у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘PRIMARY KEY (id_assunto))’ в строке 1
2. Я обновил свой скрипт (не версию php) там, где есть несколько дополнительных символов (‘;’) , но я сделал это из mysql-cli, с MYSQL 5.5.32, попробуйте это из командной строки, это будет быстрее, чем транскрибировать на ваш PHP, copy paste должно сработать
3. Да, я не смог найти, что происходит, но вы очень помогли, по крайней мере, база данных создана и работает, большое спасибо, приятель.
4. Я добавил sqlfidle, чтобы вы могли поиграть с ним
5. большое спасибо, там все работает просто отлично, но по какой-то причине php-код просто не понимает команды первичного и внешнего ключей