views:

1230

answers:

1
+3  A: 

The trigger looks like it is deleting districts whose id equals id_countries, that is, the where clause is actually

WHERE districts.id_countries = districts.id

You need to reference the id from the countries table. In a delete trigger, use "old" to do this.

CREATE TRIGGER [delete_country]
BEFORE DELETE
ON [countries]
FOR EACH ROW
BEGIN
DELETE FROM districts WHERE districts.id_countries = old.id;
END

Also, I would suggest changing your schema naming convention. Usually, the table name is singular, and corresponds to the entity in a row. I would have a country table with columns id and name, a district table with id, country_id and name, etc.

country
-------
id
name

district
-------
id
country_id
name

municipality
------------
id
district_id
name

parish
-----
id
municipality_id
name

Then the trigger would be

CREATE TRIGGER [delete_country]
BEFORE DELETE
ON [country]
FOR EACH ROW
BEGIN
DELETE FROM district WHERE district.country_id = old.id;
END
UncleO
Thank you so much for your help, the old thing worked just great. =)
Alix Axel