临时表

MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。

将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能

  1. mysql> CREATE TEMPORARY TABLE SalesSummary (
  2. -> product_name VARCHAR(50) NOT NULL
  3. -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
  4. -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
  5. -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
  6. );
  7. Query OK, 0 rows affected (0.00 sec)
  8. mysql> INSERT INTO SalesSummary
  9. -> (product_name, total_sales, avg_unit_price, total_units_sold)
  10. -> VALUES
  11. -> ('cucumber', 100.25, 90, 2);
  12. mysql> SELECT * FROM SalesSummary;
  13. +--------------+-------------+----------------+------------------+
  14. | product_name | total_sales | avg_unit_price | total_units_sold |
  15. +--------------+-------------+----------------+------------------+
  16. | cucumber | 100.25 | 90.00 | 2 |
  17. +--------------+-------------+----------------+------------------+
  18. 1 row in set (0.00 sec)
  19. mysql> DROP TABLE SalesSummary;
  20. mysql> SELECT * FROM SalesSummary;
  21. ERROR 1146: Table 'RUNOOB.SalesSummary' doesn't exist

通过查询复制临时表

CREATE TEMPORARY TABLE 临时表名 AS
(
    SELECT *  FROM 旧的表名
    LIMIT 0,10000
);

临时表也可以在查询中使用

select xxx
from (select xxx,max(xxx) from xxx group by aaa) t
join emp on emp.no = t.no
where xxx = xxx
order by xxx

MySQL 复制表(备份表)

如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用CREATE TABLE … SELECT 命令,是无法实现的。
本章节将为大家介绍如何完整的复制MySQL数据表,步骤如下:

  • 使用 SHOW CREATE TABLE 命令获取创建数据表(CREATE TABLE) 语句,该语句包含了原数据表的完整结构。,索引等。

    mysql> SHOW CREATE TABLE runoob_tbl \G;
    
  • 复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。

  • 如果你想复制表的内容,你就可以使用 INSERT INTO … SELECT 语句来实现。

区分下mysql复制表的两种方式。
第一
create table 新表 like 旧表

insert +select

第二
create table 新表 select * from 旧表 where 1=2