DDL:数据定义语言
    CREATE
    ALTER
    DROP


主要操作集中在数据库和表。

数据库:
    创建数据库:
        CREATE DATEBASE|SCHEMA [IF NOT EXISTS] DBNANE [CREATE_SPECIFICATION];

            CREATE_SEPECIFICATION   
                [DEFAULT]  CHARACTER SET [=] CHARSET_NAME 指定默认字符集
                COLLATE [=] CLOOATION_NAME] 指定排序规则

    修改数据库:
        ALTER DATABASE|SCHEMA DBNAME ALTER_SPECIFICATION;

            ALTER_PSECIFICATION:
                CHARACTER SET [=] CHARSET_NAME 默认字符集
                COLLATE [=] CLOOATION_NAME 排序规则


        ALTER DATABASE|SCHEMA DBNAME UPGRADE DATA DIRECTORY NAME; 升级数据字典名称。例如5.0数据库迁移到5.1的服务器。在5.7.6以后可能会被废除。

    删除数据库:
        DROP DATEBASE|SCHEMA  [IF EXISTS] DBNAME;

    设定默认数据库:
        USE DBNAME;


    实例:
        1.查看数据库支持的字符集和排序规则:
            mysql>SHOW CHARSET;


        2.创建一个名为test的数据库,默认字符集为utf8,默认排序规则为uft8_general_ci
            mysql>CREATE DATABASE IF NOT EXISTS test DEFAULT CHARACTER SET=utf8  DEFAULT COLLATE = uft8_general_ci
            mysql>SHOW DATABASES;


        3.查看当前数据库使用的字符集:
            mysql>USE test;
            mysql>STATUS;
            或
            mysql>SHOW VARIABLES LIKE '%char%';

        4.修改test2的字符集为big5,排序规则为big5_chinese_ci
            mysql>ALTER DATABASE IF NOT EXISTS test CHARACTER SET=big5 COLLATE = big_chinese_ci

        5.删除test数据库:
            mysql>DROP DATABASE test;

        6.升级mysql服务器后升级test库的数据字典
            mysql>ALTER DATABASE test UPGRADE DATA DIRECTOYR NAME;


表:
    创建表:
        CREATE TABLE [IF NOT EXISTS] DBNAME.TBNAME(CREATE_DEFINITION,...) [TABLE_OPTION] [PARTITION_OPTIONS];
            直接定义空表。
        
        CREATE TABLE [IF NOT EXISTS] DBNAME.TBNAME(CREATE_DEFINITION,...) SELECT_STATEMENT;
            从其他表中查询数据,并以此创建新表。创建完毕后表中已有数据。
        
        CREATE TABLE [IF NOT EXISTS] DBNAME.TBNAME LIKE OLD_TBNAME;
            仿照OLD_DBNAME表为模板,创建按空表。

            CREATE_DEFINITION
                COLNAME COLUMN_DEFINITION
                PRIMARY KEY (COLNAME,...) 主键
                UNIQUE INDEX|KEY(COLNAME,....) 唯一键
                INDEX (COLNAME,...) 索引

            COLNAME 字段名称
            COLUMN_DEFINITION 字段定义
                DATA_TYPE [NULL|NOT NULL] [DEFAULT VALUE] 指定数据类型
                [AUTO_INCREMENT] [UNQIUE[KEY]|PRIMARY KEY]  自增长的主键或唯一键
                COMMENT 'STRING' 描述信息
                COLUMN_FORMAT{FIXED|DYNAMIC|DEFAULT}
                STORAGE {DISK|MEMORY|DEFAULT}
                REFERENC_DEFINITION 引用相关

            TABLE_OPTION
                ENGINE [=] ENGNAME 存储引擎
                AUTO_INCREMENT [=] VALUE
                AVG_ROW_LENGTH [=] VALUE 平均行的长度
                [DEFAULT] CHARACTER SET [=] CHARSETNANE 字符集
                CHECKSUM [=] {0|1} 是否启用校验和
                [DEFAULT] COLLATE [=] COLLNAME 排序规则
                COMMENT [=] 'STRING' 注释信息
                DATA DIRECTORY [=] '/PATH/DIR' 数据目录,绝对路径
                DELAY_KEY_WRITE [=] {0|1} 是否启用延迟键写入
                INDEX_DIRECTORY [=] '/PATH/DIR' 索引目录,绝对路径
                INSERT_METHOD [=] {NO|FIRST|LAST} 插入方法
                KEY_BLOCK_SIZE [=] VALUE 指定键块的大小
                MAX_ROWS [=] VALUE 最多允许储存的行数
                MIN_ROWS [=] VALUE 最少允许储存的行数
                PACK_KEYS [=] {0|1|DEFAULT}
                PASSWORD [=] 'STRING'
                ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} 行格式
                TABLESPACE TABSPACENAME [STORAGE {DISK|MEMORY|DEFAULT}]
                UNION [=] (TBNAME,...) 表空间

            REFERENCE_DEFINITION 引用描述
                REFERENCES TBNAME (INDEX_COLNAME,...) 指定要引用的表名
                    [MATCH FULL|PARTIAL|SIMPLE] 指定匹配范围
                    [ON DELETE REFERENCE_OPTION] 指定引用的表删除后的操作
                    [ON UPDATE REFERENCE_OPTION] 指定引用的表更新后的操作

            REFERENCE_OPTION:
                RESTRICT  严格。不允许。默认
                CASCADE 级联,跟随引用表改动
                SET NULL 设定为空
                NO ACTION 无动作

    修改表:
        ALTER TABLE TBNAME [ALTER_SPECIFICATION,...] [PARTITION_OPTIONS]

        ALTER_SPECIFICATION
            ADD [COLUMN] COLNAME COLUMN_DEFINITION [FIRST|ATFER COLNAME] 添加字段

            ADD [COLUMN] (COLNAME COLUMN_DEFINITION,...) 添加多个字段

            ADD [INDEX|KEY] [INDEX_NAME] [INDEX_TYPE] (INDEX_COLNAME,...) [INDEX_OPTION] 添加INDEX

            ADD PRIMARY KEY (COLNAME COLUMN_DEFINITION,...) 添加主键

            ADD UNIQUE KEY (COLNAME COLUMN_DEFINITION,...) 添加唯一键

            ADD FOREIGN KEY (INDEX_COLNAME,...) REFERENCE_DEFINITION 添加外键

            ADD FULLTEXT (COLNAME COLUMN_DEFINITION,...) 添加全文索引

            ADD SPATIAL (COLNAME COLUMN_DEFINITION,...) 添加空间索引

            CHANGE [COLUMN] OLD_COLNAME NEW_COLNAME CLOLUMN_DEFINITION [FIRST|AFTER COLANME] 可以修改字段名,位置和字段定义

            MODIFY [COLUMN] COLNAME COLUMN_DEFINITION [FIRST|AFTER CLONAME] 简单修改,修改位置或者是字段定义

            RENAME  [TO|AS] NEW_TABNAME 表重命名。

            COVNERT TO CHARACTER SET [=] CHARSET_NAME [COLLATE COLLATION_NAME] 更改字符集

    重命名表:
        RENAME TABLE OLD_TBNAME TO NEW_TBNAME

    删除表:
        DROP TABLE TBNAME [RESTRICT|CASCADE]

        RESTRICT 严格。
        CASCADE 级联。删除表的时候,若表被其他表引用,则会连被引用的表一起删除。


    查看表属性状态:
        SHOW TABLE STATUS LIKE ‘TBNAME’[\G]

    查看某个库中的所有表:
        SHOW TABLES [FROM DBNAME]

    查看表的结构:
        DESC TBNAME


实例:
    1.直接创建表:
        mysql>USE test
        mysql>CREATE TABLE student (id INT UNSIGNED NOT NULL AUTO_INCREMENT  PRIMARY KEY,name CHAR(20) NOT NULL ,age TINYINT NOT NULL,gender enum(''M,'F'));

        mysql>CREATE TABLE student2  (id INT UNSIGNED NOT NULL AUTO_INCREMENT,name CHAR(20) NOT NULL ,age TINYINT NOT NULL,PRIMARY KEY(id),UNIQUE KEY(name),INDEX(age));

        mysql>CREATE TABLE courses (CID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,CourName VARCHAR(50) NOT NULL,);

    2.查看表中各自段数据类型:
        mysql>DESC students;

    3.删除表:
        mysql>DROP TABLE student2;

    4.列出当前数据库中所有的表:
        mysql>SHOW TABLES;

    5.重新创建student2表,指定存储引擎为MyISAM:
        mysql>CREATE TABLE student2  (id INT UNSIGNED NOT NULL AUTO_INCREMENT,name CHAR(20) NOT NULL ,age TINYINT NOT NULL,PRIMARY KEY(id),UNIQUE KEY(name),INDEX(age)) ENGINE = MyISAM;

    6.查看student2表的各个属性状态:
        mysql>SHOW TABLE STATUS LIKE 'student2'\G;

    7根据现有表中的内容创建新表:
        注意:通过这种方式创建的表,虽然字段和内容一样,但是新表和旧表相比,会丢失部分的表格式和表属性。

        mysql>CREATE TABLE  test2 SELECT * FROM student2;
        mysql>SHOW TABLES;
        mysql>SELECT * FROM student2;
        mysql>SELECT * FROM test2;
        mysql>DESC courses;
        mysql>DESC testcourses;
        mysql>SHOW TABLE STATUS LIKE 'student2';
        mysql>SHOW TABLE STATUS LIKE 'test2';


    10.以其某张表为模板创建空表
        注意:使用此方式创建的表和原表格式是完全一样的。

        mysql>CREATE TABLE test3 LIKE student2;
        mysql>DESC test3;
        mysql>SHOW TABLES STATUS LIKE 'test3';

    11.修改字段的名称和属性:
        mysql>ALTER TABLE course CHANGE CourName CouName VARCHAR(50) NOT NULL;

    13.新增字段:
        mysql>ALTER TABLE coures ADD StartTime date DEFAULT '2015-07-05';

    14.修改表名:
        mysql>ALTER TABLE testcourses RENAME TO testcourse1;
        或
        mysql>RENAME TABLE testcourses TO testcourses1;

        mysql>SHOW TABLES;

    16.更改表的存储引擎:
        注意:重命名的代价非常大。实质上是创建一个和旧表完全一样的新的空表,导入数据,删除旧表。
        mysql>ALTER TABLE courses ENGINE = InnoDB;