♂️ 个人主页: @计算机魔术师
作者简介:CSDN内容合伙人,全栈领域优质创作者。
书接上文介绍了数据库的前世今生,本文讲解SQL语句中的DDL语句
SQL编程语言是对关系型数据库操作的一套统一标准的语言,全程:Structed Query Language,结构化查询语言
--
#
/* */
我们对SQL功能进行分类,主要分为四类
分类 | 全称 | 作用 |
---|---|---|
DDL | Data Defined Language | 数据库定义语言,用于定义数据库对象(数据库,表,数据字段) |
DML | Data Manipulation Language | 数据库操作语言,对数据库表中数据进行增删改查 |
DQL | Data Query Language | 数据库查询语言,用于查询数据库表的记录 |
DCL | Data Contrl Language | 数据库控制语言,用来创建数据库用户,控制数据库的访问权限。 |
Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。
show databases;
select
在其他编程语言类似于write
可以用于打印字符串、数字、数学表达式结果等
select version(); # version() 函数 返回版本号,select输出该字符串
select now(); # now()
select database(); # database() 不接受任何参数,返回默认或当前数据库的名称,没有则返回 NULL
关于select更多操作(点击链接跳转)
该语句一般很少用到
show create table 表名;
create database [if not exists] 数据库名 [default charset utf8] [collate 排序规则];
myDatabase
, 使用字符集 utf8mb4(这里的utf8mb4是四个字节的因为utf8中文是三个字节,且不能敲utf-8mb4,会报错)由于创建同名数据库会报错,我们往往添加
if not exists
语句判断是否以及存在同名
create database if not exists myDatabase charset utf8mb4
drop database [if exists] 数据库名;
如果想要操作一个数据库中的表,则需要切换到该数据库,不然是无法操作的
use 数据库名;
show tables;
descent(n. 下降)
desc table 表名;
作用:
查看表的字段 | 字段类型 | 是否可为NULL | 是否默认存在默认值 | … |
---|
show create table 表名;
作用(主要是查看建表语句):
一个二维表基本结构就是
字段(相当于表格中的列头) | 字段类型 |
---|
注意!!: 最后一个字段没有逗号
create table 表名(
字段1 字段1类型 [comment 字段注释],
字段2 字段2类型 [comment 字段注释],
字段3 字段3类型 [comment 字段注释],
字段4 字段4类型 [comment 字段注释],
...
字段n 字段n类型 [comment 字段注释]
)[comment 表的注释]
create table rivers_and_lakes(
id int comment "id",
name varchar(10) comment "name",
age tinyint comment "age",
gender char(1) comment "gender"
)comment "江湖";
实际中在表中,很少用男,女来存贮性别,一般都是用0,1,节省内存。
在上述创建表语句,我们用到了varchar,tinyint
等,那么表究竟有哪些数据类型呢?
类型 | 字节大小 | 有符号(signed)范围 | 无符号(unsigned)范围 | 描述 |
---|---|---|---|---|
tinyInt | 1bytes | -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 | − 2 63 , 2 63 − 1 -2^{63} ,2^{63}-1 −263,263−1 | 0 , 2 64 − 1 0,2^{64}-1 0,264−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(标度)的 值 | 小数值(精 确定点数) |
精度是指数字长度标度是小数位如:123.45精度为5 标度为2|依赖于M(精度)和D(标度) 的值
其实可以看到无符号正数范围是有符号正数范围的两倍,是由于在二进制中无符号将第一个二进制数作为大小,幂加一。
1bytes
到8bytes
, 分得这么细的原因显然是为了节省空间,数据库在面对大型数据才不会太浪费空间类型 | 字节大小 | 描述 |
---|---|---|
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 | 极大文本数据 |
类型 | 字节大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
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 | 混合日期和时间值,时间戳 |
1). 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
2). 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
3). 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
4). 删除字段
ALTER TABLE 表名 DROP 字段名;
5). 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
1). 删除表
DROP TABLE [ IF EXISTS ] 表名;
2). 删除指定表, 并重新创建表(相当于清空数据)
TRUNCATE TABLE 表名;
在以上的对数据库或者表操作中,方法其实都是有规律的,总结规律如下
动作 + 类 + 对象 [附加条件]
如:
数据库: show databases;
表: show tables;
create database 数据库名称;
create table 表名称
等等诸如此类,都是比较语义化的代码