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

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

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

mysql> create table if not exists PLAYERS(id int(5),name varchar(20));
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show warnings;
+-------+------+--------------------------------+
| Level | Code | Message                        |
+-------+------+--------------------------------+
| Note  | 1050 | Table 'PLAYERS' already exists |
+-------+------+--------------------------------+
1 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(11) | NO   | PRI | NULL    |       |
| PLAYERNO | int(11) | NO   |     | NULL    |       |
| DIVISION | char(6) | NO   |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> create table copy_TEAMS like TEAMS;
Query OK, 0 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(11) | NO   | PRI | NULL    |       |
| PLAYERNO | int(11) | NO   |     | NULL    |       |
| DIVISION | char(6) | NO   |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
3 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, 13 rows affected (0.15 sec)
Records: 13  Duplicates: 0  Warnings: 0mysql> select * from p_m;
+-----------+-----+---------+-----+------+
| NAME      | SEX | MATCHNO | WON | LOST |
+-----------+-----+---------+-----+------+
| Parmenter | M   |       1 |   3 |    1 |
| Parmenter | M   |       2 |   2 |    3 |
| Parmenter | M   |       3 |   3 |    0 |
| Baker     | M   |       4 |   3 |    2 |
| Hope      | M   |       5 |   0 |    3 |
| Everett   | M   |       6 |   1 |    3 |
| Brown     | M   |       7 |   3 |    0 |
| Newcastle | F   |       8 |   0 |    3 |
| Collins   | F   |       9 |   3 |    2 |
| Moorman   | F   |      10 |   3 |    2 |
| Bailey    | F   |      11 |   2 |    3 |
| Bailey    | F   |      12 |   1 |    3 |
| Newcastle | F   |      13 |   0 |    3 |
+-----------+-----+---------+-----+------+
13 rows in set (0.00 sec)

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

注意:

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

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

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

转载于:https://www.cnblogs.com/geaozhang/p/6782285.html

MySQL临时表创建及旧表建新表相关推荐

  1. mysql临时表创建_MySQL临时表创建

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

  2. mysql中递增列_如何使用JDBC在MySQL中创建带有自动递增列的表?

    在创建表时,在某些情况下,我们需要自动生成/增加列的值(例如ID).各种数据库以不同的方式支持此功能. 在MySQL数据库中,您可以使用以下语法声明列自动递增.CREATE TABLE table_n ...

  3. sql 语句left join关联超过2张表时,随着left join一路向左,永远只能是最左边的关联表与新表关联吗?还是母表可以一直on下去?

    今天这个帖子要解决一个问题:oracle数据库表间通过left join关联超过2张表时,随着left join一路向左,永远只能是最左边的关联表与新表关联吗?还是母表可以一直on 下去? 利用sql ...

  4. mysql 临时表增加主键_MySQL之重建表

    //MySQL之重建表// 在MySQL中,如果我们对大表频繁进行insert和delete操作,那么时间一长,这个表中会出现很多"空洞",也就是表碎片. 碎片产生的原因是inse ...

  5. MYSQL临时表创建索引

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

  6. mysql数据库创建一个点餐系统用户表

    create table('id'varchar(20), 'name'varchar(20), 'sex'varchar(1), 'Tel'varchar(11), 'password'varcha ...

  7. oracle 怎么复制表,oracle数据库如何复制表到新表?-Oracle

    我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INT ...

  8. mysql交互式创建表_用mysql语句创建数据表详细教程

    MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 一般有两种创建表的方法: 1.使用具有交互式创建和管理表的工具: 2.表也可以直接用MySQL语句操纵. ...

  9. php语句创建数据表,用mysql语句创建数据表详细教程

    MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 一般有两种创建表的方法: 1.使用具有交互式创建和管理表的工具: 2.表也可以直接用MySQL语句操纵. ...

最新文章

  1. java map在前端遍历_遍历循环输出map的几种方式
  2. 机器学习算法与Python实践之(一)k近邻(KNN)
  3. 【PAT乙级】1075 链表元素分类 (25 分)
  4. cuda安装配置VS2013
  5. vb 窗体html表格,VB.Net – 高级表格
  6. 每日英语:Go Ahead, Hit the Snooze Button
  7. php mate,[树莓派] ubuntu-mate配置nginx + php7.0环境
  8. 无线电频段属国家资源,不是你想用就能用
  9. C#LeetCode刷题之#706-设计哈希映射(Design HashMap)
  10. 机器人softmove_ABB 工业机器人 SoftMove功能介绍
  11. netdev FAQ
  12. 数据集中异常值的处理之lof,iforest算法
  13. POJ P3764 The xor-longest Path
  14. dell进入u盘启动模式_戴尔Dell笔记本电脑的BIOS怎么设置从U盘启动
  15. 智力问答选择题_智力问答题题库
  16. 总价+激励合同(FPIF)的计算,与CPIF的区别
  17. R语言使用epiDisplay包的logistic.display函数获取二分类logistic回归模型的汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值、简化汇总结果
  18. realme支持鸿蒙系统,骁龙888+首批搭载安卓12,realme真我GT真香售价2499元起
  19. [附源码]Python计算机毕业设计电脑配件仓储后台管理系统
  20. 日式风格小荷才露尖尖角

热门文章

  1. 十大项目管理知识-相关方识别管理
  2. python建立资料库_python 建立数据库
  3. server sent event
  4. ALGOL语言 发展历史
  5. MFC之CFile读取和写入文件
  6. 【linux】循序渐进学运维-基础篇-修复文件系统实战
  7. 元器件学习——————三极管
  8. 服务器更新维护公告语,6月1日阴阳师服务器更新维护内容公告
  9. 【异常分析】Springboot中使用测试类报空指针(at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs)
  10. doceker使用教程(一)