Я новичок в MySQL (нужно было изучить его для uni). Мне нужно создать базу данных и веб-интерфейс для назначения.
На одной из таблиц у меня есть два столбца, оба из которых являются внешними ключами, и мне нужно использовать их как первичный ключ.
Это код до сих пор:
drop database if exists testJoke; create database testJoke; use testJoke; CREATE TABLE Author ( id int(11) NOT NULL , name varchar(255) NULL , cust_email varchar(255) NULL, password char(32) null, PRIMARY KEY (id) ); **CREATE TABLE AuthorRole ( authorid int(11) NOT NULL , roleid varchar(255) NOT NULL, PRIMARY KEY (authorid, roleid), FOREIGN KEY(authorid) REFERENCES Author(id), FOREIGN KEY(roleid) REFERENCES Role(id) );** CREATE TABLE Category ( id int(11) NOT NULL , name varchar(255) NULL, PRIMARY KEY (id) ); CREATE TABLE Joke ( id int(11) NOT NULL , joketext text NULL , jokedate date NOT NULL , authorid int(11) NULL, PRIMARY KEY (id), FOREIGN KEY(authorid) REFERENCES Author(id) ); CREATE TABLE JokeCategory ( jokeid int(11) NOT NULL , categoryid int(11) NOT NULL , PRIMARY KEY (jokeid, categoryid), FOREIGN KEY(jokeid) REFERENCES Joke(id), FOREIGN KEY(categoryid) REFERENCES Category(id)** ); CREATE TABLE Role ( id varchar(255) NOT NULL , description varchar(255) NULL , PRIMARY KEY (id) );
Весь синтаксис таблицы соответствует предоставленному словарю данных.
Когда я запускаю это в командной строке mysql, я получаю сообщение об ошибке в выделенном выше выделенном разделе (таблица «AuthorRole»), говоря, что он «не может добавить ограничение внешнего ключа».
Я попытался отладить его, и это похоже на:
FOREIGN KEY(roleid) REFERENCES Role(id)
Внешний ключ, вызывающий проблему (если я его удалю, все работает хорошо, и если я оставлю его и удалю другой внешний ключ, он даст ошибку).
Если бы кто-то мог объяснить, где я ошибаюсь, я был бы очень благодарен.
Я пробовал использовать это в Google, но не смог найти ничего (возможно, потому, что использовал неправильные ключевые слова).
благодаря
Приветствие Кори
Сначала создайте таблицу «Роль», затем таблицу «AuthorRole», и все будет хорошо
CREATE TABLE Role ( id varchar(255) NOT NULL , description varchar(255) NULL , PRIMARY KEY (id) ); CREATE TABLE AuthorRole ( authorid int(11) NOT NULL , roleid varchar(255) NOT NULL, PRIMARY KEY (authorid, roleid), FOREIGN KEY(authorid) REFERENCES Author(id), FOREIGN KEY(roleid) REFERENCES Role(id) );
А при создании первичных ключей лучше использовать id INT(11) NOT NULL AUTO_INCREMENT
Это просто потому, что вы имеете в виду первичный ключ таблицы, который не создается в момент, когда вы ссылаетесь на него, попробуйте следующий sql-скрипт:
drop database if exists testJoke; create database testJoke; use testJoke; CREATE TABLE Author ( id int(11) NOT NULL , name varchar(255) NULL , cust_email varchar(255) NULL, password char(32) null, PRIMARY KEY (id) ); CREATE TABLE Role ( id varchar(255) NOT NULL , description varchar(255) NULL , PRIMARY KEY (id) ); CREATE TABLE AuthorRole ( authorid int(11) NOT NULL , roleid varchar(255) NOT NULL, PRIMARY KEY (authorid, roleid), FOREIGN KEY(authorid) REFERENCES Author(id), FOREIGN KEY(roleid) REFERENCES Role(id) ); CREATE TABLE Category ( id int(11) NOT NULL , name varchar(255) NULL, PRIMARY KEY (id) ); CREATE TABLE Joke ( id int(11) NOT NULL , joketext text NULL , jokedate date NOT NULL , authorid int(11) NULL, PRIMARY KEY (id), FOREIGN KEY(authorid) REFERENCES Author(id) ); CREATE TABLE JokeCategory ( jokeid int(11) NOT NULL , categoryid int(11) NOT NULL , PRIMARY KEY (jokeid, categoryid), FOREIGN KEY(jokeid) REFERENCES Joke(id), FOREIGN KEY(categoryid) REFERENCES Category(id) );
Сначала создайте роль таблицы, а затем AuthorRole.
попробуйте изменить
roleid varchar(255) NOT NULL,
в
roleid int(11) NOT NULL,
поскольку поле и ваше ключевое поле имеют разные типы