当前位置: 首页 > news >正文

MySQL基础知识大全

客户端和数据库操作

  1. 登录 mysql -uroot -p
  2. 查看当前的数据库版本 select version();
  3. 显示所有数据库 show databases;
  4. 创建数据库 create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则;
  5. 选择数据库 use 数据库名
  6. 查看当前选择了哪个数据库 select database();
  7. 删除数据库 drop [if exists] database 数据库名; //非常危险的操作
  8. 查看警告信息 show warnings;
  9. 退出 quit\exit

表操作

  1. 查看当前数据库中有哪些表 show tables;
  2. 创建一张新表 create table 表名(列表/字段名 数据类型[,列表/字段名 数据类型 ...]);
  3. 查看表结构 desc 表名;
  4. 删除表 drop 表名; //非常危险的操作

CRUD 增删改查

新增 - 插入

insert into 表名 [(列名[,列名...])] values (值[,值...]);
  • 指定了多少列名,就需要指定多少值,值与列名一一对应
  • 不指定列名,值的顺序与个数和表中所有的列一一对应

查询操作

a. 全列查询

select * from 表名; // 不加限制的查询会把表中所有的数据都查出来

b. 指定列查询

select 列名[,列名...] from 表名; // 推荐使用

c. 列为表达式的查询

select 列名表达式 from 表名;

d. 别名查询

select 列名表达式 [as] 别名 from 表名; // 别名中如果包含空格,需要用单引号引起来

e. 去重查询

select distinct 列名[,列名...] from 表名; // 如果列名有多个,去重时只有所有的列都相等,才会判定为重复,才会去重

f. 排序查询

select 列名[,列名...] from 表名 order by 列名 asc|desc; //asc 升序 desc 降序

g. 条件查询

select 列名[,列名...] from 表名 where 列名(表达式) 比较|逻辑运算符

h. 区间查询

where 列名 between 开始条件 and 结束条件; // 等价于 开始条件 <= 列的值 <= 结束条件

i. 模糊查询

select * from 表名 where 列名 like '值%'; //% 匹配任意字符 _ 匹配单个字符

j. 分页查询

select * from 表名 where 条件 order by 列名 asc|desc limit num; // 查询前 num 条记录

select * from 表名 where 条件 order by 列名 asc|desc limit start, num; // 从第 start 条开始,向后查 num 条

select * from 表名 where 条件 order by 列名 asc|desc limit num offset start; // 从第 start 条开始,向后查 num 条

更新

update 表名 set 列名 = 值 where 条件 order by 子句 limit num; // 如果不指定条件和 limit 的数量就会更新整表

删除

delete from 表名 where 条件 order by 子句 limit num; // 如果不指定条件和 limit 的数量就会删除整表中的数据

数据库约束

  1. 非空约束:NOT NULL 标记一个字段是否可以为空,指定了这个约束,字段就不能为空
  2. 唯一约束:UNIQUE 标记一个字段的内容在当前列中唯一,不能重复,但是可以为NULL
  3. 主键约束:PRIMARY KEY,在约束的方式上相当于NOT NULL + UNIQUE
  4. 默认约束:DEFAULT 当一个字段没有指定值时 (为NULL时),不指定列的值的时,就用默认值去填充该列
  5. 外键约束:FOREIGN KEY 一个表中的字段与另一个表中的主键建立关联关系,当对表中的数据进行增删改的时候数据库会帮我们进行检查

表的设计

三大范式

  1. 第一范式:要求表中的每一个列不可再分,有一个简单的方法,数据库中提供的数据类型里可以描述这个字段
  2. 第二范式:在满足第一范式的前提下消除部分函数依赖,字段只依赖于复合主键中的某一个列(多个候选键),如果有一个字段只依赖于复合主键中的某一个列,那么就需要把这个列剔除,单独建表,不满足第二范式的情况下会出现一些数据异常:数据冗余、更新异常,删除异常,新增异常
  3. 第三范式:在第二范式的基本下,消除传递依赖

关系模型

  1. 一对一关系:各自先建立各自的表,在其中一张表中加一个字段完成对另一张表的引用 (建立关系)
  2. 一对多关系:各自先建立各自的表,在这一方设置一个主键,在多这一方加一个字段,两表建立引用关系
  3. 多对多关系:各自先建立各自的表,另外新加一张关系表

聚合函数

  1. COUNT(列) 统计结果集的条数
  2. SUM(列) 求和
  3. AVG(列) 求平均值
  4. MIN(列) 最小值
  5. MAX(列) 最大值

GROUP BY 分组查询

对某一个字段进行分组操作,分组后可以结合聚合函数进行一些运算

HAVING 子句

GROUP BY的结果进行过滤

联合查询(表连接查询)

1. 内连接

select * from table1, table2 where table1.xxx = table2.xxx;
select * from table1 join table2 on table1.xxx = table2.xxx;
select * from table1 inner join table2 on table1.xxx = table2.xxx;

表连接的执行过程:

  1. 先计算参与表连接的笛卡尔积
  2. 通过连接条件过滤无效数据
  3. 加入查询条件得到想要的结果行
  4. 精减列名得到最终想要查询的列

2. 外连接,分为左外连接和右外连接

select * from table1 left join table2 on table1.xxx = table2.xxx;
select * from table1 right join table2 on table1.xxx = table2.xxx;

左外连接以左表为基准,左表中的所有的数据全部显示,右表中没有对应的记录用NULL去填充

右外连接以右表为基准,右表的表中所有的数据全部显示,左表中没有对应的记录用NULL去填充

主要应用在两张表数据不一致的场景里

3. 自连接

select * from table1 t1, table1 t2 where t1.xxx = t2.xxx;

把行转换成列,在查询的时候可以使用WHERE条件进行过滤,实现行与行之间的比较

4. 子查询

  • 单行子查询:select * from table1 where id = (select id from table2 where clo = xxx);
  • 多行子查询:select * from table1 where id IN (select id from table2 where clo = xxx);
  • 内层查询的结果做为外层查询的条件,把多条语句合并为一条执行
  • 子查询可以无限嵌套,层数过多会影响效率

5. 合并查询

select * from table1 union select * from table2;
select * from table1 union all select * from table2;

作用是把两个结果集中合并成一个返回

注意:合并查询时多个查询的查询列表必须匹配,MYSQL 不对结果做校验,写的时候务必注意

错误演示

mysql> select student_id, name from student union select class_id, name from class;
student_idname
1黑风李逹
2精英老祖
3问答
4盲盒
5不想毕业
6好好说
71
8老外学中文
1计算机 2019 级 1 班
2计算机 2019 级 3 班
3计应 2018 级 3 班
11 rows in set (0.00 sec)

6. 一条 SQL 语句中各部分的执行顺序

自己构造一条 SQL,不一定可以执行成功,但是相关的关键字都包含

SELECT DISTINCTs.id,name,AVG(age)
FROMstudent
JOINclass ON student.class_id = class.id
WHEREclass_id = 1
GROUP BYstudent.id
HAVINGAVG(age) > 0
ORDER BYstudent.id ASC
LIMIT 100;

执行顺序:FROM -> JOIN ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

http://www.dtcms.com/a/528498.html

相关文章:

  • 站群服务器都有什么作用
  • C# 初级编程
  • linux fair调度器
  • 建设工程项目在哪个网站查询零食网站页面模板
  • Python 基础详解:enumerate() 函数
  • 基于鸿蒙UniProton的车载信息娱乐系统开发指南
  • 自然语言处理前沿创新方向与技术路径
  • 微软做网页的软件烟台优化网站公司
  • 使用Jmeter进行http接口测试
  • Jenkins从节点配置全攻略:从搭建到任务调度,参数详解与实战指南
  • 【Agentic AI】提示链模式学习笔记
  • 广东省省考备考(第一百三十三天10.25)——科学推理(强化训练)
  • 四季变化,室外太阳光的剧烈变化, 从“被动适应”到“主动免疫”,机器视觉检测如何实现?
  • 观察者模式学习
  • 常用标准电阻表 | E24标准电阻表
  • 三、检索增强生成(RAG)技术体系
  • 【Leetcode hot 100】739.每日温度
  • JAVA国际版任务悬赏发布接单系统源码支持IOS+Android+H5
  • 网站做选择题怎么快速选择艺术品拍卖网站源码php
  • 大模型微调完整步骤( LLama-Factory)
  • Rust + PostgreSQL:deadpool 和 diesel 数据库连接池实战(四)
  • 关于门户网站建设讲话关键词挖掘查询工具爱站网
  • GitHub等平台形成的开源文化正在重塑可以让
  • RHCSA-12计划任务
  • 快速提高网站权重提升门户网站地方生活门户有哪些
  • 【开题答辩全过程】以 产品报价系统为例,包含答辩的问题和答案
  • JS基础Day01
  • 建c2c网站深圳有名的品牌设计公司
  • 网页文字游戏seo入门
  • Windows系统内置的WIN32控件可分为标准控件和通用控件两大类