mysql之DDL(CREATE ALTER DROP)

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;

时间: 2024-10-10 02:06:00

mysql之DDL(CREATE ALTER DROP)的相关文章

MySQL的DDL和DML

SQL语句:结构化查询语句,使用SQL与数据库“沟通”,完成相应的数据库操作. 语句分类 DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表.索引.视图.存储过程.触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME. DML(Data Manipulation Language)语句:即数据操纵语句,用来查询.添加.更新.删除等,常用的语句关键字有:SELECT,INSERT,UP

数据定义: CREATE、DROP、ALTER

1 CREATE DATABASE 句法 2 3 CREATE DATABASE [IF NOT EXISTS] db_name 4 5 CREATE DATABASE 以给定名字创建一个数据库.允许的数据库名规则在章节 6.1.2 数据库.表.索引.列和别名 中被给出. 如果数据库已经存在,并且你没有指定 IF NOT EXISTS,这时会产生一个错误. 6 7 在 MySQL 中,数据库以包含数据库表对应文件的目录实现的.因为数据库在初始创建时没有表,所以 CREATE DATABASE 语

Mysql常用DDL命令

Mysql常用命令:--在Mysql中,语句的结尾要么使用;要么使用\g或者\G作为结束符.进入Mysql (---其中Your MySQL connection id is 5表示到当前为止连接到Mysql数据库的次数,Server version: 5.5.37-log Source distribution表示Mysql数据库的版本)[[email protected] data]$ mysql -uroot -pEnter password:Welcome to the MySQL mo

MySQL在线DDL gh-ost 使用说明

原文:gh-ost: GitHub's online schema migration tool for MySQL http://github.com/github/gh-ost MySQL在线更改schema的工具很多,如Percona的pt-online-schema-change. Facebook的 OSC 和 LHM 等,但这些都是基于触发器(Trigger)的,今天咱们介绍的 gh-ost 号称是不需要触发器(Triggerless)支持的在线更改表结构的工具. 本文先介绍一下当前

MySQL Online DDL的改进与应用

    本文简析Online DDL的实现原理与使用过程注意事项.     任何DDL操作,执行者都需要预先测试或者清晰了解这个操作会给数据库带来的影响是否是在业务期间数据库的可承受范围内,尤其是对大表的DDL操作中,需要密切留意服务器的IO,内存及CPU使用情况(每个DBA总有那么一段被大表的DDL语句坑到的血泪史). 如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持! 1 早期DDL实现原理(5.6.7之前 ) I

MySQL的DDL、DML、DCL

DDL DDL的概述 DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表.视图等等,DDL对这些对象和属性的管理和定义具体表现在Create.Drop和Alter上.特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次.以表举例:Create创建数据表,Alter可以更改该表的字段,Drop可以删除这个表,从这里我们可以看到,DDL所站的高度,他不会对具体的数

【翻译自mos文章】在alter/drop表空间时遇到错误ORA-38301,ORA-00604,purge dba_recyclebin 也不行

在alter/drop表空间时遇到错误ORA-38301,ORA-00604,purge dba_recyclebin 也不行 适用于: Oracle Database - Enterprise Edition - Version 10.2.0.1 and later Information in this document applies to any platform. 症状: 当你试图drop一个empty的tablespace时,遇到与recyclebin相关的错误 SQL> drop

MySQL 自定义函数CREATE FUNCTION实例

分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (in_string VARCHAR(255),-> in_find_str VARCHAR(20),-> in_repl_str VARCHAR(20))->-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE l_new_string VARC

mysql online ddl

目前InnoDB引擎是通过以下步骤来进行DDL的: 1 按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table) 2 在原表上加write lock,阻塞所有更新操作(insert.delete.update等) 3 执行insert into tmp_table select * from original_table 4 rename original_table和tmp_table,最后drop original_table 5 释放 w