【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. 字符数据类型:(CHARVARCHARTEXT),包括:CHARACTER SET and COLLATE的设置
  eg:CREATE TABLE t1 (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
  3.对于CHARVARCHARBINARY, 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 |
| | 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
 
 
 
 
 
 
备注:关于临时表 字段类型和表索引 部分单独梳理!!!
 

【SQL篇章--CREATE TABLE】的更多相关文章

  1. SQL Server: create table sql script

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

  2. linux之SQL语句简明教程---CREATE TABLE

    表格是数据库中储存资料的基本架构.在绝大部份的情况下,数据库厂商不可能知道您需要如何储存您的资料,所以通常您会需要自己在数据库中建立表格.虽然许多数据库工具可以让您在不需用到 SQL 的情况下建立表格 ...

  3. MySQL Create Table创建表

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

  4. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  5. 【SQL篇章】【SQL语句梳理 :--基于MySQL5.6】【已梳理:ALTER TABLE解析】

    ALTER TABLE 解析实例: SQL: 1.增加列 2.增加列,调整列顺序 3.增加索引 4.增加约束 5.增加全文索引FULL-TEXT 6.改变列的默认值 7.改变列名字(类型,顺序) 8. ...

  6. php大力力 [023节]CREATE TABLE创建新表sql写字段备注(2015-08-27)

    2015-08-27 php大力力023.CREATE TABLE创建新表sql写字段备注 http://www.cnblogs.com/dalitongxue/p/4762182.html 参考: ...

  7. SQL CREATE TABLE 语句

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  8. MySQL 列,可选择的数据类型(通过sql命令查看:`help create table;`)

    MySQL 列,可选择的数据类型(通过sql命令查看:help create table;) BIT[(length)] | TINYINT[(length)] [UNSIGNED] [ZEROFIL ...

  9. 转换sql文件的create table语句为drop table语句

    package com.csii.pweb.query.action; import java.io.BufferedReader; import java.io.FileNotFoundExcept ...

随机推荐

  1. JAVA实现的微信扫描二维码支付

    吐槽一下 支付项目采用springMvc+Dubbo架构实现,只对外提供接口. 话说,为什么微信支付比支付宝来的晚了那么一点,一句话,那一阵挺忙的,然后就没有时间整理,最近做完支付宝支付,顺便也把微信 ...

  2. 我的css笔记

    1.css的使用方法 内嵌样式 <p style="font-size:20pt;color:red;">这个Style定义<p> <!--里面的文字 ...

  3. 从源码角度理清memcache缓存服务

    memcache作为缓存服务器,用来提高性能,大部分互联网公司都在使用.   前言    文章的阅读的对象是中高级开发人员.系统架构师. 本篇文章,不是侧重对memcache的基础知识的总结,比如se ...

  4. 2015 - 准备读书List

    时刻提醒自己,不进步意味着倒退. 2015年准备读完的技术书籍: 1. <Redis设计与实现>

  5. 设计模式之 面向对象的养猪厂的故事,C#演示(一)

    对于设计模式, 从本质上说, 其最大的用途就是适应需求的变化. 因为有了设计模式,我们可以在设计阶段就为未来可能发生的变化留下足够的空间. 我们通过一个建造现代化养猪场的故事, 来讨论一下设计模式与需 ...

  6. 当子查询碰上NULL

    情景: 现在有如图两个表,boy和girl,对应着Boy和Girl两个bean,有共同字段id.name,另外boy还有个外键grilfriend(指向girl的id) 现在要查询所有的Boy,如果有 ...

  7. Spring4学习笔记 - Bean的生命周期

    1 Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1)通过构造器或工厂方法创建 Bean 实例 2)为 Bean 的属性设置值和对其他 Bean 的引用 3)调用 Bean 的初 ...

  8. 从启动日志看Spring IOC的初始化和Bean生命周期

    一.Tomcat中启动IoC容器的日志 启动Tomcat等容器时,控制台每次都打印出一些日志. 最近刚好在研究Spring源码,所以换个角度,从启动日志来简单的看看Spring的初始化过程! 以下是T ...

  9. angular学习的一些小笔记(中)之双向数据绑定

    <!doctype html> <html ng-app=""> <head> <script src="https://aja ...

  10. 详解Javascript 函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...