Trigger

mohan21

Member
با سلام من دو تا جدول cat و pic دارم، می خوام با حذف گروهی از جدول cat تمامی سطرهایی که دارای cat_serial برابری در جدول pic هستند، حذف شوند ...
اینکار رو میخوام با trigger انجام بدم ....

کدهای زیر رو برای ایجاد پایگاه قرار میدم جداول ایجاد میشن اما trigger نه ....

چرا ؟
چکار باید کنم ؟
اشکال از کجاست ؟

PHP:
//Jadvale CAT

CREATE TABLE `cat` (
  `id` int(10) NOT NULL auto_increment,
  `title` varchar(255) collate utf8_persian_ci NOT NULL,
  `parent` int(10) NOT NULL,
  `cat_serial` varchar(10) collate utf8_persian_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=1 ;

//Jadvale PIC

CREATE TABLE `pic` (
  `id` int(10) NOT NULL auto_increment,
  `title` varchar(255) collate utf8_persian_ci NOT NULL,
  `cat_serial` varchar(10) collate utf8_persian_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=1 ;

 INSERT INTO `cat` VALUES ('', 'group 01', '', '123456');
INSERT INTO `cat` VALUES ('', 'group 02', '', '123457');
INSERT INTO `cat` VALUES ('', 'group 03', '', '123458');
INSERT INTO `cat` VALUES ('', 'group 04', '123458', '123459');
INSERT INTO `cat` VALUES ('', 'group 05', '', '123460');

INSERT INTO `pic` VALUES ('', 'title 01', '123456');
INSERT INTO `pic` VALUES ('', 'title 02', '123472');
INSERT INTO `pic` VALUES ('', 'title 03', '123461');
INSERT INTO `pic` VALUES ('', 'title 04', '123473');
INSERT INTO `pic` VALUES ('', 'title 05', '123467');

//TRIGGER

create trigger `DelTRIG_Cat_Pic`
after delete on cat
referencing OLD as cat
(delete from pic where pic.cat_serial = cat.cat_serial
for each row);
 

hidensoft

Member
به فرض من 2 تا جدول دارم
کد:
CREATE TABLE employee (
	id smallint(5) unsigned NOT NULL,
	firstname varchar(30),
	lastname varchar(30),
	birthdate date,
	PRIMARY KEY (id),
	KEY idx_lastname (lastname)
) ENGINE=InnoDB;
CREATE TABLE borrowed (
	ref int(10) unsigned NOT NULL auto_increment,
	employeeid smallint(5) unsigned NOT NULL,
	book varchar(50),
	PRIMARY KEY (ref)
) ENGINE=InnoDB;
حالا میام یه رابطه بین جدول ها تایین می کنم
کد:
ALTER TABLE borrowed 
ADD CONSTRAINT FK_borrowed 
FOREIGN KEY (employeeid) REFERENCES employee(id) 
ON UPDATE CASCADE
ON DELETE CASCADE;
یه سری اطلاعات رو وارد جداول می کنم

کد:
[B]employee:[/B]

id | firstname |    lastname | birthdate 
1  | John      |    Smith    | 1976-01-02
2  | Laura     |    Jones    | 1969-09-05
3  | Jane      |    Green    | 1967-07-15

[B]borrowed:[/B]

ref | employeeid | book 
1 	|    1	     | SitePoint Simply SQL
2   | 	 1  	 | SitePoint Ultimate HTML Reference
3   |    1       | SitePoint Ultimate CSS Reference
4   |    2       | SitePoint Art and Science of JavaScript

سپس میام و یه کوئری می زنم و چند تا از رکورد های جدول اول رو حذف می کنم

کد:
DELETE FROM employee WHERE id=1;

فکر می کنید در جدول دوم چه اتفاقی می افته ؟

کد:
ref | employeeid | book 
4   |     2 	 | SitePoint Art and Science of JavaScript

کلمات کلیدی : ondelete - cascade - foreign key
مرجع : MySQL
 
آخرین ویرایش:

mohan21

Member
با تشکر از شما

اما این در صورتی میتونه کارآمد باشه که کلید خارجی در جدول اولیه جزء کلید اصلی باشه،

اما من فیلد هایی دارم که کلید نیستند،

پس باید از trigger استفاده کنم ...
 

جدیدترین ارسال ها

بالا