设为首页 收藏本站
查看: 320|回复: 0

[经验分享] mysql之DDL(CREATE ALTER DROP)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-3 10:22:58 | 显示全部楼层 |阅读模式
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;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93593-1-1.html 上篇帖子: mysql之DML(SELECT DELETE INSERT UPDATE) 下篇帖子: MySQLdb 防SQL注入,同时打印已执行的SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表