5
システムが自動的に変更をロールバックするSQL文にエラーがある場合、どのようにトランザクションを開始できますか?トランザクションMySQL
私は2番目の文がエラーに対処するときにはロールバックしません。次の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;
をしました。どうして? 'teachingSubject'はTINYINT(2)です.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)
教師テーブルではid = 11121のレコードはありませんが、ユーザーテーブルではありません。