Mysql

news2025/7/20 9:29:16

1.约束
2.数据库设计
3.多表查询
4.事物
5.新增/删除/修改语句
6.单表条件查询
7.函数
8.创建数据库/数据表

执行顺序

第一步:from 指定要操作的表

第二步:join 连接表生成一个笛卡尔积

第三步:on 对笛卡尔积进行筛选

第四步:where 筛选条件

第五步:group by 对数据进行分组

第六步:max min avg count sum 执行分组函数

第七步:having 对分组后的数据进行过滤

第八步:select 选取结果

第九步:distinct 去除重复结果

第十步:order by 将结果进行排序

第十一步:limit 取结果集中的部分数据

约束

  • 非空约束,保证列表中数据,不能为null (NOT NULL)
  • 唯一约束,保证列中所有数据各不相同 (UNIQUE)
  • 主键约束,主键字段是唯一标识,非空且唯一,一张表只有一个 (PRIMARY KEY)
  • 检查约束,保证列中值满足某一条件(mysql不支持) (CHECK)
  • 默认约束,保存数据时,未指定值采用默认值 (DEFAULT)
  • 外键约束,外键约束让两个表之间建立连接,保证数据的一致性和完整性 (FOREIGN KEY)
  • 自动增长,auto_increment

约束运用

-- 员工表
CREATE TABLE emp (
id INT PRIMARY KEY auto_increment, -- 员工id,主键且自增长
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一
joindate DATE NOT NULL , -- 入职日期,非空
salary DOUBLE(7,2) NOT NULL , -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
);

添加非空约束

--新建:
-- 创建表时添加非空约束
CREATE TABLE 表名(
列名 数据类型 NOT NULL,);
-- 建完表后删除
ALTER TABLE 表名 MODIFY 字段名 数据类型;
-- 建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
-- 删除非空约束
ALTER TABLE emp MODIFY ename VARCHAR(50);
-- 新建非空约束
ALTER TABLE emp MODIFY ename VARCHAR(50) NOT NULL;

添加唯一约束

-- 创建表时添加唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],
-- AUTO_INCREMENT: 当不指定值时自动增长);
CREATE TABLE 表名(
列名 数据类型,[CONSTRAINT] [约束名称] UNIQUE(列名)
);

-- 删除唯一约束
 ALTER TABLE emp DROP INDEX ename;
-- 新建唯一约束
 ALTER TABLE emp MODIFY ename VARCHAR(50) UNIQUE;

默认约束

-- 创建表时添加默认约束
CREATE TABLE 表名(
列名 数据类型 DEFAULT 默认值,);

--  删除默认
ALTER TABLE emp ALTER bonus DROP DEFAULT;
--  新建默认约束
ALTER TABLE emp ALTER bonus SET DEFAULT 0;

主键约束

-- 删除主键约束,要先删除自增
alter table emp modify id int;
-- 删除主键约束
ALTER TABLE emp DROP PRIMARY KEY;
-- 添加主键约束
ALTER TABLE emp ADD PRIMARY KEY(id);
-- 添加自增
alter table emp modify id INT  auto_increment;
-- 设置自增默认值
alter table emp  auto_increment=3; 

外键约束
添加外键约束,当主表想要删除关联从表的数据时,需要看从表有没有关联的数据,如果有的话,不能删除,需要删除从表的数据后,才可以删除主表的数据
在这里插入图片描述

-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
-- CONSTRAINT fk_emp_dept(别名) FOREIGN KEY(dep_id)->从表连接id  REFERENCES dept(id)->主表连接id
);

数据库设计

需求分析-设计-编码-测试-安装部署
一对多:在多的一方建立外键,指向主表
多对多:中间表包含两个外键
一对一:在任意一方建立外键,关联主键,设置唯一

多表查询

多表查询
内连接:相当于查询A B的交集数据
外连接:(左外连接/右外连接)查询A表所有的数据和与B表有交集的数据
内连接
select 字段 from 表1,表2 where 条件
select 字段 from表1 join 表2 on 条件

-- 隐式内连接
SELECT a1.NAME,a1.gender,a2.dname FROM emp as a1, dept as a2 WHERE a1.dep_id = a2.did
-- 显示内连接
SELECT a1.NAME,a1.gender,a2.dname FROM emp as a1 JOIN dept as a2  ON a1.dep_id = a2.did;

外连接
左外连接
在这里插入图片描述右外连接
在这里插入图片描述子查询

语法:

单行单列->作为作为值 使用 > < = != 作为判断:

SELECT * FROM emp WHERE salary > (SELECT salary FROM emp WHERE name = '猪八戒')

多行单列 ->当查询的结果存在多个时:

SELECT * from emp WHERE dep_id in (SELECT did FROM dept WHERE dname ='财务部' or dname = "市场部"); 

多行多列 作为虚拟表 -> 查询出的表为结果集时,将当前当作虚拟表来看:
跟在from后面:

SELECT * FROM (SELECT * FROM emp WHERE join_date > '2011-11-11')  t1 , dept where  t1.dep_id = dept.did

事物

事物:事物把所有命令看作一个整体提交或撤销,即一组数据要么同时成功,要么同时失败. 开启事物时,先进性虚拟存储,成功或回滚后,才能持久化操作.
1.开启事物 begin / start Transaction
2.操作
3.提交事物 commit 或者 回滚事物 Rollback

事物的四大特征:
ACID
1.原则性(Atomicity)事物要么同时成功,要么同时失败
2.一致性 (Consistency)事物完成时,必须保持一致
3.隔离性 (Isolation)多个事物之间,可以同时操作数据
4.持久性 (Durability)事物一旦提交或回滚,数据库中的数据永久保存

mysql事物是默认提交的
select @@autocommit 查看事物的提交方式
set @@autocommit = 0; 修改事物的提交方式

新增语句

INSERT INTO 表名(字段) VALUES (字段对应的值)
INSERT INTO 表名 VALUES (字段对应的值)

删除语句

-- 删除单条数据
DELETE FROM 表名 WHERE 字段 = 条件 ;
-- 删除多条数据
DELETE FROM 表名

更新语句

-- 更新一条数据
UPDATE user  SET 字段 = 将要修改的值 WHERE 字段 = 修改的条件; 
-- 更新全部数据
UPDATE user  SET  字段 = 将要修改的值  更新表中的全部数据

单表条件查询

字段去除重复

查看当前去除重复的字段
SELECT DISTINCT 字段 FROM 表名;

WHERE 条件判断

SELECT * FROM 表名 WHERE 字段 <   >  =    <=   >=   !=

BETWEEN AND 在xx 与 xx之间

当前字段的数据  值1 <= 字段数据 <=2
SELECT * FROM 表名 WHERE 字段 BETWEEN1 AND2 

Like 模糊查询

Select * from emp where 字段 like 'M%';    M开头的
案例
Select * from 表名 where 字段 like '5%';       以为5开头的数据
Select * from 表名 where 字段 like '%1';       结尾以1开始数据
Select * from 表名 where 字段 like '%5%';      中间为5的数据
Select * from 表名 where 字段 like '_5%';      任意数据开头+5的数据

in 多条件查询

SELECT * FROM 表名 WHERE 字段 IN (1,值2...)

REGEXP 当前字段数据是否在指定范围

SELECT * FROM 表名 WHERE 字段 REGEXP   '[a-e]';      字段包含a-e的全部数据
SELECT * FROM 表名 WHERE 字段 REGEXP   '[^a-e]';     字段不包含a-e的全部数据

OR 或者 AND 而且

语法 
select * from 表名 where 字段 (条件表达式=<>) 字段值  AND/or  字段 (条件表达式=<>-- 用法
userid = 2 并且 username = b
select * from user1 where userid = 2 AND username = 'b';
userid = 2 或者 username = a
select * from user1 where userid = 2 or username = 'a';

LIMIT分页每页显示的数据

select * from 表名 LIMIT 每页显示的数据;
使用:
查询10条数据,索引从09,第1条记录到第10条记录
select * from 表名 LIMIT 10; 
查询8条数据,索引从512,第6条记录到第13条记录
select * from 表名 LIMIT 5,8;

表/字段起别名

表起别名
select a.字段,b.字段 from 表名 as a, 表名 as b where  xxxxxxxx;
字段起别名
SELECT 字段 AS 别名, 字段 AS 别名  FROM 表名;

GROUP BY 分组函数

SELECT * FROM 表名 GROUP BY 分组值;
使用->根据名称分组,查询同组的相同记录数
SELECT count(username),username '记录数' FROM user1 GROUP BY username;

order by 排序

ASC 从小到大
select * from 表名 order by 字段 ASC;
DESC 从大到小
select * from 表名 order by 字段 DESC;

函数

搭配group by进行查询

select 函数 from 表名
聚合函数 使用
count -> 返回总记录数  count(*) 所有的记录数  count(字段) 当前字段的记录数 
select count(*) from emp 
max(列名)  -> 最大值 
select max(salary) from emp 
min(列名)  ->  最小值
select min(salary) from emp 
sum(求和)  ->  求和
select sum(salary) from emp 
avg(字段)
SELECT avg(salary) FROM emp

创建数据库/表

创建数据库
CREATE DATABASE   库名;


删除数据库
drop database  数据库名;

选择数据库
use 数据库名;

新建数据表
-- 员工表
CREATE TABLE emp (
id INT PRIMARY KEY auto_increment, -- 员工id,主键且自增长
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一
joindate DATE NOT NULL , -- 入职日期,非空
salary DOUBLE(7,2) NOT NULL , -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
);

删除数据表
DROP table 表名;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch深度学习实战(1)—— 使用LSTM 自动编码器进行时间序列异常检测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

并发编程面试题

并发 为什么要使用并发编程&#xff08;并发编程的优点&#xff09; 并发编程可以提升 CPU 的计算能力的利用率&#xff0c;通过并发编程的形式可以将多核CPU 的计算能力发挥到极致提升程序的性能&#xff0c;如&#xff1a;响应时间、吞吐量、计算机资源使用率等。并发程序可…

Golang 数组基础

数组内部实现和基础功能 了解Go的数据结构&#xff0c;一般会从数组开始&#xff0c;因为数组是切片和映射的基础数据结构。 内部实现 在Go语言中&#xff0c;数组是一个长度固定的数据类型&#xff0c;用于存储一段具有相同的类型的元素连续块。数组的类型是固定统一的&…

Vue框架插槽(第八课)

案例 组件信息的通信 自己思考一下 答案在本文章的后面插槽 v-slot 这个时候我们就可以来定义插槽slot&#xff1a; 插槽的使用过程其实是抽取共性、预留不同&#xff1b;我们会将共同的元素、内容依然在组件内进行封装&#xff1b;同时会将不同的元素使用slot作为占位&#xf…

CTC 技术介绍概述——啃论文系列

CTC 技术介绍概述——啃论文系列 文章目录CTC 技术介绍概述——啃论文系列自我介绍摘要前言知识导图1. 定义2. 诞生背景2.1 频谱紧张例子&#xff0c;wifi的5GHz2.2 通信干扰——CTI2.3 管理困难2.4 异构通信传统实现——网关桥接2.5 CTC——异构直接通信3. 包级CTC3.1 基于RSS…

个人设计web前端大作业 基于html5制作美食菜谱网页设计作业代码

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

基于PHP+MySQL长途客用汽车票订票系统的设计与实现

随着时代的变迁汽车已经成为了人们日常生活中不可或缺的一部分,虽然很多人已经拥有了私家车,但是很多时候因为离家较远等原因,很多时候人们还是会通过客用汽车来进行一些出行,但是通常情况下客用车票都需要到客用站进行购买,这极其的不便利。 为了能够让用户足不出户就可以进行…

拿稳这24道JVM面试题,要价30k都有底气

1.什么是JVM? JVM 的全称是 「Java Virtual Machine」&#xff0c;也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件&#xff0c;并且能够解析它的指令&#xff0c;最终调用操作系统上的函数&#xff0c;完成我们想要的操作。 C开发出来的程序&#xff0c;编译…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.10 MongoDB 基础操作

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.10 MongoDB 基础操作4.10.1 MongoDB 基础操作4.10…

(3)paddle---近视眼睛分类的例子

1主要参考 &#xff08;0&#xff09;本教程和以下教程不够详细&#xff0c;还是推荐下面这个大佬的blog看一下 计算机视觉——眼疾图片识别&#xff08;数据集iChallenge-PM&#xff09;_「已注销」的博客-CSDN博客 &#xff08;1&#xff09;blibli视频 252-06_预测病理性…

Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架

Vue2 与 Vue3 的区别 Vue3由于完全由TS进行重写&#xff0c;在应用中对类型判断的定义和使用有很强的表现。同一对象的多个键返回值必须通过定义对应的接口&#xff08;interface&#xff09;来进行类型定义。要不然在 ESLint 时都会报错。Vue2 与 Vue3 最大的区别: Vue2 使用…

jquery把页面<table>里的内容导出为后缀名为.xlsx的excel

1、问题描述 之前是用Blob把页面的<table>导出成.xls的Excel文件&#xff1a;Blob把html导出为excel文件_金斗潼关的博客-CSDN博客 不过由于微软的Excel对.xls扩展名的文件支持不是很好&#xff0c;打开会报一个警告 所以用户反馈说是不想弹出这个警告&#xff0c;要求…

【深度学习入门 2022 最新版】第一课 深度学习简介

【深度学习入门 2022 最新版】第一课 深度学习简介概述深度学习 vs 机器学习机器学习是什么深度学习是什么机器学习和深度学习的区别神经网络机器学习实现二分类神经网络实现二分类TensorFlowPyTorch神经网络的原理张量张量最小值 (补充)张量最大值 (补充)前向传播损失计算反向…

手撕AVL树

目录 一、概念 二、 结点的定义 2.1 键值对pair 2.2 定义细节 三、 AVL树的插入操作 3.1 平衡因子调整规则 3.2 旋转规则 3.2.1 新节点插入较高左子树的左侧 — 左左:右单旋 3.2.2 新节点插入较高右子树的右侧 — 右右:左单旋 3.2.3 新节点插入较高左子树的右侧 — …

论文管理系统(准备工作)

目录 一、项目需求响应图 二、准备工作 2.1创建一个Spring Initializr项目 2.2后端架构 2.2.1 controller层 2.2.2 entity层 2.2.3 interceptors层 2.2.4 mapper层 2.2.5 serivice层 2.2.6 main运行 2.2.7 mappers文件 2.3配置 application.yml文件 2.4加入依赖 一、项…

Postman如何携带token——Bearer Token和Headers

目录一、使用场景二、设置Bearer Token1.设置你的环境变量2.项目集合设置认证方式及环境变量3.登录接口的脚本三、通过脚本设置Headers1.登录请求设置环境变量2.设置集合的发送请求脚本一、使用场景 现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用…

C++ Builder XE关于AdvStringGrid对EXCEL母表快速分表,并批量插入sheet子表简单操作

如何快速将ECXEL母表快速批量生成多个子表分表&#xff0c;并且在表中插入sheet子表的简单操作&#xff1a; //AdvStringGrid2->SaveToXLS(filename,false);//生成新EXCEL表格 //AdvStringGrid2->SaveToXLSSheet(filename,Fname);//插入sheet子表 //-----------------…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(五)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

XSS-labs靶场实战(五)——第12-14关

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是XSS-labs靶场实战第12-14关。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对…

认识和使用容器

目录 前言 一、容器化背后的发展历史和概念 1.容器的抽象 容器的比喻 2.计算机领域的容器 容器是一种标准化的软件单元 二、容器和微服务架构 1.容器的作用 快速搭建开发环境 将运行环境和配置放在代码中并部署 使用docker-compose来模拟生产环境 使用docker镜像进…