/Upload/documents/handbook/database/mysql-storage-process-detailed/mysql-storage-process-detailed-error-handling.html
HTML | 197 lines | 191 code | 6 blank | 0 comment | 0 complexity | ca20e8c8d23b9cf9659a98e48e7a01ed MD5 | raw file
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <title>The DoYouHaoBaby PHP Framework For PHP5 | ????????</title>
- <meta http-equiv="content-type" content="text/html; charset=gbk" />
- <meta name="Author" content="???Dyhb">
- <meta name="Keywords" content="DoYouHaoBaby,Framework">
- <meta name="Description" content="The DoYouHaoBaby PHP Framework | ?????????????">
- <link rel="stylesheet" type="text/css" href="./../../media/css/style.css" />
- <link rel="stylesheet" type="text/css" href="./../../media/css/highlight.css" />
- </head>
- <body style="margin:0">
- <div id="header"><img src="./../../media/images/logo.png" border="0" title="The DoYouHaoBaby PHP Framework Logo" ></div>
- <div id="content">
- <div id="version">
- The DoYouHaoBaby PHP Framework????????<br>
- Copyright(c) <a href="http://doyouhaobaby.net">DoYouHaoBaby.NET</a>
- All Rights Reserved.
- </div>
-
-
- <div class="menu">
- <table cellspacing=0 cellpadding=0 width="95%" border=0>
- <tbody>
- <tr>
- <th align=middle colspan=3>The DoYouHaoBaby PHP Framework????????</th>
- </tr>
- <tr>
- <td valign=bottom align=left width="25%">
- <a accesskey="p" href="../../index.html">??</a>?
- </td>
- <td valign=bottom align=middle width="50%">
- </td>
- <td valign=bottom align=right width="25%">
- <a accesskey="n" href="./index.html">??</a>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-
- <div id="box">
- <div class="title">[ ???? ]</div>
- <div class="detail">
- <p>
- ?????????</p>
- <ul>
- <li>
- ????</li>
- <li>
- ?????</li>
- <li>
- ??</li>
- </ul>
- <p>
- ???????????????<br />
- <br />
- <div class="title2"><strong>?????????</strong></div><br />
- ?INSERT???????????????????????????????????????????????????INSERT?????????????????????????????????????????????????????????????<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>mysql> CREATE TABLE t2 </SPAN></SPAN></LI>
- <LI><SPAN>s1 INT, PRIMARY KEY (s1)) </SPAN></LI>
- <LI class=alt><SPAN>engine=innodb;</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI><SPAN>mysql> CREATE TABLE t3 (s1 INT, KEY (s1), FOREIGN KEY (s1) REFERENCES t2 (s1)) engine=innodb;</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI class=alt><SPAN>mysql> INSERT INTO t3 VALUES (5);</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI><SPAN>... </SPAN></LI>
- <LI class=alt><SPAN>ERROR 1216 (23000): Cannot add </SPAN><SPAN class=keyword>or</SPAN><SPAN> update a child row: a foreign key constraint fails ??????????????? </SPAN></SPAN></LI></OL></DIV>
- <br />
- ??????????????????????????InnoDB?????????????????????????????????????????????????????????1216?<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>CREATE TABLE </SPAN><SPAN class=func>error_log</SPAN><SPAN> (error_message </SPAN></SPAN></LI>
- <LI><SPAN>CHAR(80))</SPAN><SPAN class=comment>//</SPAN><SPAN> </SPAN></SPAN></LI></OL></DIV><br />
- ?????????????????????????<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>CREATE PROCEDURE p22 (parameter1 INT) BEGIN </SPAN></SPAN></LI>
- <LI><SPAN>DECLARE </SPAN><SPAN class=func>EXIT</SPAN><SPAN> HANDLER FOR 1216 </SPAN></SPAN></LI>
- <LI class=alt><SPAN>INSERT INTO </SPAN><SPAN class=func>error_log</SPAN><SPAN> VALUES (CONCAT('Time: ',current_date, </SPAN></SPAN></LI>
- <LI><SPAN>'. Foreign Key Reference Failure For </SPAN></LI>
- <LI class=alt><SPAN>Value = ',parameter1)); </SPAN></LI>
- <LI><SPAN>INSERT INTO t3 VALUES (parameter1); </SPAN></LI>
- <LI class=alt><SPAN></SPAN><SPAN class=func>END</SPAN><SPAN>;</SPAN><SPAN class=comment>//</SPAN><SPAN> </SPAN></SPAN></LI></OL></DIV>
- <br />
- ??????????????????DECLARE EXIT HANDLER????????????????1215??????????????????????EXIT????????????????????<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>CALL p22 (5) </SPAN><SPAN class=comment>//</SPAN><SPAN> </SPAN></SPAN></LI></OL></DIV>
- <br />
- ???????????????????5??????????????????????????????????????t3?????????????error_log???? ????????????? INSERT into table t3 ?????<br />
- <br />
- <div class="title2"><strong>?????????</strong></div><br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>DECLARE </SPAN></SPAN></LI>
- <LI><SPAN>{ </SPAN><SPAN class=func>EXIT</SPAN><SPAN> | CONTINUE } HANDLER FOR </SPAN></SPAN></LI>
- <LI class=alt><SPAN>{ error-number | { SQLSTATE error-string } | condition } SQL statement </SPAN></LI></OL></DIV>
- <br />
- ???????????????????????????????MySQL???????????EXIT????????????????????????????CONTINUE?????EXIT????????????????????????????????????????<br />
- <br />
- <strong>1.CONTINUE????</strong><br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>CREATE TABLE t4 (s1 int,primary key(s1));</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI><SPAN>CREATE PROCEDURE p23 () </SPAN></LI>
- <LI class=alt><SPAN>BEGIN </SPAN></LI>
- <LI><SPAN>DECLARE CONTINUE HANDLER </SPAN></LI>
- <LI class=alt><SPAN>FOR SQLSTATE '23000' SET @x2 = 1; SET @x = 1; </SPAN></LI>
- <LI><SPAN>INSERT INTO t4 VALUES (1); SET @x = 2; </SPAN></LI>
- <LI class=alt><SPAN>INSERT INTO t4 VALUES (1); SET @x = 3; </SPAN></LI>
- <LI><SPAN></SPAN><SPAN class=func>END</SPAN><SPAN>;</SPAN><SPAN class=comment>//</SPAN><SPAN> </SPAN></SPAN></LI></OL></DIV>
- <br />
- ??MySQL??????CONTINUE?????????????????????????????????????CONTINUE?????????<br />
- <br />
- <strong>2. ??CONTINUE????</strong><br />
- ?????SQLSTATE????????????????????MySQL????1216????????23000SQLSTATE??????????????????????????????????????????"SET @x = 1"?????1???????????@x????2??????????????????????????????????????????????????????????????????????????????@x2???2??????????????CONTINUE??????????????????????<br />
- ?????@x???3???<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>mysql> CALL p23()</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI><SPAN>Query OK, 0 rows affected (0.00 sec) </SPAN></LI>
- <LI class=alt><SPAN>mysql> SELECT @x, @x2</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI><SPAN>+------+------+ </SPAN></LI>
- <LI class=alt><SPAN>| @x | @x2 | </SPAN></LI>
- <LI><SPAN>+------+------+ </SPAN></LI>
- <LI class=alt><SPAN>| 3 | 1 | </SPAN></LI>
- <LI><SPAN>+------+------+ </SPAN></LI>
- <LI class=alt><SPAN>1 row in set (0.00 sec) </SPAN></LI></OL></DIV>
- <br />
- ?????????@x????????????3???@x2????1?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????</p>
- <p>
- <strong>1???CONTINUE</strong><br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>CREATE PROCEDURE p24 () </SPAN></SPAN></LI>
- <LI><SPAN>BEGIN </SPAN></LI>
- <LI class=alt><SPAN>DECLARE `Constraint Violation` CONDITION FOR SQLSTATE '23000'; </SPAN></LI>
- <LI><SPAN>DECLARE </SPAN><SPAN class=func>EXIT</SPAN><SPAN> HANDLER FOR </SPAN></SPAN></LI>
- <LI class=alt><SPAN>`Constraint Violation` ROLLBACK; </SPAN></LI>
- <LI><SPAN> START TRANSACTION; </SPAN></LI>
- <LI class=alt><SPAN>INSERT INTO t2 VALUES (1); </SPAN></LI>
- <LI><SPAN>INSERT INTO t2 VALUES (1); </SPAN></LI>
- <LI class=alt><SPAN>COMMIT; </SPAN></LI>
- <LI><SPAN></SPAN><SPAN class=func>END</SPAN><SPAN>; </SPAN><SPAN class=comment>//</SPAN><SPAN> </SPAN></SPAN></LI></OL></DIV>
- <br />
- ???????????????????????????????SQLSTATE??????????????????????????????????????????????t2???InnoDB???????????????ROLLBACK?????ROLLBACK???????????????????????????????SQLSTATE 23000???????SQLSTATE 23000??????<br />
- <br />
- <strong>2. ????</strong><br />
- ?????????ROLLBACK???????SQLSTATE 23000?????<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>mysql> CALL p24()</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI><SPAN>Query OK, 0 rows affected (0.28 sec) </SPAN></LI>
- <LI class=alt><SPAN> </SPAN></LI>
- <LI><SPAN> </SPAN></LI>
- <LI class=alt><SPAN>mysql> SELECT * FROM t2</SPAN><SPAN class=comment>// Empty set (0.00 sec)</SPAN><SPAN> </SPAN></SPAN></LI></OL></DIV>
- <br />
- ????????????????????????????t2???????????????????????????<br />
- <DIV class=dp-highlighter><DIV class=bar></DIV>
- <OL class=dp-c>
- <LI class=alt><SPAN><SPAN>mysql> CREATE PROCEDURE p9 () </SPAN></SPAN></LI>
- <LI><SPAN>-> BEGIN </SPAN></LI>
- <LI class=alt><SPAN>-> DECLARE </SPAN><SPAN class=func>EXIT</SPAN><SPAN> HANDLER FOR NOT FOUND BEGIN </SPAN><SPAN class=func>END</SPAN><SPAN>; </SPAN></SPAN></LI>
- <LI><SPAN>-> DECLARE </SPAN><SPAN class=func>EXIT</SPAN><SPAN> HANDLER FOR SQLEXCEPTION BEGIN </SPAN><SPAN class=func>END</SPAN><SPAN>; </SPAN></SPAN></LI>
- <LI class=alt><SPAN>-> DECLARE </SPAN><SPAN class=func>EXIT</SPAN><SPAN> HANDLER FOR SQLWARNING BEGIN </SPAN><SPAN class=func>END</SPAN><SPAN>; </SPAN></SPAN></LI>
- <LI><SPAN>-> </SPAN><SPAN class=func>END</SPAN><SPAN>;</SPAN><SPAN class=comment>// </SPAN><SPAN> </SPAN></SPAN></LI>
- <LI class=alt><SPAN>Query OK, 0 rows affected (0.00 sec) </SPAN></LI></OL></DIV>
- <br />
- ????????????NOT FOUND (????), SQLEXCEPTION (??),SQLWARNING (?????)???????????????????????????????????????"DECLARE SQLEXCEPTION CONDITION ..."?????????????<br />
- <br />
- <span style="color: rgb(0, 128, 0);"><u><em><strong>To be continue!</strong></em></u></span></p>
-
- </div>
- </div>
-
- <div class="menu">
- <table cellspacing=0 cellpadding=0 width="95%" border=0>
- <tbody>
- <tr>
- <td valign=top align=middle width="34%">
- <a accesskey="h" href="../../index.html">??</a>
- </td>
- </tr>
- <tr>
- <td valign=top align=middle width="34%">
- <a accesskey="u" href="./index.html">??</a>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-
- </div>
- <div id="footer">Copyright (c) <a href="http://doyouhaobaby.net" title="The DoYouHaoBaby Framework" >DoYouHaoBaby</a> All rights reserved.?</div>
- </body>
- </html>