Əsas səhifə > MySQL > MySQL Multi-Table Delete

MySQL Multi-Table Delete

Bir neçə cədvəldən eyni anda məlumatların silinməsi yəni multiple delete-dən danışacıq.
Yazı boyunca istifadə edəcəyimiz cədvəl və məlumatları yaradaq:

-- cədvəllərin yaradılması 

create table users(
id int not null auto_increment,
`name` varchar(25) not null,
surname varchar(25) not null,
primary key(id)
);


create table users_action(
id int not null auto_increment,
user_id int not null,
u_action_id varchar(25),
primary key(id)
);


create table users_action_list(
id int not null auto_increment,
u_action_name varchar(25) not null,
primary key(id),
unique(u_action_name)
);

-- məlumatların daxil edilməsi
insert into users(`name`,surname) values('Shahriyar','Rzayev'),('Emin','Rehmanov'),('Arif','Shamistanli');
insert into users_action_list(u_action_name) values('shopping'),('running'),('administration');
insert into users_action(user_id,u_action_id) values((select id from users where `name`='Shahriyar'),(select id from users_action_list where u_action_name='shopping'));
insert into users_action(user_id,u_action_id) values((select id from users where `name`='Shahriyar'),(select id from users_action_list where u_action_name='running'));
insert into users_action(user_id,u_action_id) values((select id from users where `name`='Shahriyar'),(select id from users_action_list where u_action_name='administration'));

İndi isə multiple delete-in 2 fərqli syntax-ına baxaq. Lakin ilk öncə silinəcək row sayını hesablayaq:

select count(*) from users where `name`='Shahriyar';

# count(*)
1

select count(*) from users_action where user_id=(select id from users where `name`='Shahriyar' );

# count(*)
3

3+1=4 yəni 2 cədvəldən 4 row silinməlidir. 2 yolla bunu edə bilərik:

-- 1-ci üsul

delete u , uac from users as u
        inner join
    users_action as uac ON u.id = uac.user_id 
where
    u.id = 1;
Query OK, 4 rows affected (0.16 sec)

-- 2-ci üsul

delete from u,uac
      using users as u inner join users_action as uac
     ON u.id = uac.user_id 
where
    u.id = 1;
Query OK, 4 rows affected (0.17 sec)

Bəli hər 2 halda 4 row silindi.
Təbii ki multiple delete yalnız 2 cədvəl ilə sərhədlənmir 3 cədvəldən də eyni anda silə bilirik:

delete u , uac , uacl from users as u
        inner join
    users_action as uac ON u.id = uac.user_id
        inner join
    users_action_list as uacl ON uac.u_action_id = uacl.id 
where
    u.id = 1 and uac.u_action_id = 1;

3 row(s) affected

Bundan əlavə mənə maraqlı gələn bir xüsusiyyət də mövcuddur ki, bir neçə cədvəldən axtarış edib daha sonra da yalnız bizə lazım olan cədvəldən məlumatları silə bilirik. Diqqət edək:

delete u , uac from users as u
        inner join
    users_action as uac ON u.id = uac.user_id 
		inner join
	users_action_list as uacl on uac.u_action_id=uacl.id
where
    u.id = 1 and uac.u_action_id = 1;

2 row(s) affected

Əgər diqqət etdinizsə axtarış 3 cədvəldən lakin silinmə 2 cədvəldə yerinə yetirildi və dolayısı ilə 3-cü cədvəldəki 1 row silinmədi və toplam 2 row silinmiş oldu.

Multi-table delete-lər haqqında daha ətraflı dokumentasiyadan oxuya bilərsiniz:
Multi-table delete DOC

Təşəkkürlər😉

  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: