چگونه داده‌ها را در SQL حذف کنیم؟

مقدمه (Introduction)

در Structured Query Language که بیشتر با نام SQL شناخته می‌شود، دستور DELETE یکی از قدرتمندترین عملیات‌هایی است که در اختیار کاربران قرار دارد. همان‌طور که از نام آن پیداست، عملیات DELETE به‌صورت غیرقابل بازگشت یک یا چند ردیف (Row) داده را از یک جدول پایگاه داده حذف می‌کند.

از آنجا که DELETE بخش بسیار مهمی از مدیریت داده محسوب می‌شود، لازم است کاربران SQL درک دقیقی از نحوه‌ی عملکرد این دستور داشته باشند.

در این راهنما یاد می‌گیرید:

  • چگونه با استفاده از سینتکس DELETE داده‌ها را از یک یا چند جدول حذف کنید

  • SQL چگونه با عملیات DELETE که با Foreign Key Constraint در تضاد هستند برخورد می‌کند


پیش‌نیازها (Prerequisites)

برای دنبال کردن این راهنما به موارد زیر نیاز دارید:

  • یک سیستم دارای Relational Database Management System (RDBMS) که از SQL پشتیبانی کند

نمونه‌ها و دستورات این آموزش در محیط زیر بررسی شده‌اند:

  • سرور Ubuntu 20.04 با یک کاربر non-root دارای دسترسی مدیریتی و فایروال UFW

  • MySQL نصب و ایمن‌سازی‌شده روی سرور

  • یک کاربر non-root در MySQL

توجه: هر RDBMS پیاده‌سازی مخصوص خود از SQL را دارد. اگرچه بیشتر دستورات این آموزش در اکثر سیستم‌ها کار می‌کنند، اما ممکن است سینتکس یا خروجی دقیق در دیتابیس‌هایی غیر از MySQL کمی متفاوت باشد.

همچنین به یک دیتابیس نمونه و چند جدول دارای داده نیاز دارید تا بتوانید عملیات حذف داده را تمرین کنید.


اتصال به MySQL و ساخت دیتابیس نمونه

ابتدا به سرور خود SSH بزنید:

ssh sammy@your_server_ip

سپس وارد محیط MySQL شوید:

mysql -u sammy -p

ایجاد دیتابیس

CREATE DATABASE deleteDB;

خروجی موفق:

Query OK, 1 row affected (0.01 sec)

انتخاب دیتابیس:

USE deleteDB;

ساخت جدول‌ها

جدول اعضای باشگاه (clubMembers)

CREATE TABLE clubMembers (
memberID int PRIMARY KEY,
name varchar(30),
homeBorough varchar(15),
email varchar(30)
);

جدول تجهیزات (clubEquipment) با Foreign Key

CREATE TABLE clubEquipment (
equipmentID int PRIMARY KEY,
equipmentType varchar(30),
brand varchar(15),
ownerID int,
CONSTRAINT fk_ownerID
FOREIGN KEY (ownerID) REFERENCES clubMembers(memberID)
);

وارد کردن داده‌های نمونه

داده‌های اعضا:

INSERT INTO clubMembers VALUES
(1, 'Rosetta', 'Manhattan', 'hightower@example.com'),
(2, 'Linda', 'Staten Island', 'lyndell@example.com'),
(3, 'Labi', 'Brooklyn', 'siffre@example.com'),
(4, 'Bettye', 'Queens', 'lavette@example.com'),
(5, 'Phoebe', 'Bronx', 'snow@example.com'),
(6, 'Mariya', 'Brooklyn', 'takeuchi@example.com');

داده‌های تجهیزات:

INSERT INTO clubEquipment VALUES
(1, 'electric guitar', 'Gilled', 6),
(2, 'trumpet', 'Yemehe', 5),
(3, 'drum kit', 'Purl', 3),
(4, 'mixer', 'Bearinger', 3),
(5, 'microphone', 'Sure', 1),
(6, 'bass guitar', 'Fandar', 4),
(7, 'acoustic guitar', 'Marten', 6),
(8, 'synthesizer', 'Korgi', 4),
(9, 'guitar amplifier', 'Vax', 4),
(10, 'keytar', 'Poland', 3),
(11, 'acoustic/electric bass', 'Pepiphone', 2),
(12, 'trombone', 'Cann', 2),
(13, 'mandolin', 'Rouge', 1),
(14, 'electric guitar', 'Vax', 6),
(15, 'accordion', 'Nonher', 5),
(16, 'electric organ', 'Spammond', 1),
(17, 'bass guitar', 'Peabey', 1),
(18, 'guitar amplifier', 'Fandar', 3),
(19, 'cello', 'Yemehe', 2),
(20, 'PA system', 'Mockville', 5);

حذف داده از یک جدول (Deleting Data from a Single Table)

سینتکس کلی DELETE

DELETE FROM table_name
WHERE conditions_apply;

هشدار بسیار مهم:
اگر شرط WHERE را حذف کنید، تمام ردیف‌های جدول حذف خواهند شد.


مثال: حذف تجهیزات برند Korgi

ابتدا بررسی با SELECT:

SELECT * FROM clubEquipment
WHERE brand = 'Korgi';

سپس حذف:

DELETE FROM clubEquipment
WHERE brand = 'Korgi';

حذف چند ردیف هم‌زمان

DELETE FROM clubEquipment
WHERE equipmentType LIKE '%electric%';

استفاده از Subquery برای حذف دقیق‌تر

DELETE FROM clubEquipment
WHERE ownerID IN (
SELECT memberID FROM clubMembers
WHERE name LIKE 'L%'
);

حذف داده از چند جدول با JOIN

سینتکس DELETE با JOIN

DELETE table_1, table_2
FROM table_1 JOIN table_2
ON table_2.related_column = table_1.related_column
WHERE conditions_apply;

مثال: حذف برندهای ممنوع

CREATE TABLE prohibitedBrands (
brandName varchar(30),
homeCountry varchar(30)
);
INSERT INTO prohibitedBrands VALUES
('Fandar', 'USA'),
('Givson', 'USA'),
('Muug', 'USA'),
('Peabey', 'USA'),
('Yemehe', 'Japan');

بررسی:

SELECT *
FROM clubEquipment JOIN prohibitedBrands
ON clubEquipment.brand = prohibitedBrands.brandName
WHERE homeCountry = 'USA';

حذف هم‌زمان:

DELETE clubEquipment, prohibitedBrands
FROM clubEquipment JOIN prohibitedBrands
ON clubEquipment.brand = prohibitedBrands.brandName
WHERE homeCountry = 'USA';

تغییر رفتار DELETE در Foreign Key

خطای پیش‌فرض

DELETE FROM clubMembers
WHERE memberID = 6;

خطا به‌دلیل Foreign Key Constraint


حذف Constraint قدیمی

ALTER TABLE clubEquipment
DROP FOREIGN KEY fk_ownerID;

افزودن CASCADE DELETE

ALTER TABLE clubEquipment
ADD CONSTRAINT newfk_ownerID
FOREIGN KEY (ownerID)
REFERENCES clubMembers(memberID)
ON DELETE CASCADE;

اکنون:

DELETE FROM clubMembers
WHERE memberID = 6;

عضو و تمام تجهیزات مرتبط با او حذف می‌شوند.


جمع‌بندی (Conclusion)

در این راهنما یاد گرفتید:

  • چگونه با دستور DELETE داده‌ها را از یک یا چند جدول حذف کنید

  • چگونه از WHERE، Subquery و JOIN برای حذف هدفمند استفاده کنید

  • SQL چگونه با Foreign Key Constraint برخورد می‌کند

  • و چطور رفتار DELETE را با ON DELETE CASCADE / SET NULL تغییر دهید

 

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *