二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:CREATE TEMPORARY TABLE 创建临时表
MySQL 临时表用于一些临时数据时是非常有用的
临时表只在当前连接可见,当关闭连接时,MySQL 会自动删除表并释放所有空间
因为 MySQL 临时表只在当前连接可见,如果使用 PHP 脚本来创建 MySQL 临时表,那每当 PHP 脚本执行完成后,该临时表也会自动销毁
如果连接到
MySQL使用持久性连接,那么只有在关闭客户端程序时才会销毁临时表,当然也可以手动销毁创建临时表
命令
CREATE TEMPORARY TABLE tablename命令用来创建临时表创建临时表的语法和
CREATE TABLE tablename是一样的,只是多了一个TEMPORARY关键字例如下面的语句用于创建一个临时表
tbl_language_tempCREATE TEMPORARY TABLE IF NOT EXISTS `tbl_language_tmp`( `id` INT UNSIGNED AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL, `url` VARCHAR(128) NOT NULL, `founded_at` DATE, PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;为了演示如何创建临时表和临时表的特性,我们需要打开两个终端,连接登录到
MySQL服务,然后切换到twle数据库,我们假设两个终端的名字为a和b
分别在 a 和 b 终端下使用
SHOW TABLES;命令查看当前数据库有多少表a 终端
MariaDB [twle]> SHOW TABLES; +----------------+ | Tables_in_twle | +----------------+ | tbl_language | +----------------+ 1 row in set (0.01 sec)b 终端
MariaDB [twle]> SHOW TABLES; +----------------+ | Tables_in_twle | +----------------+ | tbl_language | +----------------+ 1 row in set (0.01 sec)两个终端中的表一摸一样
如果你的和我的不一样,没关系,因为和当前数据库中有多少表一点关系都没有
在 a 终端中运行以下语句创建临时表
tbl_language_tempCREATE TEMPORARY TABLE IF NOT EXISTS `tbl_language_tmp`( `id` INT UNSIGNED AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL, `url` VARCHAR(128) NOT NULL, `founded_at` DATE, PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;运行结果如下
MariaDB [twle]> CREATE TEMPORARY TABLE IF NOT EXISTS `tbl_language_tmp`( -> `id` INT UNSIGNED AUTO_INCREMENT, -> `name` VARCHAR(64) NOT NULL, -> `url` VARCHAR(128) NOT NULL, -> `founded_at` DATE, -> PRIMARY KEY ( `id` ) -> )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; Query OK, 0 rows affected (0.01 sec)然后使用
SHOW TABLES;命令查看一下当前数据中有多少表MariaDB [twle]> SHOW TABLES; +----------------+ | Tables_in_twle | +----------------+ | tbl_language | +----------------+ 1 row in set (0.01 sec)咦,没看到我们创建的临时表啊,不用着急,这是因为
SHOW TABLES;命令是看不到表的就是你看不到也摸不到,但是表就在那里
我们可以使用下面的语句往
tbl_language_tmp中插入数据INSERT INTO `tbl_language_tmp` (`name`,`url`,`founded_at`) VALUES ('Python','https://www.twle.cn','1991-2-20');运行结果如下
MariaDB [twle]> INSERT INTO `tbl_language_tmp` (`name`,`url`,`founded_at`) VALUES ('Python','https://www.twle.cn','1991-2-20'); Query OK, 1 row affected (0.00 sec)可以使用
SELECT * FROM tbl_language_tmp;查询表中的数据MariaDB [twle]> SELECT * FROM tbl_language_tmp; +----+--------+---------------------+------------+ | id | name | url | founded_at | +----+--------+---------------------+------------+ | 1 | Python | https://www.twle.cn | 1991-02-20 | +----+--------+---------------------+------------+ 1 row in set (0.00 sec)然后我们在终端 b 中使用
SELECT * FROM tbl_language_tmp;查询表中的数据MariaDB [twle]> SELECT * FROM tbl_language_tmp; ERROR 1146 (42S02): Table 'twle.tbl_language_tmp' doesn't exist说明临时表只有创建时的连接内效用
使用
CTRL+C命令断开 a 终端中的连接,然后重新登录切换到twle数据库,运行SELECT * FROM tbl_language_tmp;查询表中的数据MariaDB [twle]> SELECT * FROM tbl_language_tmp; ERROR 1146 (42S02): Table 'twle.tbl_language_tmp' doesn't exist发现断开后重新再连,表已经被删除了