mysql> USE test;
mysql> CREATE TABLE t1 (a INT NOT NULL);
mysql> INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
mysql> SET @table = 't1';
mysql> SET @s = CONCAT('SELECT * FROM ', @table);
mysql> PREPARE stmt3 FROM @s;
mysql> EXECUTE stmt3;
+----+
| a |
+----+
| 4 |
| 8 |
| 11 |
| 32 |
| 80 |
+----+
mysql> DEALLOCATE PREPARE stmt3;
這是簡單的一個mysql prepare語法的測驗陳述句,我有個疑問就是
以下SQL陳述句可用作預備陳述句:
ALTER TABLE
ALTER USER
ANALYZE TABLE
CACHE INDEX
CALL
CHANGE MASTER
CHECKSUM {TABLE | TABLES}
COMMIT
{CREATE | DROP} INDEX
{CREATE | RENAME | DROP} DATABASE
{CREATE | DROP} TABLE
{CREATE | RENAME | DROP} USER
{CREATE | DROP} VIEW
DELETE
DO
FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES
| LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES}
GRANT
INSERT
INSTALL PLUGIN
KILL
LOAD INDEX INTO CACHE
OPTIMIZE TABLE
RENAME TABLE
REPAIR TABLE
REPLACE
RESET {MASTER | SLAVE | QUERY CACHE}
REVOKE
SELECT
SET
SHOW {WARNINGS | ERRORS}
SHOW BINLOG EVENTS
SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW}
SHOW {MASTER | BINARY} LOGS
SHOW {MASTER | SLAVE} STATUS
SLAVE {START | STOP}
TRUNCATE TABLE
UNINSTALL PLUGIN
UPDATE
這些陳述句是要在在哪個陳述句中
是在PREPARE 陳述句中嗎
uj5u.com熱心網友回復:
印象中只要是單陳述句都是可以PREPARE的。LZ這些大概是指這些陳述句都可以被PREPARE參考uj5u.com熱心網友回復:
找不到實體,沒有思路解決這個問題uj5u.com熱心網友回復:
你上面貼的語法是說,這些陳述句是可以作為prepare陳述句的。
uj5u.com熱心網友回復:
創建一個存盤程序,輸入兩個表的名稱$tablename1、$tablename2和一個整數$n,將第一個表中的前$n行記錄復制到第二個表中,并將實際復制的行數通過一個變數進行回傳。假設這個表不存在,則回傳行數為-1。drop procedure if exists sp8;
delimiter $$
create procedure sp8(
$tablename1 varchar(255),
$tablename2 varchar(255),
$n int,
OUT $rowcount int
)
begin
/* 在mysql系統表中去判斷源資料表是否存在,如果存在則回傳-1。*/
if not exists(select * from INFORMATION_SCHEMA.TABLES where
TABLE_SCHEMA='mySales' and TABLE_NAME=$tablename1) then
set $rowcount=-1;
else
/* 檢索表中的總行數。在預處理陳述句中不能使用?作為表名的引數。*/
set @sql=concat('SELECT count(*) into @total FROM ', $tablename1);
prepare stmt FROM @sql;
execute stmt;
if ($n>@total) then set $n=@total; end if; #確定實際可以復制的行數
/* 洗掉表2。*/
set @sql=concat('drop table if exists ', $tablename2);
prepare stmt FROM @sql;
execute stmt;
/* 批量復制表1資料到表2。*/
set @sql=concat('create table ', $tablename2,' select * from ', $tablename1,' limit ', $n);
#SELECT @sql;
prepare stmt FROM @sql;
execute stmt;
deallocate prepare stmt;
set $rowcount=$n;
end if;
end$$
delimiter ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/53850.html
標籤:疑難問題
上一篇:SQL Server
下一篇:為什么我的pycharm已經裝了keras了,而且在pycharm里import keras沒有報錯但是系統一直提醒我找不到keras
