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;
相关推荐
这猪好帅30 分钟前
【Redis】初识Redis
数据库·redis·缓存
网络安全-老纪43 分钟前
网络安全的几种攻击方法
网络·数据库·web安全
蒜蓉大猩猩1 小时前
Node.js --- 详解MongoDB与Mongoose
数据库·后端·mongodb·node.js
Elastic 中国社区官方博客2 小时前
Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图
大数据·sql·elasticsearch·搜索引擎·数据可视化·kibana
张声录12 小时前
【ETCD】【源码阅读】深入探索 ETCD 源码:了解 `Range` 操作的底层实现
java·数据库·etcd
VX_CXsjNo12 小时前
免费送源码:Java+ssm+Android 基于Android系统的外卖APP的设计与实现 计算机毕业设计原创定制
android·java·css·spring boot·mysql·小程序·idea
命运之手2 小时前
[ Spring ] Install MySQL on Unbuntu24
mysql·ubuntu24
weixin_438197382 小时前
mysql存储过程创建与删除(参数输入输出)
数据库·sql·mysql
V+zmm101343 小时前
基于微信小程序的汽车销售系统的设计与实现springboot+论文源码调试讲解
java·数据库·spring boot·微信小程序·小程序·毕业设计
cg50173 小时前
Mysql 和 navicat 的使用
数据库·mysql