MYSQL学习笔记-基础篇

一、SQL

        1、DDL

        2、DML

        3、DQL

        4、DCL

        主要包括用户管理和权限控制

                1)DCL-管理用户

--查询用户
use mysql
select * from user;--新增用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'eg:
create user 'haha'@'localhost' identied by '123';
create user 'hehe'@'%' identified by '123'--修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'eg:
alter user 'haha'@'localhost' identified with masql_native_password by '111';--删除用户
DROP USER '用户名'@'主机名'eg:
drop user 'haha'@'localhost';

                2)DCL-权限控制

mysql中定义了很多种权限,常见的如下:

权限说明
ALL,ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATTE创建数据库/表
--权限查询
SHOW GRANTS FOR '用户名'@'主机名'eg:
show grants for 'haha'@'%';
-- 授权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'eg:
grant all on test.* to 'haha'@'%';--回收权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'revoke all on test.* from 'haha'@'%';

二、函数

1、字符串函数

函数含义
concat(s1,s2 ……sn)字符串拼接,将s1,s2……sn拼接成一个字符串
lower(str)将字符串s全部转为小写
uppper(str)将字符串s全部转为大写
lpad(str,n,pad)左填充,用字符串pad在str左边填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad在str右边填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(str,start,len)返回str字符传中从start位置起的len个长度的字符串

2、数值函数

函数含义举例
ceil(x)向上取整
floor(x)向下取整
mod(x,y)取余
rand()获取一个0-1之间的随机数
round(x,,y)求参数x的四舍五入的值,保留y位小数

3、日期函数

函数含义
curdate()当前日期
curtime()当前时间
now()返回当前日期和时间
year(date)获取指定日期的年份
month(date)获取指定日期的月份
day(date)获取指定日期的日期
DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数,date1-date2

eg:

select date_add(now(),interval 5 year)

select date_add(now(),interval 5 day)

select date_add(now(),interval 5 month)

4、流程函数

函数含义
if(val,t,f)如果val为true,则返回t,否则返回f
ifnull(val1,val2)如果val1不为空,则返回val1,否则返回val2
CASE WHEN val1 THEN res1 …… ELSE default END如果val1 为true,则返回res1,否则,返回默认值default
CASE EXP WHEN val1 THEN res1 ELSE default END如果exp的值等于val1,则返回res1,否则返回default

三、约束

概念:

约束是作用在表中字段上的规则,用于限制存储在表中的数据。

目的:

保证数据库中数据的正确性、有效性和完整性。

分类:

约束描述关键字
非空约束限制该字段上的数据不能为nullNOT NULL
唯一约束保证该字段上的所有数据都是唯一不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则使用默认值DEFAULT
检查约束(自8.0.16之后)保证字段值满足某一条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

外键
1)添加外键

CREATE TABLE 表名(

字段名,字段类型

……

 [CONSTRAINT ] [外键名]  FOREIGN KEY (外键字段名)REFERENCES 主表(主表列名) 

ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段名) REFERENCES 主表名(主表列名)

eg:

ALTER TABLE epm ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id)

2、删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名

eg:

ALTER TABLE EMP DROP FOREIGN KEY fk_emp_dept_id

3、删除/更新行为
行为说明
NO ACTION当在父表中删除/更新记录时,首先检查该记录是否有对应外键,如果有,则不允许删除/更新。(与RESTRICT一致)
RESTRICT当在父表中删除/更新记录时,首先检查该记录是否有对应外键,如果有,则不允许删除/更新。(与NO ACTION 一致)
CASCADE当在父表中删除/更新记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录
SET NULL当在父表中删除记录时,首先检查该记录是否有对应外键,如果有,则设置子表中该外键值为null(需要该字段允许为null)
SET DEFAULT父表有变更时,子表设置成一个默认的值(innodb不支持)
4、语法

ALTER TABLE ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名)ON UPDATE CASCADE ON DELETE  CASCADE

四、多表查询

1、多表关系

一对多:外键

一对一:表结构拆分,其中一表设置外键为另一表主键

多对多:中间表

2、内连接

语法

隐式内连接

SELECT 字段列表 FROM 表1,表2 WHERE 条件

显示内连接

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件

3、外连接

        1)左外连接

SELECT 字段名 FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件

查询左表的所有数据,包含表1和表2 交集部分的数据

        2)右外连接

SELECT 字段名 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 连接条件

4、自连接

SELECT 字段名 FROM 表A 表别名A JOIN 表A 表别名B ON 连接条件

自连接查询可以是内连接查询,也可以是外连接查询

5、联合查询 UNION ,UNION ALL

SELECT 字段列表 FROM 表A WHERE 查询条件 ……

UNION [ALL]

SELECT 字段列表 FROM 表B WHERE 查询条件 ……

UNION查询就是把多次查询的结果合并起来,形成一个新的查询结果集。

6、子查询

概念:SQL语句中嵌套SELECT语句,成为嵌套查询,又称子查询。

SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2)

根据子查询结果不同,分为:

  • 标量子查询(子查询结果为单个值)
  • 列子查询(子查询结果为单个列)
  • 行子查询(子查询结果为单个行)
  • 表子查询(子查询结果为多行多列)

根据子查询位置分为:

WHERE之后、FROM之后、SELECT 之后

1)标量子查询

子查询返回的结果是单个值(数值、字符串、日期),是最简单的子查询,称为标量子查询

常用操作符:= 、>=、>、<、<=

2)列子查询

子查询返回的结果是单个列(可以是多行),这种子查询称为列子查询。

常用操作符:IN、NOT IN、ANY、SOME、ALL

3)行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用操作符:=、<>、IN、NOT IN

4)表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询

常用操作符:IN

五、事务

1、简介

事务是一组操作的组合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体,一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

默认MYSQL的事务是自动提交的,也就是说,当执行一条DML语句的时候,MYSQL会立即隐式的提交事务

2、事务操作

方式一:

        1)查看/设置事务的提交方式:

        select @@autocommit;    --mysql默认是1

        set @@autocommit=0;   --设置自动提交事务参数为0,表示手动提交事务;

        2)提交事务:

        commit;

        3)回滚事务

        rollback;

打开一个连接

select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  2000 |
|  2 | 李四   |  2000 |
+----+--------+-------+
2 rows in set (0.01 sec)--查询事务自动提交设置,默认是自动提交
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)--设置事务自动提交设置为0,此时需要手动提交事务
mysql> set @@autocommit=0;
Query OK, 0 rows affected (0.00 sec)mysql> select @@zutocommit;
ERROR 1193 (HY000): Unknown system variable 'zutocommit'
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            0 |
+--------------+
1 row in set (0.00 sec)--更新数据后,事务没有提交,其他用户不能看到该用户的操作
mysql> update account set money=money+1000 where name='张三';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> update account set money=money-1000 where name='李四';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  3000 |
|  2 | 李四   |  1000 |
+----+--------+-------+
2 rows in set (0.00 sec)--手动提交事务,另外的用户,可以看到该用户对数据的变更
mysql> commit;
Query OK, 0 rows affected (0.01 sec)mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  3000 |
|  2 | 李四   |  1000 |
+----+--------+-------+
2 rows in set (0.00 sec)

打开另外一个连接

mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  2000 |
|  2 | 李四   |  2000 |
+----+--------+-------+
2 rows in set (0.00 sec)mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  2000 |
|  2 | 李四   |  2000 |
+----+--------+-------+
2 rows in set (0.00 sec)mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  2000 |
|  2 | 李四   |  2000 |
+----+--------+-------+
2 rows in set (0.00 sec)mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  3000 |
|  2 | 李四   |  1000 |
+----+--------+-------+
2 rows in set (0.00 sec)

方式二:

        1)开启事务

        start transaction 或 begin  --手动开启事务

        2)提交事务

        commit;

        3)回滚事务

        rollback;

--重新设置自动提交
mysql> set-> @@autocommit =1;
Query OK, 0 rows affected (0.01 sec)mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)--使用begin手动开启事务,开启事务后,需要手动提交mysql> begin-> ;
Query OK, 0 rows affected (0.00 sec)--修改数据后,不执行commit,其它session不能看到该事务对数据的改变
mysql> update set money =2000;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set money =2000' at line 1
mysql> update account set money =2000;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  2000 |
|  2 | 李四   |  2000 |
+----+--------+-------+
2 rows in set (0.00 sec)--执行commit之后,事务提交,其他session可以看到该事务的数据变更
mysql> commit;
Query OK, 0 rows affected (0.01 sec)

另外一个连接

--另外一个事务没有执行commit,该session不能看到其他事务对数据的改变
mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  3000 |
|  2 | 李四   |  1000 |
+----+--------+-------+
2 rows in set (0.00 sec)mysql> 
mysql> 
mysql> 
--其他事务执行了commit操作,该事务可以看到数据变更
mysql> select * from account;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
|  1 | 张三   |  2000 |
|  2 | 李四   |  2000 |
+----+--------+-------+
2 rows in set (0.00 sec)

3、事务的四大特性(ACID)

原子性(Automicity):事务是不可分割的细小单元,要么全部成功,要么全部失败。

一致性(Consistency):事务完成时,必须使所有的数据保持状态一致。

隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

持久性(Duration):事务一旦提交或回滚,它对数据库中数据的改变就是永久的。  

4、并发事务问题:

问题描述
脏读一个事务读取到另一个事务还没有提交的数据
不可重复读一个事务先后读取同一条记录,两次读取的结果不同,称为不可重复读
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影“

5、事务隔离级别

为了解决并发事务问题,引入事务隔离级别

隔离级别脏读不可重复读幻读
read uncommited
read commited
reapeatable read(mysql默认)
serializable
--查看系统的事务隔离级别:select @@transaction_isolation--设置事务隔离级别SET [SESSION|GLOBAL] TRANSATION ISOLATION LEVEL [READ UNCOMMITED|READ COMMITED|REPEATABLE READ|SERIALIZABLE]

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

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

相关文章

ppo-clip的本质以及它为什么是另一种ppo-KL-penalty

显然&#xff0c;clip在优势函数A>0且重采样比例过大时截断了上限&#xff0c;在优势函数A<0且重采样比例过小时也截断了负值的上限。 我以第一种情况解释clip的作用。 首先&#xff0c;所有选择的action都是RL中你希望增大概率的action。 当A>0时&#xff0c;说明这…

WordPress中借助Table of Contents Plus+Widget Options插件,实现仅在文章侧边栏显示文章目录的功能

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 序言&#xff1a;今天心血来潮&#xff0c;写了一篇文章&#xff0c;忽然发现自己的文章极少有目录&#xff0c;这对于长文章的阅读来说是十分不利的&#…

【自动驾驶】针对低速无人车的线控底盘技术

目录 术语定义 一般要求 操纵装置 防护等级 识别代号 技术要求 通过性要求 直线行驶稳定性 环境适应性要求 功能安全要求 信息安全要求 故障处理要求 通信接口 在线升级(OTA) 线控驱动 动力性能 驱动控制响应能力 线控制动 行车制动 制动响应能力 线控转向 总体要求 线控…

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点&#xff1a;使用场景&#xff1a; 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点&#xff1a;使用场景&#xff1a; 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…

SQL刷题笔记day8——SQL进阶——表与索引操作

目录 1 创建一张新表 2 修改表 3 删除表 4 创建索引 5 删除索引 1 创建一张新表 我的答案 create table if not exists user_info_vip (id int(11) primary key auto_increment Comment自增ID, # 有了主键就不用写not nul了 uid int(11) unique not null Comment用户ID, …

发现真正的诉求

在不久前&#xff0c;我在负责一个项目&#xff0c;设计了一个方案。但是&#xff0c;与我一同合作的同事对其中的一个设计点持有异议。我们尝试讨论解决&#xff0c;但似乎没有找到共识。然而&#xff0c;尽管双方的观点没有达成一致&#xff0c;我们都清楚地表达了自己的想法…

272 基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断

基于matlab的形态滤波和局域值分解&#xff08;LMD&#xff09;的齿轮故障诊断&#xff0c;GUI交互界面。通过形态滤波对一维信号进行降噪处理&#xff0c;并通过LMD局部均值分解提取故障信号&#xff0c;最后提取处故障频率。程序已调通&#xff0c;可直接运行。 272 形态滤波…

[AIGC] DAG模型在任务调度中有什么优势?

DAG(Directed Acyclic Graph&#xff0c;有向无环图)在任务调度中的应用带来了以下优势&#xff1a; 清晰的任务依赖关系&#xff1a;在DAG模型中&#xff0c;任务以节点的形式存在&#xff0c;任务间的依赖关系通过有向边来表示。这使得任务关系清晰明了&#xff0c;易于理解和…

Mysql学习经验总结(一)

Mysql的简介&#xff1a; MySql是一个开源的关系型数据库管理系统&#xff0c;广泛应用于Web应用程序的数据存储和管理。它支持多用户并发访问&#xff0c;具有高性能、稳定可靠、易于使用和管理的特点。 MySql官网提供了详细的文档、下载、社区等资源&#xff0c;官网的地址…

微信小程序的服务调取

微信小程序的服务调取概述 微信小程序允许开发者通过网络请求与服务器进行交互&#xff0c;从而实现数据的上传和下载。这是通过小程序提供的API&#xff0c;如wx.request、wx.downloadFile、wx.uploadFile等来完成的。这些API使得小程序可以从远程服务器获取数据&#xff0c;…

文档智能开源软件

文档智能介绍&#xff1a; 文档智能通常指的是利用人工智能技术来处理和分析文档内容&#xff0c;以实现自动化、智能化的文档管理。文档智能的应用领域非常广泛&#xff0c;包括但不限于&#xff1a; 1. **文档识别**&#xff1a;使用OCR&#xff08;光学字符识别&#xff0…

Java+SVNCloud+Mysql课程设计

文章目录 1、主要内容2、所需准备3、与sql访问的中间类&#xff1a;SqlMessage4、窗口界面5、main方法 1、主要内容 课程设计&#xff0c;主要通过Javas wing创建窗口&#xff0c;jdbc连接云端mysql数据库进行基本操作&#xff0c;支持随机生成数据并用动态展示数据结果。 先…

一种最大重叠离散小波包特征提取和支持向量机的ECG心电信号分类方法(MATLAB 2018)

目前小波分析算法常采用Mallat快速算法。该算法由与滤波器卷积、隔点采样和隔点插零等三个环节组成。由于实际使用的滤波器并不具有理想频域特性&#xff0c;使得在标准二进小波算法中存在着频率混叠和小波系数失真等缺点&#xff0c;在标准二进小波包算法中还存在频带错乱现象…

matlab误差估计扩展卡尔

在MATLAB中实现扩展卡尔曼滤波&#xff08;Extended Kalman Filter, EKF&#xff09;时&#xff0c;误差估计是一个关键步骤。EKF是一种用于非线性系统状态估计的算法&#xff0c;它通过线性化非线性系统模型&#xff0c;并利用卡尔曼滤波的框架进行状态估计和误差估计。以下是…

展现市场布局雄心,ATFX再度亮相非洲峰会,开启区域市场新篇章

自2023年全球市场营销战略部署实施以来&#xff0c;ATFX在全球各区域市场取得了丰硕成果&#xff0c;其品牌实力、知名度、影响力均有大幅提升。在这场全球扩张的征程中&#xff0c;非洲市场日益成为集团关注的焦点。自2023年首次踏上这片充满潜力的市场以来&#xff0c;ATFX持…

【TB作品】MSP430 G2553 单片机口袋板,读取单片机P1.4电压显示,ADC

功能 读取P1.4电压&#xff0c;显示到口袋板显示屏&#xff0c;电压越高亮灯越多。 部分程序 while (1){ADC10CTL0 | ENC ADC10SC; // Sampling and conversion startLPM0;adcvalue ADC10MEM; //原始数据 0到1023adtest (float) adcvalue / 1024.…

PKCS #8的原理及作用

标签: PKCS #8的原理及作用; PKCS #8;PKCS8 PKCS #8的原理及作用 概述 PKCS #8(Public-Key Cryptography Standards #8)是由RSA实验室发布的一种标准,用于存储私钥信息。它定义了私钥的语法,包括如何对私钥进行编码和加密,以确保其安全性和可移植性。 英文原文: I…

【大模型应用开发极简入门】构建新闻稿生成器:提示词的使用与基于事实的提示词

文章目录 一. 提示词怎么写二. 完整代码三. 基于事实的prompt GPT-4和ChatGPT等LLM专用于生成文本。我们可以使用GPT-4和ChatGPT在各种场景中生成文本&#xff0c;举例如下。 电子邮件合同或正式文档创意写作逐步行动计划头脑风暴广告职位描述 对于本项目&#xff0c;我们将创建…

列表标签 ul+ol/li

04-07、列表标签 ulol/li 概述 列表标签&#xff1a;无序列表ulli、有序列表olli和定义列表 dl dt dd 三种&#xff0c;在网页制作中应用非常广泛&#xff0c;列表就是信息资源的一种展示形式。 特点&#xff1a; 它们都是块元素&#xff0c;可以受到宽度&#xff0c;高度&…

springboot 实现kafka多源配置

文章目录 背景核心配置自动化配置类注册生产者、消费者核心bean到spring配置spring.factoriesyml配置使用 源码仓库 背景 实际开发中&#xff0c;不同的topic可能来自不同的集群&#xff0c;所以就需要配置不同的kafka数据源&#xff0c;基于springboot自动配置的思想&#xf…