什么样的SQL语句可以用来准备语句?
实际上,不可能准备所有的 SQL 语句,因为 MySQL 只允许准备以下几种 SQL 语句:
SELECT 语句
示例
mysql> PREPARE stmt FROM 'SELECT tender_value from Tender WHERECompanyname = ?';Query OK, 0 rows affected (0.09 sec)Statement preparedmysql> SET @A = 'Singla Group.';Query OK, 0 rows affected (0.00 sec)mysql> EXECUTE stmt using @A;+--------------+| tender_value |+--------------+| 220.255997 |+--------------+1 row in set (0.07 sec)mysql> DEALLOCATE PREPARE stmt;Query OK, 0 rows affected (0.00 sec)
INSERT, REPLACE, UPDATE和DELETE
修改数据的语句。
示例
mysql> PREPARE stmt1 FROM 'DELETE from Tender WHERE Sr = ?';Query OK, 0 rows affected (0.00 sec)Statement preparedmysql> SET @A = 4;Query OK, 0 rows affected (0.00 sec)mysql> EXECUTE stmt1;ERROR 1210 (HY000): Unknown error 1210mysql> EXECUTE stmt1 using @A;Query OK, 1 row affected (0.08 sec)mysql> DEALLOCATE PREPARE stmt1;Query OK, 0 rows affected (0.00 sec)mysql> Select * from tender;+----+---------------+--------------+| Sr | CompanyName | Tender_value |+----+---------------+--------------+| 1 | Abc Corp. | 250.369003 || 2 | Khaitan Corp. | 265.588989 || 3 | Singla group. | 220.255997 |+----+---------------+--------------+3 rows in set (0.00 sec)
CREATE TABLE 语句。
示例
mysql> PREPARE stmt3 FROM 'CREATE TABLE Student(Id INT, NameVarchar(20))';Query OK, 0 rows affected (0.00 sec)Statement preparedmysql> EXECUTE stmt3;Query OK, 0 rows affected (0.73 sec)mysql> DEALLOCATE PREPARE stmt3;Query OK, 0 rows affected (0.00 sec)
SET、DO 和许多 SHOW 语句
示例
mysql> PREPARE stmt10 FROM 'SHOW TABLES';Query OK, 0 rows affected (0.00 sec)Statement preparedmysql> EXECUTE stmt10;+-------------------+| Tables_in_query |+-------------------+| emp || emp123 || emp_t || examination_btech || new_number || student || student_detail || student_info || tender || website |+-------------------+10 rows in set (0.00 sec)