【SQL篇章】【SQL语句梳理 :--基于MySQL5.6】【已梳理:CREATE TABLE】【会坚持完善】
SQL :
1. Data Definition Statements:
1.3 CREATE TABLE
 
格式:3种建表语句
1.简单SQL表明结构:

CREATE TABLE t7(id INT ,NAME VARCHAR(20), PRIMARY KEY(`id`)) ENGINE=INNODB;

格式:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options]

  

2.简单SQL表名结构:

CREATE TABLE t7(id INT,TIME TIMESTAMP) AS SELECT id,TIME FROM t1 ;

【备注】:MySQL5.6.9之后,若开启GTID模式,参数enforce_gtid_consistency=on会限制此种SQL的执行而报错。
格式:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [partition_options] [IGNORE | REPLACE] [AS] query_expression

  

3.简单SQL表明结构:

CREATE TABLE t7 like t1;

格式:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) }

tb_name:
1.格式:
  tb1_name 或者 `tb1_name`
  db1.tb1_name 或者 `db1`.`tb1_name`
2.IF NOT EXISTS
  不存在时,创建。避免表名重复出现错误。
data_type
  1.AUTO_INCREMENT只用于:integer和floating point.不用于:BLOD和TEXT类型。
  2. 字符数据类型:(CHAR, VARCHAR, TEXT),包括:CHARACTER SET and COLLATE的设置
  eg:CREATE TABLE t1 (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
  3.对于CHAR, VARCHAR, BINARY, and VARBINARY 索引只能用于字段的部分:col_name(length)
  4.只有InnoDB和MyISAM 支持在BLOB和TEXT上设置索引
  eg:

CREATE TABLE t2 (blob_col BLOB, INDEX(blob_col(10)));

  

NOT NULL | NULL
  1.如果不指定NOT NULL和NULL,默认是NULL
  2.在MySQL5.6中只有innodb,myisam,memory存储引擎,支持在列值有NULL的列上建索引。其它情况必须声 明所建索引列not null。
DEFAULT
  1.设置列的默认值,必须使常量。不能设置为函数:NOW(),CURRENT_DATE()
  2.当列为:DATETIME或TIMESTAMP时,可以设置default为:CURRENT_TIMESTAMP
  3.如果没有default值,会根据列的类型,默认指定default值。/*其它文章会梳理着部分内容*/
  4.BLOB和TEXT类型,不会指定默认值。
  5.注意strict mode开启时的限制,例如:NO_ZERO_IN_DATE 
  例句:
CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`num` int(11) NOT NULL DEFAULT '0',`logintime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  

AUTO_INCREMENT
  1.自增列,一表只能有一个,必须使用索引,不能有默认值。自增步长和起始可以通过参数设置,也可通过建表语句指定。
  事例:
CREATE TABLE t2(
id INT NOT NULL AUTO_INCREMENT,
num INT NOT NULL DEFAULT 0,
logintime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=100;

  

  插入数据:
mysql> insert into t2(num) values(1);
Query OK, 1 row affected (0.12 sec)mysql> insert into t2(num) values(2);
Query OK, 1 row affected (0.01 sec)

  

mysql> select * from t2;
+-----+-----+---------------------+
| id | num | logintime |
+-----+-----+---------------------+
| 100 | 1 | 2016-11-16 14:45:20 |
| 101 | 2 | 2016-11-16 14:45:25 |
+-----+-----+---------------------+
2 rows in set (0.00 sec)

  

  通过两个参数分别设置:递增量和起始数值
mysql> show variables like '%auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+

  

COMMENT
字段描述:可以通过show create table;show full columns;查看显示:
事例:
CREATE TABLE t4(
id INT NOT NULL AUTO_INCREMENT COMMENT '序列号',
num INT NOT NULL DEFAULT 0 COMMENT '电话号码',
logintime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '登录时间',
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=100 ;

  

查看:
mysql> show full columns from t4;
+-----------+-----------+-----------+------+-----+-------------------+----------------+---------------------------------+--------------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-----------+-----------+-----------+------+-----+-------------------+----------------+---------------------------------+--------------+
| id | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | 序列号 |
| num | int(11) | NULL | NO | | 0 | | select,insert,update,references | 电话号码 |
| logintime | timestamp | NULL | NO | | CURRENT_TIMESTAMP | | select,insert,update,references | 登录时间 |
+-----------+-----------+-----------+------+-----+-------------------+----------------+---------------------------------+--------------+
3 rows in set (0.00 sec)

COLUMN_FORMAT
  1. 一般用于NDB表的个别列。
  2. FIXED:指定固定的列宽度
  3. DYNAMIC:指定可变列宽度
  4. DEFAULT:两者都可用,根据列类型自动选择。
  5. 对于NDB表,COLUMN_FORMAT是:DEFAULT.对于非NDB引擎表是没有效果的,MySQL5.6之后,默认不开启。STORAGE
  事例:
  只适用于:NDB引擎
CREATE TABLE t5 (
c1 INT STORAGE DISK,
c2 INT STORAGE MEMORY
) ENGINE NDB;CREATE TABLE t1 (
c1 INT STORAGE DISK,
c2 INT STORAGE MEMORY
) TABLESPACE ts_1 ENGINE NDB;

  

CREATE TABLE ... LIKE
格式:
CREATE TABLE new_tbl LIKE orig_tbl;

  

基于另一个表创建空表,包括表的列和索引的定义。
事例:
create table t4 like t2;

  

t2表的定义:
mysql> desc t2;
+-----------+-----------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| num | int(11) | NO | | 0 | |
| logintime | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-----------+------+-----+-------------------+----------------+

  

t4表的定义:
mysql> desc t4;
+-----------+-----------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| num | int(11) | NO | | 0 | |
| logintime | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-----------+------+-----+-------------------+----------------+

  

注意:
  1.从MySQL5.6.1开始,当另一个表处于:LOCK TABLE状态时,不能create table. . . like
  2.当创建新表时的sql_mode和创建原表的sql_mode不同时,表的定义对于新的sql_mode是无效的,导致创建语句失败。
 
CREATE TABLE ... SELECT
格式:
CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

  

  1.只会复制表结构,不复制索引;可以复制指定列。
  2.创建表的列和 select后面的列,要保持一致。
事例:
原表s1:
mysql> desc s1;
+---------+-------------+------+-----+-------------------+-------+
| Field   | Type        | Null | Key | Default           | Extra |
+---------+-------------+------+-----+-------------------+-------+
| id      | int(11)     | NO   | PRI | NULL              |       |
| name    | varchar(20) | YES  |     | NULL              |       |
| LogTime | timestamp   | YES  |     | CURRENT_TIMESTAMP |       |
+---------+-------------+------+-----+-------------------+-------+

  

mysql> select * from s1;
+----+------+---------------------+
| id | name | LogTime             |
+----+------+---------------------+
|  1 | kata | 2016-11-16 16:01:48 |
+----+------+---------------------+

  

创建新表s2、s3
create table s2 as select * from s1;

mysql> desc s2;
+---------+-------------+------+-----+-------------------+-------+
| Field   | Type        | Null | Key | Default           | Extra |
+---------+-------------+------+-----+-------------------+-------+
| id      | int(11)     | NO   |     | NULL              |       |
| name    | varchar(20) | YES  |     | NULL              |       |
| LogTime | timestamp   | YES  |     | CURRENT_TIMESTAMP |       |
+---------+-------------+------+-----+-------------------+-------+

  

mysql> select * FROM s2;
+----+------+---------------------+
| id | name | LogTime             |
+----+------+---------------------+
|  1 | kata | 2016-11-16 16:01:48 |
+----+------+---------------------+

  

创建表s3
create table s3 as select id,name from s2;

  

mysql> desc s3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

  

mysql> select * from s3;
+----+------+
| id | name |
+----+------+
|  1 | kata |
+----+------+

  

创建表时指定新的列名:前后列一致
create table s4(Sid int,Sname varchar(10)) as select id as 'Sid',name as 'Sname' from s1;

  

mysql> desc s4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Sid   | int(11)     | YES  |     | NULL    |       |
| Sname | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

  

创建表时指定的列名:前后不一致时:结果异常

mysql> create table s7(Sid int,Sname varchar(10)) as select id,name from s1;

异常结果:

mysql> desc s7;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Sid   | int(11)     | YES  |     | NULL    |       |
| Sname | varchar(10) | YES  |     | NULL    |       |
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

  

表的物理文件
1.表文件的存储由配置参数:innodb_file_per_table决定
  MySQL版本:<= 5.6.5 默认OFF
  MySQL版本:>= 5.6.6 默认ON
  参数配置开启ON:innodb会将表的data和indexs存储在单独的文件里:.ibd
  参数配置关闭OFF: innodb会将表的data和indexs存储在:系统表空间文件:一个或多个 ibdata* files.
2.MYISAM表的数据文件结构
File Purpose
tbl_name.frm Table format (definition) file
tbl_name.MYD Data file
tbl_name.MYI Index file
 
 
 
 
备注:关于临时表 字段类型和表索引 部分单独梳理!!!

转载于:https://www.cnblogs.com/cuisi/p/6126997.html

【SQL篇章--CREATE TABLE】相关推荐

  1. 第十六章 SQL命令 CREATE TABLE(三)

    文章目录 第十六章 SQL命令 CREATE TABLE(三) 字段数据约束 NULL和NOT NULL UNIQUE DEFAULT DEFAULT Keywords ON UPDATE Colla ...

  2. 第十四章 SQL命令 CREATE TABLE(一)

    文章目录 第十四章 SQL命令 CREATE TABLE(一) 大纲 参数 描述 语法概述 SQL安全和权限 表名 表存在 第十四章 SQL命令 CREATE TABLE(一) 创建表 大纲 CREA ...

  3. SQL Server: create table sql script

    ---摇奖observeh数据库设计 Function getSpace lottery /* -- Author:geovindu 涂聚文 -- Date: 20180427 为了自写生成代码.根据 ...

  4. SQL命令create table if not exist

    1.SQL概述 1.1 SQL语句(结构化查询) SQL(Structured Query Language)结构化查询语言,主要用于存储数据.查询数据.更新数据和管理关系型数据库系统,SQL语言有I ...

  5. sql语句-create table XXX select 和 insert into XXX select 语句的使用

    无需先建表,并将select的查询结果导入到新表中 CREATE TABLE new_emp AS SELECT * FROM emp WHERE deptno IN(20, 30); 将select ...

  6. 如何使用 SQL CREATE TABLE 创建新表

    文章目录 一.创建表 1.1 表创建基础 1.2 使用 NULL 值 1.3 指定默认值 二.更新表 三.删除表 四.重命名表 五.小结 本文介绍如何使用 SQL CREATE TABLE 创建新表, ...

  7. mysql create table()_MySQL Create Table创建表

    表的创建命令需要: 表的名称 字段名称 定义每个字段(类型.长度等) 语法 下面是通用的SQL语法用来创建MySQL表: CREATE TABLE table_name (column_name co ...

  8. MySQL Create Table创建表

    表的创建命令需要: 表的名称 字段名称 定义每个字段(类型.长度等) 语法 下面是通用的SQL语法用来创建MySQL表: CREATE TABLE table_name (column_name co ...

  9. Statement violates GTID consistency: CREATE TABLE ... SELECT.

    1.情况描述 在执行sql:create table table_a_copy  as select * from table_a 时,发现sql执行后,并未生成新的表,而是提示Statement v ...

  10. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

最新文章

  1. Visual SVN 非常好的转贴
  2. 成功解决./nvidia-installer: invalid option: ‐‐no‐opengl‐files ERROR: Invalid commandline, please run `
  3. IROS 2017上,这些厂商将会给我们展示什么样的黑科技?
  4. 中文简体字-繁体字转换 WEB 服务(源代码)
  5. nuxt中必须要知道的一点 关于 nuxt-link 和 a 标签的区别
  6. 计算机科学与技术班级口号八字,班级的八字口号
  7. golang转义json字符串
  8. win10+Ubuntu16.04双系统安装——史上最稳总结,排除一切花里花哨
  9. sip系统完整性是什么?SIP系统完整性保护关闭方法(含M1)
  10. 论文笔记_S2D.34-2015-CVPR_从单张图像进行深度估计的深度卷积神经场
  11. (百看不如一练系列)整理的40个前端练手项目|||实践出真知
  12. java时间格式转换
  13. XPS10.1仿真PPC440步骤及遇到的问题
  14. 9550电机_扭矩公式9550是什么 电机扭矩计算公式T=9550P/n怎么算
  15. STM32LED--基于HAL库(LCD与LED冲突?一文看懂如何精准劝架)
  16. 面试官:你觉得扫码登录应该怎么实现?
  17. 电动阀门和气动阀门有什么区别
  18. 其他——精灵 4 RTK常见问题
  19. linux 目录 特殊符号,Linux常见特殊符号
  20. 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解

热门文章

  1. 条形码、二维码的区别和组成结构介绍
  2. MySql执行Sql语句时出现“MySqlException: Parameter ‘@maxNo‘ must be defined.”的错误
  3. 解决IIS出现“由于权限不足而无法读取配置文件”的问题
  4. 3.React学习笔记(完)----nodejs命令备份+跨域问题处理
  5. java 数组扩容_Java数组扩容算法及Java对它的应用
  6. jquery常见操作总结
  7. 笔记本电脑报价单_抚顺x射线扫描仪设备,x-ray设备厂家报价单-老友网
  8. 装错信封输出所有结果C语言算法,装错信封问题(数学应用题)
  9. ykhmi是什么触摸屏软件_触摸屏如何读写变频器参数?如何控制变频器?实操步骤及方法分享...
  10. sql python r_Mode Studio,支持Python,R和SQL的云数据分析利器