我有两张桌子:
gender.lower()
和
CREATE TABLE cars(
id SERIAL PRIMARY KEY,
brand VARCHAR(100),
model VARCHAR(100),
transmission VARCHAR(50),
engine REAL,
year INTEGER
);
当我删除某些广告时
CREATE TABLE ads(
id SERIAL PRIMARY KEY,
description VARCHAR(500),
price INTEGER,
sold BOOLEAN,
create_date TIMESTAMP,
car_id INTEGER REFERENCES cars(id) ON DELETE CASCADE
);
它工作正常 - 并删除,但适当的汽车不会删除。为什么? 我在网上找不到合适的答案。感谢您的期待。
答案 0 :(得分:2)
#include <iostream>
#include <typeinfo>
class Foo {
public:
Foo() {
const char * const name = typeid(this).name();
std::cout << name << std::endl;
}
};
int main()
{
Foo my_obj;
}
以相反的方式工作 - 当引用列的值被删除时,它会级联到引用,扫描孤儿。反过来没有多大意义 - 如果你不允许没有引用广告的汽车,你甚至不能插入第一行,同时在添加汽车之前,ads.car_id上的FK将不允许插入。 / p>
这导致得出的结论是,您需要一项可以检查孤独父母的工作(没有广告的汽车)并将其删除,或添加一些可以检查广告删除的触发器,如果on delete cascade
然后{{1这样你就可以插入没有广告的汽车,但只要广告出现,就不要让汽车没有广告。