1、创建临时表

  临时表是一张表,用来临时保存一些数据

特点:

  只对创建该临时表的用户可见;

  当会话结束时,MySQL自动删除临时表。

临时表的核心:建表和删表消耗资源极其少


创建临时表的基本格式:

  CREATE TEMPORARY TABLE  tbl_name(……);

①创建的临时表在当前会话,正常使用

②断开连接,再重新连接后执行查询,抛出异常:

  错误代码: 1146

  Table ‘db_name.temtbl_name’ doesn‘t exist。//该临时表在会话结束的时候被系统删除。


注意:用户可以创建一个和已有的普通表名字相同的临时表。

在这种情况下,

  该用户只能看到临时表而看不见同名的普通表;

  当临时表被删除后,才可以看到普通表。

示例:使用相同的名字创建一个普通表和临时表

  1. mysql> create table test_table(num int);
  2. Query OK, rows affected (0.12 sec)
  3.  
  4. mysql> insert into test_table values();
  5. Query OK, row affected (0.04 sec)
  6.  
  7. mysql> create temporary table test_table(num int,name varchar());
  8. Query OK, rows affected (0.04 sec)
  9.  
  10. mysql> insert into test_table values(,'临时表测试');
  11. Query OK, row affected (0.00 sec)
  12.  
  13. mysql> select * from test_table;
  14. +------+-----------------+
  15. | num | name |
  16. +------+-----------------+
  17. | | 临时表测试 |
  18. +------+-----------------+
  19. row in set (0.00 sec)
  20.  
  21. mysql> drop table test_table;
  22. Query OK, rows affected (0.00 sec)
  23.  
  24. mysql> select * from test_table;
  25. +------+
  26. | num |
  27. +------+
  28. | |
  29. +------+
  30. row in set (0.00 sec)

Q:当创建表时,如果表已经存在了,则MySQL会返回出错消息,我们不希望看到报错的信息,该如何处理?

A:添加IF NOT EXISTS选项,则强制不显示这个出错消息;但是,语句执行失败---建表失败。

  1. mysql> create table if not exists PLAYERS(id int(),name varchar());
  2. Query OK, rows affected, warning (0.00 sec)
  3.  
  4. mysql> show warnings;
  5. +-------+------+--------------------------------+
  6. | Level | Code | Message |
  7. +-------+------+--------------------------------+
  8. | Note | | Table 'PLAYERS' already exists |
  9. +-------+------+--------------------------------+
  10. row in set (0.00 sec)
  11.  
  12. mysql> show tables;
  13. +-------------------+
  14. | Tables_in_TENNIS |
  15. +-------------------+
  16. | COMMITTEE_MEMBERS |
  17. | MATCHES |
  18. | PENALTIES |
  19. | PLAYERS |
  20. | TEAMS |
  21. | test_table |
  22. +-------------------+
  23. 6 rows in set (0.00 sec)

2、根据已有的表来创建新表

语法1:只想拷贝表结构

  CREATE TABLE new_tbl LIKE orig_tbl;

将从源表复制列名、数据类型、大小、非空约束以及索引;而表的内容以及其它约束不会复制,新表是一张空表。

  1. mysql> desc TEAMS;
  2. +----------+---------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +----------+---------+------+-----+---------+-------+
  5. | TEAMNO | int() | NO | PRI | NULL | |
  6. | PLAYERNO | int() | NO | | NULL | |
  7. | DIVISION | char() | NO | | NULL | |
  8. +----------+---------+------+-----+---------+-------+
  9. rows in set (0.00 sec)
  10.  
  11. mysql> create table copy_TEAMS like TEAMS;
  12. Query OK, rows affected (0.11 sec)
  13.  
  14. mysql> select * from copy_TEAMS;
  15. Empty set (0.00 sec)
  16.  
  17. mysql> desc copy_TEAMS;
  18. +----------+---------+------+-----+---------+-------+
  19. | Field | Type | Null | Key | Default | Extra |
  20. +----------+---------+------+-----+---------+-------+
  21. | TEAMNO | int() | NO | PRI | NULL | |
  22. | PLAYERNO | int() | NO | | NULL | |
  23. | DIVISION | char() | NO | | NULL | |
  24. +----------+---------+------+-----+---------+-------+
  25. rows in set (0.00 sec)

语法2:根据SELECT子查询的拷贝

  CREATE TABLE new_tbl [AS] SELECT {*|column,...} FROM orig_tbl;

新表的结构由select列表决定;同时把查询返回的结果集中的行插入到目标表中;只能把非空约束带入到新表中(在有的时候就会显得很鸡肋了),也不会复制索引

  1. mysql> create table p_m
  2. -> as
  3. -> select a.NAME,a.SEX,b.MATCHNO,b.WON,b.LOST
  4. -> from PLAYERS a,MATCHES b
  5. -> where a.PLAYERNO=b.PLAYERNO;
  6. Query OK, rows affected (0.15 sec)
  7. Records: Duplicates: Warnings:
  8.  
  9. mysql> select * from p_m;
  10. +-----------+-----+---------+-----+------+
  11. | NAME | SEX | MATCHNO | WON | LOST |
  12. +-----------+-----+---------+-----+------+
  13. | Parmenter | M | | | |
  14. | Parmenter | M | | | |
  15. | Parmenter | M | | | |
  16. | Baker | M | | | |
  17. | Hope | M | | | |
  18. | Everett | M | | | |
  19. | Brown | M | | | |
  20. | Newcastle | F | | | |
  21. | Collins | F | | | |
  22. | Moorman | F | | | |
  23. | Bailey | F | | | |
  24. | Bailey | F | | | |
  25. | Newcastle | F | | | |
  26. +-----------+-----+---------+-----+------+
  27. rows in set (0.00 sec)

通过根据已有表来创建新表,添加选项temporary,创建临时副本用来做练习最合适:表内容可一样,会话结束,临时表自动删除,原始表中的内容不受任何影响。

注意:

  如果在表名后面指定的列名和原始表中的列名相同,则可以改变列的大小和非空约束;

  如果在表名后面指定的列名和原始表中的列名不同,则它作为一个新的列。

  1. mysql> select * from TEAMS;
  2. +--------+----------+----------+
  3. | TEAMNO | PLAYERNO | DIVISION |
  4. +--------+----------+----------+
  5. | | | first |
  6. | | | second |
  7. +--------+----------+----------+
  8.  
  9. mysql> CREATE TABLE teams_copy
  10. -> (
  11. -> teamno INTEGER NOT NULL PRIMARY KEY,
  12. -> playerno INTEGER NULL,
  13. -> division char() NOT NULL,
  14. -> coach varchar()
  15. -> )
  16. -> as
  17. -> select * from TEAMS;
  18. Query OK, rows affected (0.11 sec)
  19. Records: Duplicates: Warnings:
  20.  
  21. mysql> select * from teams_copy;
  22. +-------+--------+----------+----------+
  23. | coach | TEAMNO | PLAYERNO | DIVISION |
  24. +-------+--------+----------+----------+
  25. | NULL | | | first |
  26. | NULL | | | second |
  27. +-------+--------+----------+----------+

MySQL临时表创建及旧表建新表的更多相关文章

  1. Mysql数据库多对多关系未建新表

    原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢? FIND_IN_SET(str,strlist) 官网:http://dev.mysql.com/doc/r ...

  2. Oracle-创建新表,创建备份表,对表中插入多条数据

    一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...

  3. MySQL通过SQL语句来直接生成新表

    1. 既复制表结构,也复制表数据 mysql> CREATE TABLE tmp_table SELECT * FROM dede_news; 说明:这种方法的缺点就是新表中没有了旧表的prim ...

  4. MySQL临时表创建

    和SQL SERVER 创建临时表不同 不能直接写 Create table #Test_Table 而是需要在 Create 和 table 之间 加入 TEMPORARY(temporary< ...

  5. Oracle之现有表上建新表、操作符、字符函数

    #PLSQL技术培训15页PPT利用现有表创建表(百度) 说明:做新操作前要对旧表备份  具体百度 语法: create table <new_table_name> as select ...

  6. MySQL 复制已存在的表生成新表

    从已有的表创建一个新的空表 CREATE TABLE new_table LIKE old_table; 注意: create table ... like 创建的表会保留原有表的字段.索引的定义,但 ...

  7. MYSQL临时表创建索引

    DROP TEMPORARY TABLE IF EXISTS tmp_record_t2;CREATE TEMPORARY TABLE tmp_record_t2(consumption_id INT ...

  8. MySQL完整复制表到另一个新表

    1. 复制表结构 CREATE TABLE newuser LIKE user; 2. 导入数据 INSERT INTO newauser SELECT * FROM user;

  9. linux定时查询mysql数据库并把结果保存到新表 然后备份数据库

    脚本文件名:myshell内容如下: #!/bin/bash # mysql用户名 username="root" # mysql密码 password="root&qu ...

随机推荐

  1. Javascript中快速退出多重循环的技巧

    在双重循环或多重循环中判断条件,条件符合时跳出整个嵌套循环体是常见的程序逻辑.在Javascript中有哪些跳出的方法呢?楼主简单整理了一下. 一. 使用多个break语句跳出 var breaked ...

  2. Simple PWM to Analog Circuit (0-10vdc)

    i just finished this simple circuit and am very satisfied with the result. The output is very stable ...

  3. 自定义Directive使用ngModel

    我们知道ngModel是AngularJS中默认的一个Directive,用于数据的双向绑定.通常是这样使用的: <input type="text" ng-model=&q ...

  4. JVM Debugger Memory View for IntelliJ IDEA

    Posted on August 19, 2016 by Andrey Cheptsov Every day we try to find new ways to improve developer ...

  5. cocos3.x - lua vs2013环境搭建及项目创建示例

    第一步:装vs2013vs 2013下载(没试过) 安装颜色设深色(不伤眼睛),只装c++够用了 第二步:装cocos环境 (如果不打包只为了解引擎之类的话,只装cocos就可以了(就可以了,jdk, ...

  6. 结合MongoDB开发LBS应用(转)

    原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...

  7. SpringBoot(八):系统错误统一拦截器

    在日常 web 开发中发生了异常,往往需要通过一个统一的 异常处理,来保证客户端能够收到友好的提示.本文将会介绍 Spring Boot 中的 全局统一异常处理. Springboot的全局异常查是通 ...

  8. ASP.NET Core入门系列教程

    微软把这个新的框架叫:Razor Pages,以下文中我们将频繁提及—Razor Pages. 项目目录结构 wwwroot静态资源文件夹首先,Razor Pages项目中多了一个wwwroot的文件 ...

  9. grid - 显式网格

    显式网格布局包含:行.列 列 grid-template-columns page { color: #fff; } .grid { padding:1%; display: grid; grid-g ...

  10. Centos或Windows中部署Zookeeper集群及其简单用法

    一.简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件 ...