| 缩写 | 全称 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义语言,用于定义数据库中的对象,如数据库、表、字段等结构。 |
| DML | Data Manipulation Language | 数据操作语言,用于对数据库表中的记录进行插入、删除和修改操作。 |
| DQL | Data Query Language | 数据查询语言,主要用于检索数据库表中的数据记录。 |
| DCL | Data Control Language | 数据控制语言,用于管理数据库用户权限及访问控制,例如创建用户、授予权限等。 |
在执行SQL语句时,需注意以下通用规则:
-- 查询
--查询所有数据库
show databases;
--查询当前数据库
select database();
--创建数据库
create database [if not exists] 数据库名[defaul charset 字符集] [collate 排序规律];
--删除
drop database [if exists]数据库名;
--使用
use 数据库名;
--查询当前数据库所有表
show tables;
-- 查询表结构
desc 表名;
-- 查询指定表的建表语句
show create table 表名;
create table 表名(
字段1 字段1类型[comment 字段1注释]
字段2 字段2类型[comment 字段1注释]
字段3 字段3类型[comment 字段1注释]
.......
) [comment 表注释];
其中,comment 为可选参数,常用于添加注释信息,便于理解字段或表的用途。
create table user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(50) comment '性别'
) comment '用户表';
alter table 表名 add 字段名 类型(长度)[comment 注释] [约束];
-- 在emp表增加一个新的字段“昵称”为nickname,类型为varchar(20)
alter table emp add nickname varchar(20) comment "昵称";
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]
alter table 表名 rename to 新表名;
--将emp表中的nickname字段修改为username,类型为varchar(30)
alter table emp nickname username varchar(30) comment '昵称';
-- 将emp表的表名修改为employee
alter table emp rename to employee;
drop table [if exists] 表名;
truncate table 表名;
| 类型 | 存储空间 | 有符号范围 (SIGNED) | 无符号范围 (UNSIGNED) | 描述 |
|---|---|---|---|---|
| TINYINT | 1 字节 | (-128, 127) | (0, 255) | 适用于小数值场景 |
| SMALLINT | 2 字节 | (-32,768, 32,767) | (0, 65,535) | 较小的整数存储 |
| MEDIUMINT | 3 字节 | (-8,388,608, 8,388,607) | (0, 16,777,215) | 中等范围整数 |
| INT / INTEGER | 4 字节 | (-2,147,483,648, 2,147,483,647) | (0, 4,294,967,295) | 标准整型,最常用 |
| BIGINT | 8 字节 | (-2^63, 2^63-1) | (0, 2^64-1) | 大数值整型,适合超大数据 |
| 类型 | 存储空间 | 取值范围(近似) | 特点说明 |
|---|---|---|---|
| FLOAT | 4 字节 | ~(-3.4028236E+38, 3.4028236E+38) | 单精度浮点数,适用于一般精度要求 |
| DOUBLE | 8 字节 | ~(-1.7976931348623157E+308, ...) | 双精度浮点数,更高精度计算 |
| DECIMAL | 可变长度 | 精确表示 | 高精度定点数,常用于财务计算。M代表总位数(精度),D代表小数位数(标度)。 |
示例:
age 字段推荐使用 TINYINT,占用空间小且通常不会出现负数情况。TINYINT UNSIGNED
score 若保留一位小数且最大长度为4位,则 DECIMAL(4,1) 更合适。DOUBLE(4,1)
| 分类 | 类型 | 大小限制 | 描述 |
|---|---|---|---|
| 字符串类型 | CHAR | 0 - 255 字节 | 定长字符串,适合固定长度内容,如性别、状态码等。 |
| VARCHAR | 0 - 65535 字节 | 变长字符串,节省空间,适合长度变化较大的文本。 |
char(10)
varchar(10)
| 类型 | 大小范围 | 用途说明 |
|---|---|---|
| TINYBLOB | 0 - 255 字节 | 存储小型二进制数据 |
| TINYTEXT | 0 - 255 字节 | 短文本内容存储 |
| BLOB | 0 - 65,535 字节 | 较长的二进制数据,如图片、文件片段 |
| TEXT | 0 - 65,535 字节 | 普通长度文本数据 |
| MEDIUMBLOB | 0 - 16,777,215 字节 | 中等长度的二进制数据 |
| MEDIUMTEXT | 0 - 16,777,215 字节 | 中等长度文本 |
| LONGBLOB | 0 - 4,294,967,295 字节 | 超大型二进制对象 |
| LONGTEXT | 0 - 4,294,967,295 字节 | 超长文本内容存储 |
使用建议:
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
LONGBLOB
LONGTEXT
| 类型 | 存储大小 | 有效范围 | 格式 | 说明 |
|---|---|---|---|---|
| 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 | 时间戳,受时区影响,自动更新常见于日志场景 |
用于记录联合的日期与时间值,适用于标记具体的时间点。
DATETIME 类型:将日期和时间组合存储,精度可达秒级,适合需要完整时间戳的场景。
TIMESTAMP 类型:表示自 1970 年 1 月 1 日以来的时间戳,常用于记录操作发生的具体时间,受时区设置影响。
DATE 类型:仅用于保存日期信息(如生日、节假日等),不包含时间部分。其标准格式为:
YYYY-MM-DD
TIME 类型:专门用来表示时间值(小时、分钟、秒),支持负数,可用于持续时间的计算。
YEAR 类型:用于存储年份数据,适用于记录与年相关的字段,例如设备生产年份或作品发布年份。
示例展示如下:
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
sno char(18) comment '身份证号',
time date comment '入职时间'
) comment '员工表';
输入数据后生成的表结构如下所示:
向指定字段插入单条记录:
insert into 表名 (字段1,字段2,....) values(值1,值2,....);
向所有字段插入完整记录:
insert into 表名 values(值1,值2,值3,....);
批量插入多条数据:
inset into 表名 (字段名1,字段名2,....) values (值1,值2,值3,...) (值1,值2,值3,....);
insert into 表名 values(值1,值2,值3,....),(值1,值2,值3,....);
SQL 示例语句:
– 向指定字段插入数据 insert into employee(id,workno,name,gender,age,sno,time) values (1,'1','hong','女',19,123456789123456789,'2024-12-16'); – 查询表中全部数据 SELECT * from employee; – 插入完整字段的数据 insert into employee values (2,'2','kang','男',20,123456789456789123,'2025-05-06'); – 批量添加多条记录 insert into employee values (3,'3','tong','女',20,123456789456723123,'2025-05-06'), (4,'4','miaomiao','女',20,145456789456789123,'2024-05-06');
修改现有记录中的字段值:
update 表名 set 字段名1 = 值1,字段2 = 值2,....[where 条件]
注意:WHERE 条件是可选的。若省略该条件,则会更新表中所有行的数据。
-- 修改id为1的数据,将name改为'rora'
update employee set name = 'rora' where id = 1;
-- 修改id为4的数据,将age改为23
update employee set age = 23 where id = 4;
-- 修改所有数据,将日期改为2020-06-16
update employee set time = '2020-06-16';
从表中移除指定或全部记录:
delete from 表名 [where 条件];
说明:
-- 删除gender为女的数据
delete from employee where gender = "女";
DQL 主要用于查询数据库表中的记录,核心关键字为 SELECT。
1. 查询多个字段的数据:
select 字段1,字段2,字段3...from 表名;
select * from 表名;
2. 使用别名显示查询结果:
select 字段1[as 别名],字段2[as 别名2]...from 表名;
3. 去除查询结果中的重复项:
select distinct 字段列表 from 表名;
重新创建 emp 表并导入测试数据:
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 '身份证号',
workaddress VARCHAR(50) COMMENT '工作地址',
entrydate DATE COMMENT '入职时间'
) COMMENT '员工表';
完成数据录入后的效果:
-- 查询指定字段 name,workno,age,返回
select name,workno,age from emp;
-- 查询所有字段
select * from emp;
select id,workno,name,gender,age,idcard,workaddress,entrydate from emp;
-- 查询所有员工工作地址,起别名
select workaddress as '工作地址' from emp;
-- 查询员工地址,去重
select distinct workaddress from emp;
扫码加好友,拉您进群



收藏
