1、创建临时表

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

特点:

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

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

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


创建临时表的基本格式:

  CREATE TEMPORARY TABLE  tbl_name(……);

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

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

  错误代码: 1146

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


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

在这种情况下,

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

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

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

mysql> create table test_table(num int);
Query OK, rows affected (0.12 sec) mysql> insert into test_table values();
Query OK, row affected (0.04 sec) mysql> create temporary table test_table(num int,name varchar());
Query OK, rows affected (0.04 sec) mysql> insert into test_table values(,'临时表测试');
Query OK, row affected (0.00 sec) mysql> select * from test_table;
+------+-----------------+
| num | name |
+------+-----------------+
| | 临时表测试 |
+------+-----------------+
row in set (0.00 sec) mysql> drop table test_table;
Query OK, rows affected (0.00 sec) mysql> select * from test_table;
+------+
| num |
+------+
| |
+------+
row in set (0.00 sec)

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

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

mysql> create table if not exists PLAYERS(id int(),name varchar());
Query OK, rows affected, warning (0.00 sec) mysql> show warnings;
+-------+------+--------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------+
| Note | | Table 'PLAYERS' already exists |
+-------+------+--------------------------------+
row in set (0.00 sec) mysql> show tables;
+-------------------+
| Tables_in_TENNIS |
+-------------------+
| COMMITTEE_MEMBERS |
| MATCHES |
| PENALTIES |
| PLAYERS |
| TEAMS |
| test_table |
+-------------------+
6 rows in set (0.00 sec)

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

语法1:只想拷贝表结构

  CREATE TABLE new_tbl LIKE orig_tbl;

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

mysql> desc TEAMS;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| TEAMNO | int() | NO | PRI | NULL | |
| PLAYERNO | int() | NO | | NULL | |
| DIVISION | char() | NO | | NULL | |
+----------+---------+------+-----+---------+-------+
rows in set (0.00 sec) mysql> create table copy_TEAMS like TEAMS;
Query OK, rows affected (0.11 sec) mysql> select * from copy_TEAMS;
Empty set (0.00 sec) mysql> desc copy_TEAMS;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| TEAMNO | int() | NO | PRI | NULL | |
| PLAYERNO | int() | NO | | NULL | |
| DIVISION | char() | NO | | NULL | |
+----------+---------+------+-----+---------+-------+
rows in set (0.00 sec)

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

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

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

mysql> create table p_m
-> as
-> select a.NAME,a.SEX,b.MATCHNO,b.WON,b.LOST
-> from PLAYERS a,MATCHES b
-> where a.PLAYERNO=b.PLAYERNO;
Query OK, rows affected (0.15 sec)
Records: Duplicates: Warnings: mysql> select * from p_m;
+-----------+-----+---------+-----+------+
| NAME | SEX | MATCHNO | WON | LOST |
+-----------+-----+---------+-----+------+
| Parmenter | M | | | |
| Parmenter | M | | | |
| Parmenter | M | | | |
| Baker | M | | | |
| Hope | M | | | |
| Everett | M | | | |
| Brown | M | | | |
| Newcastle | F | | | |
| Collins | F | | | |
| Moorman | F | | | |
| Bailey | F | | | |
| Bailey | F | | | |
| Newcastle | F | | | |
+-----------+-----+---------+-----+------+
rows in set (0.00 sec)

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

注意:

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

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

mysql> select * from TEAMS;
+--------+----------+----------+
| TEAMNO | PLAYERNO | DIVISION |
+--------+----------+----------+
| | | first |
| | | second |
+--------+----------+----------+ mysql> CREATE TABLE teams_copy
-> (
-> teamno INTEGER NOT NULL PRIMARY KEY,
-> playerno INTEGER NULL,
-> division char() NOT NULL,
-> coach varchar()
-> )
-> as
-> select * from TEAMS;
Query OK, rows affected (0.11 sec)
Records: Duplicates: Warnings: mysql> select * from teams_copy;
+-------+--------+----------+----------+
| coach | TEAMNO | PLAYERNO | DIVISION |
+-------+--------+----------+----------+
| NULL | | | first |
| NULL | | | second |
+-------+--------+----------+----------+

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. Charles抓包http和https

    本来不打算写的,度娘一搜一大堆各种教程,实在是网上的各种设置的各种坑都有,我还是站在巨人的肩膀上汇总一下吧 首先http的就不用说了,各种教程版本区别不大,也没什么坑,主要是https: 第一步先下载 ...

  2. java之静态方法与非静态方法

    1.静态方法最大的特点就是,不用生成类的实例对象,直接可以用. 2.它的语法格式:<类名|实例名>.<类变量名> 3.Java中的静态方法中,在方法声明时前面要加static ...

  3. [原创]H5前端性能测试工具介绍

    [原创H5前端性能测试工具介绍 一 网络抓包工具 网络抓包工具选择原则,可以捕获网络请求,抓取具体请求信息流,同时可以针对网络请包进行修改或拦截: 1.Fiddler(推荐) 2.Charles(推荐 ...

  4. Facebook's React vs AngularJS: A Closer Look

    When we launched React | A JavaScript library for building user interfaces two weeks ago there were ...

  5. 斗鱼宣布获C轮15亿融资 直播行业进入资本时代

    今天,斗鱼直播宣布完成C轮15亿人民币融资,本轮融资由凤凰投资与腾讯领投,深创投.国家中小企业基金.红土成长等跟投.2016年3月,斗鱼曾获得1亿美元(约合6.7亿元人民币)B轮融资,腾讯出资4亿人民 ...

  6. 关于“UI线程”

    http://www.cppblog.com/Streamlet/archive/2013/05/05/199999.html 缘起 这是一篇找喷的文章. 由于一些历史原因和人际渊源,周围同事谈论一些 ...

  7. android:NinePatch图片制作

    一.工具介绍 这是一张PNG图片,为了方便观看做的比较大.在Android中使用NinePatch图片的一般都是很小的图片,因为当内容多了的时候,背景会自动拉伸来适应内容,而如果图片做大了,内容少,则 ...

  8. C#利用QRCoder生产二维码

    系统使用.NET4.5.1 代码如下: using System; using System.Collections.Generic; using System.Linq; using System. ...

  9. MongoDB学习笔记(一)安装配置

    文档存储:文档存储一般用类似json的格式存储,存储的内容是文档型的. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON ...

  10. ELK菜鸟手记 (二) - 高级配置之多应用索引过滤

    我们在实际的场景中,经常是多个网站或者服务端在一台服务器上,但是如果这些应用全部 记录到一台logstash服务器,大家日志都混在一起不好区分. 有人说,我可以在日志中打项目名,但是这样并不方便. 其 ...