1. 程式人生 > >Mysql --針對庫中的所有表生成select count(*)對應的SQL語句

Mysql --針對庫中的所有表生成select count(*)對應的SQL語句

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
create table emp_bonus(
emp_no int not null,
recevied datetime not
null, btype smallint not null); CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`)); CREATE TABLE `dept_manager` ( `dept_no` char(4) NOT NULL, `emp_no` int(11) NOT NULL, `from_date` date
NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`)); CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));

輸出格式:
cnts
select count(* ) from employees;
select count(* ) from departments;
select count(* ) from dept_emp;
select count(* ) from dept_manager;
select count(* ) from salaries;
select count(* ) from titles;
select count(* ) from emp_bonus;

首先了解SQLITE_MASTER:
SQLite資料庫中一個特殊的名叫 SQLITE_MASTER 上執行一個SELECT查詢以獲得所有表的索引。每一個 SQLite 資料庫都有一個叫 SQLITE_MASTER 的表, 它定義資料庫的模式。 SQLITE_MASTER 表看起來如下:
CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);
對於表來說,type 欄位永遠是 ‘table’,name 欄位永遠是表的名字。
解答如下:

select "select count(*) from "||name||";"
as cnts from sqlite_master where type='table'