Как УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ ___; Работает?

#mysql #sql

#mysql #sql

Вопрос:

Я пытаюсь удалить таблицу, если она существует, просто чтобы заставить таблицы создаваться и работать правильно, однако, когда я пытаюсь запустить ее после их создания, я получаю сообщение об ошибке «Не удается удалить таблицу ‘Painter’, на которую ссылается ограничение внешнего ключа для рисования таблицы». Я думаю, что это проблема с внешними ключами в таблицах, я давно не писал SQL, извините, если это трудно читать.

 DROP TABLE IF EXISTS PAINTER;
DROP TABLE IF EXISTS MUSEUM;
DROP TABLE IF EXISTS PAINTING;
DROP TABLE IF EXISTS CUSTOMER;
DROP TABLE IF EXISTS GALA_NIGHT;
DROP TABLE IF EXISTS INVITE;
DROP TABLE IF EXISTS MEMBER_SPECIALTY;
DROP TABLE IF EXISTS DOCENT;

CREATE TABLE PAINTER (
AName varchar(255) PRIMARY KEY,
ABDate varchar(255),
ADdate varchar(255),
ACountry varchar(255)
);

CREATE TABLE MUSEUM (
MuseumName varchar(255) PRIMARY KEY,
MuCity varchar(255),
MuCountry varchar(255)
);

CREATE TABLE PAINTING (
Painting_Name varchar(255) PRIMARY KEY,
Year_Painted varchar(255),
Est_Value varchar(255),
PAINTER_Name varchar(255),
FOREIGN KEY (PAINTER_Name) REFERENCES PAINTER(AName),
Museum_Name varchar(255),
FOREIGN KEY (Museum_Name) REFERENCES MUSEUM(MuseumName)
);

CREATE TABLE CUSTOMER (
CustId int(255) PRIMARY KEY,
CustName varchar(255),
CustBDate varchar(255),
CustType varchar(255)
);

CREATE TABLE GALA_NIGHT (
Painter_Name varchar(255),
FOREIGN KEY (Painter_Name) REFERENCES PAINTER(AName),
GalaDate varchar(255) PRIMARY KEY
);

CREATE TABLE INVITE (
Painter_Name varchar(255) PRIMARY KEY,
FOREIGN KEY (Painter_Name) REFERENCES GALA_NIGHT(Painter_Name),
GalaDate varchar(255),
FOREIGN KEY (GalaDate) REFERENCES GALA_NIGHT(GalaDate),
Cust_Id int(255),
FOREIGN KEY (Cust_Id) REFERENCES CUSTOMER(CustId)
);

CREATE TABLE MEMBER_SPECIALTY (
memberType varchar(255),
FOREIGN KEY (memberType) REFERENCES CUSTOMER(CustType)
);

CREATE TABLE DOCENT (
DDate varchar(255) PRIMARY KEY,
Dtime varchar(255),
Room_Number int(255),
CustID varchar(255),
FOREIGN KEY (CustID) REFERENCES CUSTOMER(CustId)
);
 

Ответ №1:

В mysql 8 это работает, но у вас есть некоторые ошибки в вашем коде

 DROP TABLE IF EXISTS DOCENT;
DROP TABLE IF EXISTS MEMBER_SPECIALTY;
DROP TABLE IF EXISTS INVITE;
DROP TABLE IF EXISTS GALA_NIGHT;
DROP TABLE IF EXISTS CUSTOMER;
DROP TABLE IF EXISTS PAINTING;
DROP TABLE IF EXISTS MUSEUM;
DROP TABLE IF EXISTS PAINTER;

CREATE TABLE PAINTER (
AName varchar(255) PRIMARY KEY,
ABDate varchar(255),
ADdate varchar(255),
ACountry varchar(255)
);

CREATE TABLE MUSEUM (
MuseumName varchar(255) PRIMARY KEY,
MuCity varchar(255),
MuCountry varchar(255)
);

CREATE TABLE PAINTING (
Painting_Name varchar(255) PRIMARY KEY,
Year_Painted varchar(255),
Est_Value varchar(255),
PAINTER_Name varchar(255),
FOREIGN KEY (PAINTER_Name) REFERENCES PAINTER(AName),
Museum_Name varchar(255),
FOREIGN KEY (Museum_Name) REFERENCES MUSEUM(MuseumName)
);

CREATE TABLE CUSTOMER (
CustId int(255) PRIMARY KEY,
CustName varchar(255),
CustBDate varchar(255),
CustType varchar(255)
, KEY(CustType)
);

CREATE TABLE GALA_NIGHT (
Painter_Name varchar(255),
FOREIGN KEY (Painter_Name) REFERENCES PAINTER(AName),
GalaDate varchar(255) PRIMARY KEY
);

CREATE TABLE INVITE (
Painter_Name varchar(255) PRIMARY KEY,
FOREIGN KEY (Painter_Name) REFERENCES GALA_NIGHT(Painter_Name),
GalaDate varchar(255),
FOREIGN KEY (GalaDate) REFERENCES GALA_NIGHT(GalaDate),
Cust_Id int(255),
FOREIGN KEY (Cust_Id) REFERENCES CUSTOMER(CustId)
);

CREATE TABLE MEMBER_SPECIALTY (
memberType varchar(255),
FOREIGN KEY (memberType) REFERENCES CUSTOMER(CustType)
);

CREATE TABLE DOCENT (
DDate varchar(255) PRIMARY KEY,
Dtime varchar(255),
Room_Number int(255),
CustID int(255),
FOREIGN KEY (CustID) REFERENCES CUSTOMER(CustId)
);
 

Ответ №2:

Чтобы удалить таблицу PAINTER, вам нужно удалить ограничения FK, которые зависят от этой таблицы. Вы могли бы сделать это с помощью оператора ALTER, но поскольку вы все равно удаляете таблицу РИСОВАНИЯ, вы можете поместить эту команду перед командой для удаления PAINTER .

У вас есть несколько зависимостей между вашими таблицами. Вероятно, вам потребуется изменить порядок ваших команд УДАЛЕНИЯ, чтобы они были в порядке, обратном порядку создания таблиц и ограничений.