zoukankan      html  css  js  c++  java
  • MySQL中的DDL(Data Definition Language,数据定义语言)

    1. create(创建表)

      标准的建表语句:
      create table [模式名.]表名
      (
          #可以有多个列定义
          columnName1 dataType [default expr(这是默认值)],
          ...
      )

      圆括号里可以包含多个列定义,每个列定义之间用英文逗号(,)隔开,最后一个列定义不需要逗号,直接以圆括号结束。

      建立表只是建立表结构,就是定义数据表有多少列,列包含列名、类类型、可选的默认值(使用default关键字定义)。
      
      
      MySQL支持的列类型
      列类型 说明
      tinyint/smallint/mediumint/int(integer)/bigint
      1字节/2字节/3字节/4字节/8字节正数,又可分为有符号和无符号两种。 这些正数类型的区别仅仅是表数范围不同。
      float/double   
       单精度、双精度浮点类型
      decimal(dec)       
       精确小数类型,相对于float和double不会产生精度丢失问题
      date 
       日期类型,不能保存时间。把java.util.Date对象保存进date列时,时间部分将丢失
      time   
       时间类型,不能保存日期。把java.util.Date对象保存进time列时,日期部分将丢失
      datetime    
       日期、时间类型
      timestamp        
       时间戳类型
      year    
       年类型,仅仅保存时间的年份
      char 
       定长字符串类型
      varchar   
       可变长度字符串类型
      binary    
       定长二进制字符串类型,它以二进制形式保存字符串
      varbinary   
       可变长度的二进制字符串类型,它以二进制形式保存字符串
      tinyblob/blob/mediumblob/longblob  
       1字节/2字节/3字节/4字节的二进制大对象,可用于存储图片、音乐等二进制数据,分别 可存储:255B/64KB/16MB/4GB的大小
      tinytext/text/mediumtext/longtext
       1字节/2字节/3字节/4字节的文本对象,可用于存储超长长度的字符串,分别可储存: 255B/64KB/16MB/4GB大小的文本
      enum('value1','value2',...)
       枚举类型,该列的值只能是enum后括号里多个值的其中之一
      set('value1','value2',...)
      集合类型,该列的值可以是set后括号里多个值的其中几个
      
      
      #例句:
      create table t_test
      (   #整形通常用int
          test_id int,
          #小数定义
          test_price decimal,
          #定义普通文本,使用default关键字指定默认值
          test_name varchar(255) default 'xxx',
          #定义大文本类型
          test_desc text,
          #定义图片
          test_img blob,
          #定义日期
          test_date datetime
      );

      上面这种常见的建表语句只是创建一个空表,该表里没有任何数据。

      如果使用子查询建表语句,则可以在建表的同时插入数据。 语法如下:
      create table [模式名.]表名 [column1[, column2, ...] as subQuery;

      上面语法中新表的字段列表必须与子查询中的字段列表数量匹配,创建新表时的字段列表可以省略,如果省略了该字段列表,则新 表的列名与选择结果完全相同,如下:
      create table user2 as select * from user;

      上面的语句相当于把user表复制了一份,取名为user2。

       
    2. alter(修改表结构)
      包括增加列定义、修改列定义、删除列、重命名列等
      增加列定义:
      alter table tableName add
      (
          #可以有多个列定义
          columnName dataType [default expr],
          ...
      );

      上面的语句表示将圆括号里的列追加到指定表的列定义后面。如果只是新增一列,则可以省略圆括号。
      #例句:
      #为t_test表增加一个add_id字段,该字段的类型为int
      alter table t_test add add_id int;

      #为t_test表增加add_name、add_address字段,类型都为varchar
      alter table t_test add ( add_name varchar(255) default 'this is name', add_address varchar(255) );
      
      
      注意:SQL语句中的字符串不是用双引号,而是用单引号;增加字段时,如果数据表中已有数据记录,除非给新增的列指定了默认值,
      否则新增的数据列不可指定为非空约束,因为那些已有的记录在新增列上肯定是空。 (只要新增的约束与已有的数据冲突,修改数据表结构就会失败)。


      修改列定义:
      alter table tableName modify columnName dataType [default expr] [first | after columnName];

      上面语法中的first或者after columnName表示将目标列修改到指定的位置。
      #例句:
      
      #将t_test表中的add_id列的类型修改成varchar(255)类型
      alter table t_test modify add_id varchar(255);
      
      
      #将t_test表中的add_name列修改成int类型
      alter table t_test modify add_name int;


      删除列定义:
      alter table tableName drop columnName;

      删除列,只需要在drop关键字后跟上要删除的列名即可。
      #删除t_test表中的add_name列
      alter table t_test drop add_name;


      重命名数据表名:
      alter table tableName rename to newTableName;
       
      #例句:
      #将t_test数据表重命名为t_demo
      alter table t_test rename to t_demo;


      重命名数据表中的列名:
      alter table tableName change
          old_column_name new_column_name dataType [default expr] [first | after column_name];
       

    3. drop(删除表)
      #语法:
      drop table tableName;
       
      #例句:
      #删除t_demo数据表
      drop table t_demo;
      
      
      注意:删除数据表后,表结构被删除,表对象不再存在;表里的所有数据也被删除;该表所有相关的索引、约束也被删除。


    4. truncate(截断表)
      删除表里的全部数据,但保留表结构。truncate只能一次性删除整个表的全部记录。
      #语法:
      truncate tableName;
      
      
  • 相关阅读:
    PKG_CONFIG_PATH 、LD_LIBRARY_PATH、PATH三个的作用
    klocwork报错:Error occurred during build: C/C+ defects detection stage failed. Program exited with 139
    修改默认内核启动以及删除Linux多余的内核
    【笔记】ubuntu内核升级到4.19后,docker服务无法启动
    TypeError: unhashable type: 'collections.OrderedDict'
    jquery 如何给新生成的元素绑定 hover事件?
    css中判断IE版本的语句
    (转)JS获取当前对象大小以及屏幕分辨率等
    (转)ie浏览器判断
    (转)javascript中的this
  • 原文地址:https://www.cnblogs.com/yingtoumao/p/8558559.html
Copyright © 2011-2022 走看看