2009-08-15 18 views
5

SQL कथन में कोई त्रुटि होने पर मैं लेनदेन कैसे शुरू कर सकता हूं, सिस्टम स्वचालित रूप से परिवर्तनों को रोलबैक करेगा?लेनदेन MySQL

मैं निम्नलिखित SQL विवरण

START TRANSACTION; 

BEGIN; 

INSERT INTO `users`(id,name,gender,email,age) 
    VALUES(11121,'sss',0,'ssss',22); 

INSERT INTO `teachers`(`UserId`,`teachingSubject`) 
    VALUES(11121,300); 

COMMIT; 

यह रोलबैक नहीं है जब दूसरा बयान एक त्रुटि का मुकाबला है। क्यूं कर? 'शिक्षण सबब्जेक्ट' टिन्यिनट (2) है, दूसरा कथन इसकी सीमा से बाहर हो जाएगा। मैं सभी बयानों को रोलबैक करना चाहता हूं।

Below is my procedure. 

mysql> source d:\s.sql 
Query OK, 0 rows affected (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

Query OK, 1 row affected (0.00 sec) 

ERROR 1264 (22003): Out of range value for column 'te 
Query OK, 0 rows affected (0.09 sec) 

mysql> SELECT * FROM teachers 
    -> ; 
+--------+-----------------+ 
| UserId | teachingSubject | 
+--------+-----------------+ 
| 11111 |    1 | 
| 11112 |    9 | 
| 11113 |    100 | 
+--------+-----------------+ 
3 rows in set (0.00 sec) 

mysql> SELECT * FROM users; 
+-------+--------+--------+----------------+------+ 
| id | name | gender | email   | age | 
+-------+--------+--------+----------------+------+ 
| 11111 | Killer |  | [email protected]  | 12 | 
| 11112 | sss |  | ssss   | 22 | 
| 11113 | sss |  | ssss   | 22 | 
| 11114 | sss |  | ssss   | 22 | 
| 11115 | sss |  | ssss   | 22 | 
| 11116 | sss |  | ssss   | 22 | 
| 11117 | sss |  | ssss   | 22 | 
| 11118 | sss |  | ssss   | 22 | 
| 11119 | sss |  | ssss   | 22 | 
| 11120 | sss |  | ssss   | 22 | 
| 11121 | sss |  | ssss   | 22 | 
| 12345 | Sefler |  | [email protected] | 12 | 
+-------+--------+--------+----------------+------+ 
12 rows in set (0.00 sec) 

शिक्षक तालिका में आईडी = 11121 के साथ कोई रिकॉर्ड नहीं है लेकिन उपयोगकर्ता तालिका करता है।

उत्तर

5

माईएसक्यूएल int ओवरफ्लो होने पर त्रुटि नहीं फेंक देगा। इसके बजाय यह इसे उच्चतम संभव मूल्य पर छोटा कर देगा। एक हस्ताक्षरित tinyint के मामले में 255 है। लेकिन कोई वास्तविक त्रुटि फेंक दिया जाएगा।

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