MySQL数据库(SQL分类)

SQL分类

分类 全称 解释
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户,控制数据库的访问权限

DDL

数据库操作

sql 复制代码
-- 查询
--查询所有数据库
show databases;
--查询当前数据库
select database();
--创建数据库
create database [if not exists] 数据库名[defaul charset 字符集] [collate 排序规律];
--删除
drop database [if exists]数据库名;
--使用
use 数据库名; 

注:数据库语言不区分大小写
数据库语言都以分号结尾

表操作

查询表

sql 复制代码
--查询当前数据库所有表
  show tables;
  -- 查询表结构
  desc 表名;
  -- 查询指定表的建表语句
  show create table 表名;

创建表

sql 复制代码
create table 表名(
字段1 字段1类型[comment 字段1注释]
字段2 字段2类型[comment 字段1注释]
字段3 字段3类型[comment 字段1注释]
.......
) [comment 表注释];

comment 为可选项,作用类似是注释,解释字段或表

sql 复制代码
 create table user(
     id int comment '编号',
     name varchar(50) comment '姓名',
    age int comment '年龄',
     gender varchar(50) comment '性别'
     ) comment '用户表';

查询表结构

查询建表语句

修改表

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

sql 复制代码
-- 在emp表增加一个新的字段"昵称"为nickname,类型为varchar(20)
alter table emp add nickname varchar(20) comment "昵称";

修改字段

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

2.修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]

3.修改表名
alter table 表名 rename to 新表名;

sql 复制代码
--将emp表中的nickname字段修改为username,类型为varchar(30)
alter table emp nickname username varchar(30) comment '昵称';
-- 将emp表的表名修改为employee
alter table emp rename to employee;


删除表

1.删除表
drop table [if exists] 表名;

2.删除指定表,并重新创建该表
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) ~ (0, 3.4028236E+38) 单精度浮点数
DOUBLE 8 字节 ~(-1.7976931348623157E+308, ...308) ~ (0, 1.7976931348623157E+308) 双精度浮点数
DECIMAL 可变大小 精确的定点数值 精确的定点数值 ,依赖M(精度)D(标度) 小数值 (精确度高)

解释:精度指整个小数的长度,标度指小数位数。

举例:age TINYINT UNSIGNED占用字节小且不会出现负数

score DOUBLE(4,1)一位小数,长度为4

以下是表格清晰化后的内容,用中文并使用 Markdown 格式:


字符串/文本类型数据类型概览

分类 类型 大小 描述
字符串类型 CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
二进制类型 TINYBLOB 0-255 bytes 不超过 255 个字节的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65535 bytes 二进制形式的长文本数据
TEXT 0-65535 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 超长文本数据

  1. 字符串类型
    CHAR :定长字符串,适合长度固定的文本数据。
    VARCHAR :变长字符串,适合长度可变的文本数据。
    区别 :char(10)即使只有一个长度也会占用10个字节;varchar(10)最多占用10个字节,真正占用字节数取决于长度
  2. 二进制类型和文本类型
    BLOB :用于存储二进制数据,例如图片或文件。
    TEXT :用于存储文本数据,按长度分为 TINYTEXTTEXTMEDIUMTEXTLONGTEXT
    数据大小根据具体需求选择合适的类型,超长数据需要使用 LONGBLOBLONGTEXT

以下是日期类型数据清晰化后的表格,用中文并使用 Markdown 格式展示:


分类 类型 大小 范围 格式 描述
日期类型 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. DATE 类型:

    • 存储纯日期值(例如:生日、节假日)。
    • 格式为 YYYY-MM-DD
  2. TIME 类型:

    • 用于表示时间值(时、分、秒),支持负值,适用于持续时间表示。
  3. YEAR 类型:

    • 用于存储年份值,适合年份相关数据(如生产年份)。
  4. DATETIME 类型:

    • 组合日期和时间的值,精确到秒,适用于完整的日期时间记录。
  5. TIMESTAMP 类型:

    • 表示自 1970 年以来的时间点,用于记录操作时间,受时区影响。

示例:

sql 复制代码
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 '员工表';   

输入后形成的表结构:

DML

添加数据

  1. 给指定字段添加数据
    insert into 表名 (字段1,字段2,....) values(值1,值2,....);
  2. 给全部字段添加数据
    insert into 表名 values(值1,值2,值3,....);
  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条件为可选项,但是如果不加默认为修改所有数据

sql 复制代码
 -- 修改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 条件];
注:
1.delete语句的条件为可选项,如果没有,会删除表中的所有数据
2.delete语句不能删除某一个字段的值(可以使用update)

sql 复制代码
-- 删除gender为女的数据
delete from employee where gender = "女";

DQL

数据查询语言,用来查询数据库中表的记录

关键字:select
语法
select : 字段列表
from:表名列表
where:条件列表
group by:分组字段列表
having:分组后条件列表
order by:排序字段列表
limit:分页参数
基本查询
条件查询 (WHERE)
聚合查询 (count,max,min,avg,sum)
分组查询 (group by)
排列查询 (order by)

** 分页查询**(limit)

1.查询多个字段
select 字段1,字段2,字段3...from 表名;
select * from 表名;

2.设置别名
select 字段1[as 别名],字段2[as 别名2]...from 表名;

3.取出重复记录
select distinct 字段列表 from 表名;

重新创建emp表,并输入信息:

sql 复制代码
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 '员工表';

输入信息后:

sql 复制代码
 -- 查询指定字段 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;
相关推荐
瓯雅爱分享24 分钟前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
BTU_YC2 小时前
Neo4j查询计划完全指南:读懂数据库的“执行蓝图“
数据库·neo4j
非极限码农2 小时前
Neo4j图数据库上手指南
大数据·数据库·数据分析·neo4j
mit6.8243 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
咋吃都不胖lyh3 小时前
SQL-多对多关系
android·mysql·数据分析
苏打水com3 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
莫叫石榴姐4 小时前
SQL百题斩:从入门到精通,一站式解锁数据世界
大数据·数据仓库·sql·面试·职场和发展
shan~~4 小时前
linux达梦数据库操作
linux·数据库·chrome
武文斌775 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
CoderIsArt5 小时前
SQLite架构
数据库·sqlite