Junior — Middle
PostgreSQL მონაცემთა ბაზაში რა ქცევა ხდება, თუ სხვა ცხრილთან გარეგანი გასაღვით დაკავშირებული ჩანაწერის წაშლისას, აშკარა მოქმედება არ არის მითითებული?
sobes.tech AI
პასუხი AI-სგან
PostgreSQL-ში, თუ სხვა მაგიდასთან დაკავშირებული ჩანაწერის წაშლისას, არ არის მითითებული კონკრეტული მოქმედება (მაგალითად, ON DELETE CASCADE ან ON DELETE SET NULL), დეფოლტად მოქმედება არის ON DELETE NO ACTION.
ეს ნიშნავს, რომ მცდელობა წაშალოს ჩანაწერი, რომელსაც სხვა მაგიდა référენცირებს, გამოიწვევს გარეგანი გასაღების შეზღუდვის შეცდომას და წაშლა არ განხორციელდება.
ამ გზით, მონაცემთა ბაზა თავიდან აცილებს მონაცემთა მთლიანობის დარღვევას, არ უშვებს მშობლის ჩანაწერის წაშლას, სანამ დაკავშირებული შვილების ჩანაწერები არსებობს.
მაგალითი:
-- შეკვეთების მაგიდა, გარეგანი გასაღებით მომხმარებელთა მაგიდაზე
CREATE TABLE customers (
id SERIAL PRIMARY KEY
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id)
);
-- მომხმარებლის წაშლის მცდელობა, რომელიც აქვს შეკვეთები, გარეშე `ON DELETE CASCADE`
DELETE FROM customers WHERE id = 1; -- გამოიწვევს შეცდომას
ავტომატური წაშლის შესაძლებლობის მისაღებად, აუცილებელია, გარეგანი გასაღების შექმნისას, მკაფიოდ მითითდეს ON DELETE CASCADE.