2011-01-20 12 views
24

मैं एक टेबल पर एक MySQL ट्रिगर बनाने के लिए देख रहा हूँ। अनिवार्य रूप से, मैं एक गतिविधि स्ट्रीम बना रहा हूं और उपयोगकर्ताओं द्वारा कार्यों को लॉग इन करने की आवश्यकता है। जब कोई उपयोगकर्ता कोई टिप्पणी करता है, तो मैं उस तालिका पर डेटाबेस ट्रिगर करना चाहता हूं औरकिसी अन्य तालिका में पंक्ति डालने के लिए एक MySQL ट्रिगर प्रोग्राम कैसे करें?

  1. अंतिम डाली गई पंक्ति (टिप्पणी पंक्ति की आईडी) की आईडी प्राप्त करें।
  2. पिछली डाली गई पंक्ति से डेटा का उपयोग करके एक आईएनएसईआरटी को एक क्रिया तालिका में निष्पादित करें।

मैं अनिवार्य रूप से टिप्पणियों को हटाने के लिए इस ट्रिगर को दोहरा दूंगा।

प्रश्न मैं था:

  1. LAST_INSERT_ID() का सबसे अच्छा तरीका आईडी हड़पने के लिए है?
  2. मैं अपने "INSERT गतिविधियों में" कथन में उपयोग के लिए अंतिम सम्मिलित टिप्पणी पंक्ति से डेटा को सही तरीके से कैसे संग्रहीत करूं?
  3. क्या मुझे संग्रहित प्रक्रियाओं के संयोजन के साथ-साथ ट्रिगर का उपयोग करना चाहिए?
  4. ट्रिगर की मूल संरचना कैसी दिखती है?

धन्यवाद! यह कुछ साल हो गया है क्योंकि मैंने डीबी ट्रिगर्स, प्रक्रियाओं और कार्यों के साथ कुछ भी करने को छुआ है।

उत्तर

36
drop table if exists comments; 
create table comments 
(
comment_id int unsigned not null auto_increment primary key, 
user_id int unsigned not null 
) 
engine=innodb; 

drop table if exists activities; 
create table activities 
(
activity_id int unsigned not null auto_increment primary key, 
comment_id int unsigned not null, 
user_id int unsigned not null 
) 
engine=innodb; 

delimiter # 

create trigger comments_after_ins_trig after insert on comments 
for each row 
begin 
    insert into activities (comment_id, user_id) values (new.comment_id, new.user_id); 
end# 

delimiter ; 

insert into comments (user_id) values (1),(2); 

select * from comments; 
select * from activities; 

संपादित करें:

mysql> \. d:\foo.sql 

Database changed 
Query OK, 0 rows affected (0.10 sec) 

Query OK, 0 rows affected (0.30 sec) 

Query OK, 0 rows affected (0.11 sec) 

Query OK, 0 rows affected (0.35 sec) 

Query OK, 0 rows affected (0.07 sec) 

Query OK, 2 rows affected (0.03 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

+------------+---------+ 
| comment_id | user_id | 
+------------+---------+ 
|   1 |  1 | 
|   2 |  2 | 
+------------+---------+ 
2 rows in set (0.00 sec) 

+-------------+------------+---------+ 
| activity_id | comment_id | user_id | 
+-------------+------------+---------+ 
|   1 |   1 |  1 | 
|   2 |   2 |  2 | 
+-------------+------------+---------+ 
2 rows in set (0.00 sec) 
+7

सभी के लिए सोच क्या 'नई' यहाँ में खड़ा है के लिए: _You का उपयोग करके (ट्रिगर के साथ जुड़े तालिका) विषय तालिका में कॉलम का उल्लेख कर सकते उपनाम पुराने और नए। OLD.col_name किसी मौजूदा पंक्ति के कॉलम को अपडेट या हटाए जाने से पहले संदर्भित करता है। NEW.col_name डालने के लिए एक नई पंक्ति के स्तंभ या अद्यतन होने के बाद एक मौजूदा पंक्ति को संदर्भित करता है ._ http://dev.mysql.com/doc/refman/5.0/en///create-trigger.html – SimonSimCity

+0

@ f00, क्या आप कृपया मुझे इस ट्रिगर में बता सकते हैं ... क्योंकि प्रत्येक पंक्ति के लिए 'खंड है, यह पूरी तालिका को स्कैन करेगा, या केवल नई पंक्तियां डालेगा। आपकी सहायता के लिए धन्यवाद – SAM

+1

@ एसएएम, "प्रत्येक पंक्ति के लिए" केवल mysql दस्तावेज़ों के अनुसार अद्यतन/डाली गई पंक्तियों को मानता है। –

संबंधित मुद्दे

 संबंधित मुद्दे