阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL中的DDL(Data Definition Language,数据定义语言)

125次阅读
没有评论

共计 2760 个字符,预计需要花费 7 分钟才能阅读完成。

MySQL 中的 DDL(Data Definition Language, 数据定义语言)

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;

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2760字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中