DDL-(Data Definition Language)

DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库,表,字段)。

数据库操作

查询所有数据库

show databases;

查询当前数据库

select database();

创建数据库

create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ];
/*例:创建一个study数据库,并且指定字符集*/
create database if not exists study default charset utf8mb4;

删除数据库

drop database [ if exists ] 数据库名;

切换数据库

use 数据库名 ;

表操作

表操作-查询

查询当前数据库所有表

show tables;

查看指定表结构

desc 表名;

通过这条指令,我们可以查看到指定表的字段(Field)、字段的类型(Type)、是否可以为空(Null)、是否存在默认值(Default)等信息。

查询指定表的建表语句

show create table 表名;

通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询到,因为这部分是数据库的默认值,如:存储引擎、字符集等。

表操作-创建

create table 表名(
	字段1 字段1类型 [ comment 字段1注释 ],
	字段2 字段2类型 [ comment 字段2注释 ],
	字段3 字段3类型 [ comment 字段3注释 ],
	......
	字段n 字段n类型 [comment 字段n注释 ]
) [ comment 表注释 ];

表操作-数据类型

数值类型

类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述
TINYINT 1byte (-128,127) (0,255) 小整数值
SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值
INT/INTEGER 4bytes (-2147483648, 2147483647) (0,4294967295) 大整数值
BIGINT 8bytes (-263,263-1) (0,2^64-1) 极大整数值
FLOAT 4bytes (-3.402823466 E+38, 3.402823466351 E+38) 0 和 (1.175494351 E- 38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8bytes (-1.7976931348623157 E+308, 1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308, 1.7976931348623157 E+308) 双精度浮点数值
DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点数)
例:
/*年龄字段:不会出现负数,而且人的年龄不会太大。*/
age tinyint unsigned
/*分数:总分100分,最多出现一位小数。*/
score double(4,1)

字符串类型

类型 大小 描述
CHAR 0-255 bytes 定长字符串(需要指定长度)
VARCHAR 0-65535 bytes 变长字符串(需要指定长度)
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。
例:

# 用户名 username ------> 长度不定, 最长不会超过50
username varchar(50)
# 性别 gender ---------> 存储值, 不是男,就是女
gender char(1)
# 手机号 phone --------> 固定长度为11
phone char(11)

日期时间类型

类型 大 小 范围 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续 时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时 间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时 间值,时间戳

如:

/*生日字段*/
birthday date
/*创建时间*/
createtime datetime

数据类型创建表举例

设计一张员工信息表,要求如下:

  1. 编号(纯数字)
  2. 员工工号 (字符串类型,长度不超过10位)
  3. 员工姓名(字符串类型,长度不超过10位)
  4. 性别(男/女,存储一个汉字)
  5. 年龄(正常人年龄,不可能存储负数)
  6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
  7. 入职时间(取值年月日即可)
    对应的建表语句如下:
create table emp
(
    id        int comment '编号',
    workno    varchar(10) comment '工号',
    name      varchar(10) comment '姓名',
    gender    char(1) comment '性别',
    age       tinyint unsigned comment '年龄',
    idcard    char(18) comment '身份证号',
    entrydate date comment '入职时间'
) comment '员工表';

表操作-修改

添加字段

alter table 表名 add 字段名 类型(长度) [ comment 注释 ] [ 约束 ] ;

修改数据类型

alter table 表名 modify 字段名 新数据类型(长度) ;

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型(长度) [ comment 注释 ] [ 约束 ];

删除字段

alter table 表名 drop 字段名;

修改表名

alter table 表名 rename to 新表名;

表操作-删除

删除表

drop table [ if exists ] 表名;

可选项 if exists 代表,只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)

删除指定表, 并重新创建表

truncate table 表名;

注意:在删除表的时候,表中的全部数据也都会被删除。

posted @ 2023-01-09 10:10  wandoubaguo  阅读(56)  评论(0编辑  收藏  举报