zoukankan      html  css  js  c++  java
  • MySQL语言分类——DDL

    DDL的全称Data Definition Language,即数据定义语言

      DDL的语法有:create、alter、drop、rename、truncate。对此做一个详细的解释:

    create (创建)

      create 可以创建数据库

    # 创建数据库
    create database database_name;
    
    # 然后进入该数据库
    use database_name;

      create 可以创建表格

        创建表格的语法:方括号的表示可以省略

          create [temporary] table [if not exits] table_name(

            column_name data_type [not null | null] [default default_value] [auto_increment] [comment ""] [Constraints约束条件],

          );

        [if not exits] 如果新建表不存在,则会创建新表;如果存在,不会报错,数据也不会被覆盖

    create table if not exits table_name(
        id int,
        name varchar(20)
    );

        [temporary] 创建临时表 用于存储临时计算的数据,生命周期只限于本次连接

    create temporary table table_name(
        id int key,
        name varchar(20)
    );

        [not null | null] 字段值是否可以为空; 如果这个字段值设置不为空,后面还有默认值,那么在插入时当前字段不插入数据,会按照后面的默认值填入

    create table null_test(
        account varchar(20) not null,
        password varchar(32) not null,
        gender enum("0", "1") null
    );
    
    insert into null_test(account) values("zhangsan");    # error 因为password不能为空
    insert into null_test(account, password) values("zhangsan", "abcdef");

      [default default_value] 字段值的默认值是什么,建议项目中表格的每一列都给默认值(以防用户不填数据)

    create table default_test(
        id int not null default 0,
        address varchar(50) default "",
        gender enum("0", "1")  null default "0"
    );
    
    # 首先id不为空,插入时也没有写,在插入的过程中,会将默认值插进去
    insert into default_test(address, gender) values ("kunshan", "1");

        [auto_increment] 字段值自动增加,一般(不是必须)适用于主键而且是int类型,默认从1开始

    # auto_increment的三种表现形式
    create table auto_test(
        id int primary key auto_increment,
        name varchar(20) not null
    );
    
    create table auto_test(
        id int primary key auto_increment,
        name varchar(20) not null
    )auto_increment=1;
    
    create table auto_test(
        id int primary key auto_increment,
        name varchar(20) not null
    )auto_increment=2016211001000;

        [comment ""] 给表格字段添加备注

    create table comment_test(
        id int comment "标号"
    );

      Constraints约束:

        约束是用来限制和保护表的数据符合我们定义的条件

    约束的表现形式:

        列级约束 

          写在列的后面,针对某个列的约束

            • Create table student(id number primary key,name varchar(10));

        表级约束

          写在建表语句的后边,针对某个列的约束

            • Create table student(id number , name varchar(10),primary key(id)); 

        列级约束和表级约束作用相同,但是表级约束功能更强一些,具体见后边

        如果是表级约束,若涉及联合唯一或者是联合主键,只有联合的所有的字段值一样的才会报错(局部可以重复,全局不可以重复)

        not null 上面已有介绍

        unique   字段值唯一

    create table unique_test(
        id int,
        stuno int not null unique  # 列级约束
    );
    
    create table unique_test(
        id int,
        stuno int not null unique  default 0 # 只能默认插入一次
    );
    
    create table unique_test(
        id int,
        stuno int not null,
        unique(stuno)      # 表级约束
    );
    
    create table unique_test(
        id int,
        stuno in not null,
        unique(id, stuno)   # 表级约束---联合约束唯一
    );
    
    # 联合唯一:单个列可以重复,整体不能重复; 条件必须时表级约束,同时重复才会报错

        primary key(表格的主键)    非空 唯一 索引

    create table primary_test(
        id int primary key,   # 列级约束
        name char(20)
    );
    
    create table primary_test(
        id int,
        name char(20),
        primary key(id)    # 表级约束
    );
    
    create table primary_test(
        id int,
        name char(20),
        primary key(id, name)  # 表级约束 -----联合主键
    );
    # 联合唯一:单个列可以重复,整体不能重复; 条件必须时表级约束,同时重复才会报错

        foreign key(表格的外键)

          外键只能是表级约束,先有主表(与之关联的外键表),才有外表(当前表是外表)

          外表的引擎必须是InnoDB,在分号之前建议写上

          两者关联涉及的字段值类型必须相同

          删除数据(表),先删除子(外)数据(表),在删除父(主)数据(表)

          填写foreign key(字段名) references 主表名(主键)

    # 主表(父表)
    create table parent_table(
        id int primary key,     # 列级约束
        name varchar(20) not null default "",
    );
    
    # 外表(子表)
    create table child_table(
        id int,
        parent_id int,
        name varchar(20) not null default "",
        primary key(id),        # 表级约束
        foreign key (parent_id) references parent_table(id)    # 表级约束
    );
    
    #插入数据: 先插入父表的数据,在插入子表的数据
    insert into parent_table values(1001);
    insert into child_table values(1, 1001);

        index/key 索引 建立索引提高查询速率

          key:如果表格没有主键,又是列级约束,会自动设置成主键;又是表级约束,就是普通的索引key了

          在已有的表格上创建/删除 索引:create/drop index index_name on table_name

    # key 索引测试
    create table key_test(
        id int key,      # 列级约束转换成主键了
        name varchar(20)
    );
    
    create table key_test(
        id int,
        name varchar(20),
        key(id)    # 表级约束  ---只是一个关键字索引
    );
    
    create table key_test(
        id int,
        name varchar(20),
        key(id, name)  # 表级约束---联合约束
    );
    
    #index 索引测试
    
    create table index_test(
        id int index,      # index 没有列级约束   # error
        name varchar(20)
    );
    
    create table index_test(
        id int,
        name varchar(20),
        index(id)    # 表级约束  ---只是一个关键字索引
    );
    
    create table index_test(
        id int,
        name varchar(20),
        indexid, name)  # 表级约束---联合约束
    );
    
    # 在已有的表格创建索引
    create index index_name on table_name(column_item1[, column_item2]);
    # 在已有的存在索引字段的表格删除索引
    drop index index_name on table_name(column_item1[, column_item2]);

        check(没有什么具体作用)

    创建视图view(视图和相关联的表格是一致的):

    create view view_name as 数据(某个结果数据集);

    增加、删除、修改、查询(前提是操作成功)等功能和表格的一样

    视图的作用:

      重用sql语句,即多次使用相同语句

      数据的安全性:限定特定字段数据

      对数据的重构并且不影响其他程序的运行,让数据更加清晰

    # 创建一个视图(可以将视图比作望远镜)
    # 即实物与望远镜看到的事物是一致的
    create view view_name as select * from table_name;
    
    # 下面两个结果是一样的
    select * from view_name;
    select * from table_name;

     DROP

      drop可以删除数据库、数据表、view视图、index索引

    drop database database_name;
    drop table table_name;
    drop view view_name;
    drop index index_name on table_name(column_item1[, column_item2]);

    RENAME(重命名)

      rename只限于表格操作

    # 修改表格名称
    rename table old_name to new_name

    TRUNCATE

      清空表格的数据,释放磁盘空间(自定义的设置会回复原来的设置)

      

    create table truncate_test(
        id int primary key auto_increment,
        name varchar(20)
    )auto_increment=10000;
    
    insert into truncate_test(name) values ("aaa");
    
    truncate truncate_test;    # 原来设置的auto_increment=10000,会改为auto_increment=1

    ALTER

    alter 完整语法的用法:

    # 创建一个测试表格
    create table test(id int);

      1、向表格增加一列:

    # 语法:
    #alter table table_name add column_name column_type column_constraints
    
    alter table test add name varchar(20) not null;
     2、向表格的一个/多个字段增加索引(多个字段即联合索引)
    # 语法
    # alter table table_name add index [unique_name](column_name1[,column_name2])
    alter table test add index (id);

       3、向表格的一个/多个字段增加主键(多个字段即联合主键)

    # 语法:
    # alter table table_name add primary key (column_name1[,colum_name2])
    
    alter table test add primary key (id);

      4、向表格的一个/多个字段增加唯一(多个字段即联合唯一)

    # 语法:
    # alter table table_name add unique [unique_name] (column_name1[, clumn_name2])
    
    alter table test add unique (id);

      5、修改/删除表格某个字段的默认值

    # 语法:
    # alter table table_name alter column_name {set defaulle column_value |drop default}
    
    # 色湖之默认值
    alter table test alter name set default "root";
    
    # 删除默认值
    alter table test alter name drop default;

      6、修改表格字段

    # 语法:
    # 修改字段过程中若连同字段名也修改采用change
    # alter table table_name change column_old_name column_new_name [constraints]
    
    alter table test change id test_id int primary key;
    
    # 不修改字段名可采用modify
    # alter table table_name modify column_name [constraints]
    
    alter table test modify test_id int(10) unsigned  primary key;

       7、删除字段、主键、索引

    # 语法:
    # 删除某个字段
    # alter table table_name drop column_name
    
    alter table test drop name;
    
    # 删除索引
    # alter table table_name drop index index_name   默认是字段名,也可以查看表结构
    
    alter table test drop index id;
    
    # 删除主键
    # alter table table_name drop primary key
    
    alter  table test drop primary key;

      8、修改表格的名称

    # 修改表格的两种方式:
    # 1、采用rename方式
    # rename table table_old_name to table_new_name;
    
    rename table test to test1;
    
    # 2、采用alter方式
    # alter table table_name rename [as] table_new_name
    
    alter table test1 rename test;

      9、修改表格的配置

    # 语法
    # 修改的地方是在 ) 和 ; 之间的配置
    
    # 修改引擎
    # alter table table_name engine=InnoDB
    
    alter table test engine=InnoDB;
    
    # 修改字符编码
    # alter table table_name charset=gbk2313
    
    alter table test charset=gbk2312;

      

  • 相关阅读:
    .NET中使用嵌入的资源
    C#操作注册表
    .Net中大数加减乘除运算
    CYQ.Data 轻量数据层之路 V4.5 版本发布[更好的使用体验,更优的缓存机制]
    关于性能比较的应用误区
    秋色园QBlog技术原理解析:性能优化篇:打印页面SQL,全局的SQL语句优化(十三)
    CYQ.DBImport 数据库反向工程及批量导数据库工具 V1.0 发布
    框架设计之菜鸟漫漫江湖路系列 一:菜鸟入门
    MySql折腾小记二:text/blog类型不允许设置默认值,不允许存在两个CURRENT_TIMESTAMP
    CYQ.Data.Xml XmlHelper 助你更方便快捷的操作Xml/Html
  • 原文地址:https://www.cnblogs.com/aitiknowledge/p/11433655.html
Copyright © 2011-2022 走看看