Mysql 无法删除或更新父行:外键约束失败错误
我正在尝试使用以下命令删除表appusers:Mysql 无法删除或更新父行:外键约束失败错误,mysql,foreign-keys,cascading-deletes,drop-table,Mysql,Foreign Keys,Cascading Deletes,Drop Table,我正在尝试使用以下命令删除表appusers: drop table appusers; 我得到以下错误: Cannot delete or update a parent row: a foreign key constraint fails 这是我桌子的方案 CREATE TABLE appUsers ( uid INT PRIMARY KEY AUTO_INCREMENT, fullName VARCHAR(80) NOT NULL, email VARCHAR(100)
drop table appusers;
我得到以下错误:
Cannot delete or update a parent row: a foreign key constraint fails
这是我桌子的方案
CREATE TABLE appUsers (
uid INT PRIMARY KEY AUTO_INCREMENT,
fullName VARCHAR(80) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL,
Gender VARCHAR(7) NOT NULL, /*["Male", "Female"]*/
Country VARCHAR(150) NOT NULL,
Bdate date NOT NULL,
Status VARCHAR(25) NOT NULL, /*["Single", "In Relationship", "Merried", "Divorced", "Widow"]*/ /*check married!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
Religion VARCHAR(25) NOT NULL, /*["Jewish", "Christian", "Muslim", "Atheist", "Other"]*/
ReligionStrength INT(1) NOT NULL, /*0-5*/
PoliticalView VARCHAR(25) NOT NULL, /*["Left Wing","Center","Right Wing"]*/
Occupation VARCHAR(25) NOT NULL, /*["Unemployed","White Collar","Blue Collar","Student", "Independent"]*/
Volunteering VARCHAR(25) NOT NULL, /*["Yes", "No"]*/
Donating VARCHAR(25) NOT NULL, /*["Yes", "No"]*/
Economy VARCHAR(25) NOT NULL, /*["Poor","Middle Class","Rich"]*/
EducationalYears INT(2) NOT NULL
);
我有下表
CREATE TABLE Accelerometer(
id INT PRIMARY KEY AUTO_INCREMENT,
uid INT NOT NULL,
sampleTime timestamp(2) NOT NULL,
data VARCHAR(100) NOT NULL,
FOREIGN KEY (uid) REFERENCES appUsers(uid) ON DELETE CASCADE
);
据我所知,如果我删除appusers表,那么加速度表也应该被删除,
这里我缺少什么?关于删除级联的
仅适用于数据,而不适用于元数据
=>
Alter TABLE Accelerometer drop FOREIGN KEY (uid);
那么只有
drop table appusers;
我意识到这已经过时了一段时间,并且已经选择了一个答案,但是另一种方法是允许外键为NULL
,然后在DELETE SET NULL
上选择
以下内容可能对您非常有用:
ALTER TABLE 'Accelerometer'
DROP FOREIGN KEY 'uid_fk';
ALTER TABLE 'Accelerometer'
ADD CONSTRAINT 'uid_fk' FOREIGN KEY ('uid') REFERENCES 'appUsers' ('uid') ON
UPDATE CASCADE ON DELETE SET NULL;`
就个人而言,我建议在更新级联时使用,在删除集NULL时使用,以避免不必要的复杂性,但是您的设置可能要求使用不同的方法
希望这能有所帮助。如果删除表appusers
中的一行,则也会删除accelerator
中的所有相关行。如果删除表,则不会。请先删除此表上的表,然后再删除它。@giorgosbetos,如果要删除整个表,我可以做什么?