drop table if exists t1,t2; create table t1 ( a int primary key, b char(10) ); insert into t1 values (1,'one'); insert into t1 values (2,'two'); insert into t1 values (3,'three'); insert into t1 values (4,'four'); set @a=2; prepare stmt1 from 'select * from t1 where a <= ?'; execute stmt1 using @a; a b 1 one 2 two set @a=3; execute stmt1 using @a; a b 1 one 2 two 3 three deallocate prepare no_such_statement; ERROR HY000: Unknown prepared statement handler (no_such_statement) given to DEALLOCATE PREPARE execute stmt1; ERROR HY000: Incorrect arguments to EXECUTE prepare stmt2 from 'prepare nested_stmt from "select 1"'; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"select 1"' at line 1 prepare stmt2 from 'execute stmt1'; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'stmt1' at line 1 prepare stmt2 from 'deallocate prepare z'; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'z' at line 1 prepare stmt3 from 'insert into t1 values (?,?)'; set @arg1=5, @arg2='five'; execute stmt3 using @arg1, @arg2; select * from t1 where a>3; a b 4 four 5 five prepare stmt4 from 'update t1 set a=? where b=?'; set @arg1=55, @arg2='five'; execute stmt4 using @arg1, @arg2; select * from t1 where a>3; a b 4 four 55 five prepare stmt4 from 'create table t2 (a int)'; execute stmt4; prepare stmt4 from 'drop table t2'; execute stmt4; execute stmt4; ERROR 42S02: Unknown table 't2' prepare stmt5 from 'select ? + a from t1'; set @a=1; execute stmt5 using @a; ? + a 2 3 4 5 56 execute stmt5 using @no_such_var; ? + a NULL NULL NULL NULL NULL set @nullvar=1; set @nullvar=NULL; execute stmt5 using @nullvar; ? + a NULL NULL NULL NULL NULL set @nullvar2=NULL; execute stmt5 using @nullvar2; ? + a NULL NULL NULL NULL NULL prepare stmt6 from 'select 1; select2'; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; select2' at line 1 prepare stmt6 from 'insert into t1 values (5,"five"); select2'; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; select2' at line 1 explain prepare stmt6 from 'insert into t1 values (5,"five"); select2'; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 'insert into t1 values (5,"five"); select2'' at line 1 create table t2 ( a int ); insert into t2 values (0); set @arg00=NULL ; prepare stmt1 from 'select 1 FROM t2 where a=?' ; execute stmt1 using @arg00 ; 1 prepare stmt1 from @nosuchvar; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1 set @ivar= 1234; prepare stmt1 from @ivar; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1234' at line 1 set @fvar= 123.4567; prepare stmt1 from @fvar; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123.4567' at line 1 drop table t1,t2; PREPARE stmt1 FROM "select _utf8 'A' collate utf8_bin = ?"; set @var='A'; EXECUTE stmt1 USING @var; _utf8 'A' collate utf8_bin = ? 1 DEALLOCATE PREPARE stmt1; create table t1 (id int); prepare stmt1 from "select FOUND_ROWS()"; select SQL_CALC_FOUND_ROWS * from t1; id execute stmt1; FOUND_ROWS() 0 insert into t1 values (1); select SQL_CALC_FOUND_ROWS * from t1; id 1 execute stmt1; FOUND_ROWS() 1 execute stmt1; FOUND_ROWS() 0 deallocate prepare stmt1; drop table t1; create table t1 ( c1 tinyint, c2 smallint, c3 mediumint, c4 int, c5 integer, c6 bigint, c7 float, c8 double, c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4), c13 date, c14 datetime, c15 timestamp(14), c16 time, c17 year, c18 bit, c19 bool, c20 char, c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext, c25 blob, c26 text, c27 mediumblob, c28 mediumtext, c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'), c32 set('monday', 'tuesday', 'wednesday') ) engine = MYISAM ; create table t2 like t1; set @stmt= ' explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25 ' ; prepare stmt1 from @stmt ; execute stmt1 ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables 6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table 5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 3 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 2 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found execute stmt1 ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables 6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table 5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 3 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 2 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables 6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table 5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 3 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found 2 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found deallocate prepare stmt1; drop tables t1,t2; set @arg00=1; prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ; execute stmt1 ; select m from t1; m 1 drop table t1; prepare stmt1 from ' create table t1 (m int) as select ? as m ' ; execute stmt1 using @arg00; select m from t1; m 1 deallocate prepare stmt1; drop table t1; create table t1 (id int(10) unsigned NOT NULL default '0', name varchar(64) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY `name` (`name`)); insert into t1 values (1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),(6,'6'),(7,'7'); prepare stmt1 from 'select name from t1 where id=? or id=?'; set @id1=1,@id2=6; execute stmt1 using @id1, @id2; name 1 6 select name from t1 where id=1 or id=6; name 1 6 deallocate prepare stmt1; drop table t1; create table t1 ( a int primary key, b varchar(30)) engine = MYISAM ; prepare stmt1 from ' show table status from test like ''t1%'' '; execute stmt1; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 MyISAM 9 Dynamic 0 0 0 4294967295 1024 0 NULL # # # latin1_swedish_ci NULL show table status from test like 't1%' ; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 MyISAM 9 Dynamic 0 0 0 4294967295 1024 0 NULL # # # latin1_swedish_ci NULL deallocate prepare stmt1 ; drop table t1; create table t1(a varchar(2), b varchar(3)); prepare stmt1 from "select a, b from t1 where (not (a='aa' and b < 'zzz'))"; execute stmt1; a b execute stmt1; a b deallocate prepare stmt1; drop table t1; prepare stmt1 from "select 1 into @var"; execute stmt1; execute stmt1; prepare stmt1 from "create table t1 select 1 as i"; execute stmt1; drop table t1; execute stmt1; prepare stmt1 from "insert into t1 select i from t1"; execute stmt1; execute stmt1; prepare stmt1 from "select * from t1 into outfile 'f1.txt'"; execute stmt1; deallocate prepare stmt1; drop table t1; prepare stmt1 from 'select 1'; prepare STMT1 from 'select 2'; execute sTmT1; 2 2 deallocate prepare StMt1; deallocate prepare Stmt1; ERROR HY000: Unknown prepared statement handler (Stmt1) given to DEALLOCATE PREPARE set names utf8; prepare `ü` from 'select 1234'; execute `ü` ; 1234 1234 set names latin1; execute `ü`; 1234 1234 set names default; create table t1 (a varchar(10)) charset=utf8; insert into t1 (a) values ('yahoo'); set character_set_connection=latin1; prepare stmt from 'select a from t1 where a like ?'; set @var='google'; execute stmt using @var; a execute stmt using @var; a deallocate prepare stmt; drop table t1; create table t1 (a bigint(20) not null primary key auto_increment); insert into t1 (a) values (null); select * from t1; a 1 prepare stmt from "insert into t1 (a) values (?)"; set @var=null; execute stmt using @var; select * from t1; a 1 2 drop table t1; create table t1 (a timestamp not null); prepare stmt from "insert into t1 (a) values (?)"; execute stmt using @var; select * from t1; deallocate prepare stmt; drop table t1; prepare stmt from "select 'abc' like convert('abc' using utf8)"; execute stmt; 'abc' like convert('abc' using utf8) 1 execute stmt; 'abc' like convert('abc' using utf8) 1 deallocate prepare stmt; create table t1 ( a bigint ); prepare stmt from 'select a from t1 where a between ? and ?'; set @a=1; execute stmt using @a, @a; a execute stmt using @a, @a; a execute stmt using @a, @a; a drop table t1; deallocate prepare stmt; create table t1 (a int); prepare stmt from "select * from t1 where 1 > (1 in (SELECT * FROM t1))"; execute stmt; a execute stmt; a execute stmt; a drop table t1; deallocate prepare stmt; create table t1 (a int, b int); insert into t1 (a, b) values (1,1), (1,2), (2,1), (2,2); prepare stmt from "explain select * from t1 where t1.a=2 and t1.a=t1.b and t1.b > 1 + ?"; set @v=5; execute stmt using @v; id select_type table type possible_keys key key_len ref rows Extra - - - - - - - - NULL Impossible WHERE set @v=0; execute stmt using @v; id select_type table type possible_keys key key_len ref rows Extra - - - - - - - - 4 Using where set @v=5; execute stmt using @v; id select_type table type possible_keys key key_len ref rows Extra - - - - - - - - NULL Impossible WHERE drop table t1; deallocate prepare stmt; create table t1 (a int); insert into t1 (a) values (1), (2), (3), (4); set @precision=10000000000; select rand(), cast(rand(10)*@precision as unsigned integer), cast(rand(a)*@precision as unsigned integer) from t1; rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) - 6570515219 - - 1282061302 - - 6698761160 - - 9647622201 - prepare stmt from "select rand(), cast(rand(10)*@precision as unsigned integer), cast(rand(a)*@precision as unsigned integer), cast(rand(?)*@precision as unsigned integer) from t1"; set @var=1; execute stmt using @var; rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer) - 6570515219 - 4054035371 - 1282061302 - 8716141803 - 6698761160 - 1418603212 - 9647622201 - 944590960 set @var=2; execute stmt using @var; rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer) - 6570515219 1559528654 6555866465 - 1282061302 6238114970 1223466192 - 6698761160 6511989195 6449731873 - 9647622201 3845601374 8578261098 set @var=3; execute stmt using @var; rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer) - 6570515219 1559528654 9057697559 - 1282061302 6238114970 3730790581 - 6698761160 6511989195 1480860534 - 9647622201 3845601374 6211931236 drop table t1; deallocate prepare stmt; create database mysqltest1; create table t1 (a int); create table mysqltest1.t1 (a int); select * from t1, mysqltest1.t1; a a prepare stmt from "select * from t1, mysqltest1.t1"; execute stmt; a a execute stmt; a a execute stmt; a a drop table t1; drop table mysqltest1.t1; drop database mysqltest1; deallocate prepare stmt; select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2'; a a 1.1 1.2 2.1 2.2 prepare stmt from "select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2'"; execute stmt; a a 1.1 1.2 2.1 2.2 execute stmt; a a 1.1 1.2 2.1 2.2 execute stmt; a a 1.1 1.2 2.1 2.2 deallocate prepare stmt; create table t1 (a int); insert into t1 values (1),(2),(3); create table t2 select * from t1; prepare stmt FROM 'create table t2 select * from t1'; drop table t2; execute stmt; drop table t2; execute stmt; execute stmt; ERROR 42S01: Table 't2' already exists drop table t2; execute stmt; drop table t1,t2; deallocate prepare stmt; create table t1 (a int); insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); prepare stmt from "select sql_calc_found_rows * from t1 limit 2"; execute stmt; a 1 2 select found_rows(); found_rows() 10 execute stmt; a 1 2 select found_rows(); found_rows() 10 execute stmt; a 1 2 select found_rows(); found_rows() 10 deallocate prepare stmt; drop table t1; CREATE TABLE t1 (N int, M tinyint); INSERT INTO t1 VALUES (1,0),(1,0),(2,0),(2,0),(3,0); PREPARE stmt FROM 'UPDATE t1 AS P1 INNER JOIN (SELECT N FROM t1 GROUP BY N HAVING COUNT(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2'; EXECUTE stmt; DEALLOCATE PREPARE stmt; DROP TABLE t1;