简体   繁体   中英

Cannot delete or update a parent row: a foreign key constraint fails Error

i am trying to delete the table appusers, with the following command:

drop table appusers;

and i get the following error:

Cannot delete or update a parent row: a foreign key constraint fails

this is the scheme for my tables.

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
);

and I have the following table

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 
);  

as far as I know, if I delete the table appusers, the Accelerometer table should be deleted too, what i am missing here?

ON DELETE CASCADE only apply to data, not metadata.

=>

 Alter TABLE Accelerometer drop FOREIGN KEY (uid);

Then only

drop table appusers;

I realise this is stale for a while and an answer had been selected, but how about the alternative to allow the foreign key to be NULL and then choose ON DELETE SET NULL .

The following might work nicely for you:

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;`

Personally I would recommend using both ON UPDATE CASCADE as well as ON DELETE SET NULL to avoid unnecessary complications, however your set up may dictate a different approach.

Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM