是否可以通过一个请求清除所有表?我尝试了以下没有结果。
DELETE a,b,c,d,e,f,g,h,i,j,k,l,m,n,o
FROM jos_bet_details as a, jos_bet_1x2 as b, jos_bet_1x2_best as c, jos_bet_1x2_prev as d,
jos_bet_1x3 as e, jos_bet_1x3_best as f, jos_bet_1x3_prev g, jos_bet_hcp as h,
jos_bet_hcp_best i, jos_bet_hcp_prev j, jos_bet_ou k,jos_bet_ou_best l,
jos_bet_ou_prev m, jos_bet_debug n, jos_bet_deleted o
Run Code Online (Sandbox Code Playgroud)
这是您的解决方案
SELECT CONCAT('DELETE ',delete_list,' FROM ',table_list)
INTO @mass_delete_table_command
FROM
(
SELECT GROUP_CONCAT(table_name,'.*') delete_list,
GROUP_CONCAT(table_schema,'.',table_name) table_list
FROM
(
SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_schema=database() AND
table_name IN
('jos_bet_details','jos_bet_1x2','jos_bet_1x2_best','jos_bet_1x2_prev',
'jos_bet_1x3','jos_bet_1x3_best','jos_bet_1x3_prev','jos_bet_hcp',
'jos_bet_hcp_best','jos_bet_hcp_prev','jos_bet_ou','jos_bet_ou_best',
'jos_bet_ou_prev','jos_bet_debug','jos_bet_deleted')
) ListOfTables
) DeleteParameters;
PREPARE s1 FROM @mass_delete_table_command;
EXECUTE s1;
DEALLOCATE PREPARE s1;
Run Code Online (Sandbox Code Playgroud)
这背后的原理是:您希望使用information_schema.tables为您动态构建 DELETE 查询。
首先在名为“mass_delete_table_command”的变量中收集表的名称作为删除列表和表列表。然后,将其作为准备好的语句执行。
以下是创建 4 个表、添加记录并删除记录的示例代码:
use test
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3;
DROP TABLE IF EXISTS t4;
CREATE TABLE t1 (n int NOT NULL);
CREATE TABLE t2 like t1;
CREATE TABLE t2 like t1;
CREATE TABLE t3 like t1;
CREATE TABLE t4 like t1;
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7);
INSERT INTO t2 SELECT * FROM t1;
INSERT INTO t3 SELECT * FROM t1;
INSERT INTO t4 SELECT * FROM t1;
SELECT A.*,B.*,C.*,D.* FROM
(SELECT COUNT(1) t1count FROM t1) A,
(SELECT COUNT(1) t2count FROM t2) B,
(SELECT COUNT(1) t3count FROM t3) C,
(SELECT COUNT(1) t4count FROM t4) D;
SELECT CONCAT('DELETE ',delete_list,' FROM ',table_list)
INTO @mass_delete_table_command
FROM
(
SELECT GROUP_CONCAT(table_name,'.*') delete_list,
GROUP_CONCAT(table_schema,'.',table_name) table_list
FROM
(
SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_schema=database() AND
table_name IN ('t1','t2','t3','t4')
) ListOfTables
) DeleteParameters;
SELECT @mass_delete_table_command;
PREPARE s1 FROM @mass_delete_table_command;
EXECUTE s1;
DEALLOCATE PREPARE s1;
SELECT A.*,B.*,C.*,D.* FROM
(SELECT COUNT(1) t1count FROM t1) A,
(SELECT COUNT(1) t2count FROM t2) B,
(SELECT COUNT(1) t3count FROM t3) C,
(SELECT COUNT(1) t4count FROM t4) D;
Run Code Online (Sandbox Code Playgroud)
我在我的 PC 上的 MySQL 5.5.12 中运行了它。这是输出:
mysql> use test
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3;
Database changed
mysql> DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (n int NOT NULL);
CREATE TABLE t2 like t1;
CREATE TABLE t2 like t1;
CREATE TABLE t3 like t1;
CREATE TABLE t4 like t1;
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7);
INSERT INTO t2 SELECT * FROM t1;
INSERT INTO t3 SELECT * FROM t1;
INSERT INTO t4 SELECT * FROM t1;
SELECT A.*,B.*,C.*,D.* FROM
(SELECT COUNT(1) t1count FROM t1) A,
(SELECT COUNT(1) t2count FROM t2) B,
(SELECT COUNT(1) t3count FROM t3) C,
(SELECT COUNT(1) t4count FROM t4) D;
SELECT CONCAT('DELETE ',delete_list,' FROM ',table_list)
INTO @mass_delete_table_command
FROM
(
SELECT GROUP_CONCAT(table_name,'.*') delete_list,
GROUP_CONCAT(table_schema,'.',table_name) table_list
FROM
(
SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_schema=database() AND
table_name IN ('t1','t2','t3','t4')
) ListOfTables
) DeleteParameters;
SELECT @mass_delete_table_command;
PREPARE s1 FROM @mass_delete_table_command;
EXECUTE s1;
DEALLOCATE PREPARE s1;
SELECT A.*,B.*,C.*,D.* FROM
(SELECT COUNT(1) t1count FROM t1) A,
(SELECT COUNT(1) t2count FROM t2) B,
(SELECT COUNT(1) t3count FROM t3) C,
(SELECT COUNT(1) t4count FROM t4) D;
Query OK, 0 rows affected (0.04 sec)
mysql> DROP TABLE IF EXISTS t2;
Query OK, 0 rows affected (0.03 sec)
mysql> DROP TABLE IF EXISTS t3;
Query OK, 0 rows affected (0.03 sec)
mysql> DROP TABLE IF EXISTS t4;
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TABLE t1 (n int NOT NULL);
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE TABLE t2 like t1;
Query OK, 0 rows affected (0.10 sec)
mysql> CREATE TABLE t2 like t1;
ERROR 1050 (42S01): Table 't2' already exists
mysql> CREATE TABLE t3 like t1;
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE TABLE t4 like t1;
Query OK, 0 rows affected (0.25 sec)
mysql> INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7);
Query OK, 7 rows affected (0.08 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> INSERT INTO t2 SELECT * FROM t1;
Query OK, 7 rows affected (0.05 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> INSERT INTO t3 SELECT * FROM t1;
Query OK, 7 rows affected (0.07 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> INSERT INTO t4 SELECT * FROM t1;
Query OK, 7 rows affected (0.06 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SELECT A.*,B.*,C.*,D.* FROM
-> (SELECT COUNT(1) t1count FROM t1) A,
-> (SELECT COUNT(1) t2count FROM t2) B,
-> (SELECT COUNT(1) t3count FROM t3) C,
-> (SELECT COUNT(1) t4count FROM t4) D;
+---------+---------+---------+---------+
| t1count | t2count | t3count | t4count |
+---------+---------+---------+---------+
| 7 | 7 | 7 | 7 |
+---------+---------+---------+---------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT('DELETE ',delete_list,' FROM ',table_list)
-> INTO @mass_delete_table_command
-> FROM
-> (
-> SELECT GROUP_CONCAT(table_name,'.*') delete_list,
-> GROUP_CONCAT(table_schema,'.',table_name) table_list
-> FROM
-> (
-> SELECT table_schema,table_name
-> FROM information_schema.tables
-> WHERE table_schema=database() AND
-> table_name IN ('t1','t2','t3','t4')
-> ) ListOfTables
-> ) DeleteParameters;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT @mass_delete_table_command;
+-----------------------------------------------------------------+
| @mass_delete_table_command |
+-----------------------------------------------------------------+
| DELETE t1.*,t2.*,t3.*,t4.* FROM test.t1,test.t2,test.t3,test.t4 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> PREPARE s1 FROM @mass_delete_table_command;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE s1;
Query OK, 28 rows affected (0.08 sec)
mysql> DEALLOCATE PREPARE s1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT A.*,B.*,C.*,D.* FROM
-> (SELECT COUNT(1) t1count FROM t1) A,
-> (SELECT COUNT(1) t2count FROM t2) B,
-> (SELECT COUNT(1) t3count FROM t3) C,
-> (SELECT COUNT(1) t4count FROM t4) D;
+---------+---------+---------+---------+
| t1count | t2count | t3count | t4count |
+---------+---------+---------+---------+
| 0 | 0 | 0 | 0 |
+---------+---------+---------+---------+
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
这肯定对你有用,只要
试一试 !!!