前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL中的DDL(Data Definition Language,数据定义语言)

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

作者头像
星哥玩云
发布2022-08-16 14:34:32
6900
发布2022-08-16 14:34:32
举报
文章被收录于专栏:开源部署

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

create(创建表)

标准的建表语句:

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

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

建立表只是建立表结构,就是定义数据表有多少列,列包含列名、类类型、可选的默认值(使用default关键字定义)。

列类型

说明

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;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档