1

我正在尝试使用以下命令删除表 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) 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,加速度计表也应该被删除,我在这里缺少什么?

4

2 回答 2

2

ON DELETE CASCADE仅适用于数据,不适用于元数据。

=>

 Alter TABLE Accelerometer drop FOREIGN KEY (uid);

那么只有

drop table appusers;
于 2016-03-10T13:50:52.403 回答
0

我意识到这已经过时了一段时间,并且已经选择了一个答案,但是允许外键成为NULL然后选择的替代方法怎么样ON 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;`

就我个人而言,我建议同时使用这两种ON UPDATE CASCADE方法ON DELETE SET NULL以避免不必要的并发症,但是您的设置可能会要求采用不同的方法。

希望这可以帮助。

于 2017-05-09T10:44:33.943 回答