Mysql的使用

Mysql的使用

文章目录

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

DDL

数据库

操作功能 语法语句 补充说明
查询所有数据库 show databases; 列出 MySQL 服务器中存在的所有数据库
查询当前数据库 select database(); 返回当前所在的数据库名称,若未选中数据库则返回 NULL
使用 / 切换数据库 use 数据库名; 切换到指定名称的数据库进行后续操作
创建数据库(常规) create database 数据库名; 直接创建指定名称数据库,若已存在会报错
创建数据库(避免报错) create database if not exists 数据库名; 若数据库不存在则创建,存在则不执行创建操作,避免报错
删除数据库(常规) drop database 数据库名; 直接删除指定数据库,若不存在会报错
删除数据库(避免报错) drop database if exists 数据库名; 若数据库存在则删除,不存在则不执行删除操作,避免报错

约束类型

约束 描述 关键字
非空约束 限制该字段值不能为null not null
唯一约束 保证字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 default
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key

数值类型

类型 大小 有符号(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(标度)的值 小数值(精确定点数)

字符串类型

类型 大小 描述
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 混合日期和时间值,时间戳
mysql 复制代码
-- 建表
create table  表名(
        字段1  字段1类型 [约束]  [comment  字段1注释 ],
        字段2  字段2类型 [约束]  [comment  字段2注释 ],
        ......
        字段n  字段n类型 [约束]  [comment  字段n注释 ] 
) [ comment  表注释 ] ;

-- 查询当前数据库的所有表
show tables;

-- 查看指定的表结构
desc 表名 ;   -- 可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息

-- 查询指定表的建表语句
show create table 表名 ;

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

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

-- 删除字段
alter table 表名 drop 字段名;

-- 修改表名
rename table 表名 to  新表名;

-- 删除表
drop  table [ if exists ]  表名;

DML

操作类型 语法示例 功能说明
插入数据(全字段) INSERT INTO tb_user VALUES (1, 'zhangsan', '张三', 20, '男'); 按表中字段顺序插入一条完整数据,需包含所有字段值(自增字段可省略或填 NULL)
插入数据(指定字段) INSERT INTO tb_user (username, name, age) VALUES ('lisi', '李四', 22); 只插入指定字段的数据,未指定的字段将使用默认值(如 NULL 或定义的 DEFAULT)
批量插入数据 INSERT INTO tb_user (username, name) VALUES ('wangwu', '王五'), ('zhaoliu', '赵六'); 一次插入多条数据,提高操作效率
更新数据(全表) UPDATE tb_user SET age = 21; 将表中所有记录的 age 字段值改为 21(谨慎使用,可能影响大量数据)
更新数据(条件) UPDATE tb_user SET age = 23 WHERE username = 'zhangsan'; 只更新满足 WHERE 条件的记录(如用户名是 zhangsan 的行)
更新多字段 UPDATE tb_user SET age = 24, gender = '女' WHERE id = 3; 同时更新多个字段的值,用逗号分隔字段赋值表达式
删除数据(全表) DELETE FROM tb_user; 删除表中所有记录(表结构保留,数据清空,谨慎使用)
删除数据(条件) DELETE FROM tb_user WHERE age < 18; 只删除满足 WHERE 条件的记录(如年龄小于 18 的行)

DQL

比较运算符:

比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between ... and ... 在某个范围之内(含最小、最大值)
in(...) 在in之后的列表中的值,多选一
like 占位符 模糊匹配(_匹配单个字符, %匹配任意个字符)
is null 是null

逻辑运算符

逻辑运算符 功能
and 或 && 并且 (多个条件同时成立)
or 或 || 或者 (多个条件任意一个成立)
not 或 ! 非 , 不是

聚合函数

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
操作类型 语法示例 功能说明
基础查询(全字段) SELECT * FROM tb_user; 查询表中所有字段的所有记录(* 表示所有字段,不推荐在生产环境使用)
基础查询(指定字段) SELECT id, username, age FROM tb_user; 查询表中指定字段的所有记录,仅返回需要的字段
条件查询 SELECT name, age FROM tb_user WHERE age > 18 AND gender = '男'; WHERE 子句筛选满足条件的记录,支持 ANDORNOT 逻辑运算符
模糊查询 SELECT username FROM tb_user WHERE name LIKE '张%'; LIKE 匹配字符串模式(% 表示任意字符,_ 表示单个字符)
范围查询 SELECT * FROM tb_user WHERE age BETWEEN 20 AND 30; BETWEEN...AND 查询字段值在指定范围内的记录
空值查询 SELECT * FROM tb_user WHERE email IS NULL; IS NULLIS NOT NULL 查询字段为空或非空的记录
排序查询 SELECT name, age FROM tb_user ORDER BY age DESC, id ASC; ORDER BY 排序(DESC 降序,ASC 升序,默认升序),支持多字段排序
分页查询 SELECT * FROM tb_user LIMIT 10 OFFSET 0;SELECT * FROM tb_user LIMIT 0, 10; LIMIT 限制返回记录数(OFFSET 指定起始位置,默认从 0 开始)
去重查询 SELECT DISTINCT gender FROM tb_user; DISTINCT 去除查询结果中重复的记录(针对所有查询字段的组合去重)
聚合查询 SELECT COUNT(*) 总人数, AVG(age) 平均年龄 FROM tb_user; 用聚合函数(COUNT/SUM/AVG/MAX/MIN)对数据进行统计
分组查询 SELECT gender, COUNT(*) 人数 FROM tb_user GROUP BY gender; GROUP BY 按指定字段分组,结合聚合函数统计每组数据
分组筛选 SELECT gender, AVG(age) 平均年龄 FROM tb_user GROUP BY gender HAVING AVG(age) > 25; HAVING 对分组后的结果进行筛选(HAVING 可接聚合函数,WHERE 不行)
多表连接查询(内连接) SELECT u.name, o.order_no FROM tb_user u INNER JOIN tb_order o ON u.id = o.user_id; INNER JOIN 查询两表中满足连接条件的匹配记录
多表连接查询(左连接) SELECT u.name, o.order_no FROM tb_user u LEFT JOIN tb_order o ON u.id = o.user_id; LEFT JOIN 查询左表所有记录,右表无匹配时显示 NULL
子查询 SELECT * FROM tb_user WHERE age > (SELECT AVG(age) FROM tb_user); 嵌套在主查询中的查询,子查询结果作为主查询的条件或数据源
相关推荐
白鹭6 小时前
MySQL源码部署(rhel7)
数据库·mysql
星期天要睡觉8 小时前
MySQL 综合练习
数据库·mysql
JosieBook9 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql
处女座_三月9 小时前
改 TDengine 数据库的时间写入限制
数据库·sql·mysql
DemonAvenger9 小时前
MySQL与应用程序的高效交互模式:从基础到实战的最佳实践
数据库·mysql·性能优化
皆过客,揽星河11 小时前
mysql进阶语法(视图)
数据库·sql·mysql·mysql基础语法·mysql进阶语法·视图创建修改删除
2301_7795037614 小时前
MySQL主从同步--主从复制进阶
数据库·mysql
beijingliushao14 小时前
58-正则表达式
数据库·python·mysql·正则表达式
刘一说15 小时前
Spring Boot+Nacos+MySQL微服务问题排查指南
spring boot·mysql·微服务