MYSQL基础(一) --- 学习笔记

news2024/11/27 2:34:51

一.基础操作

启动与关闭:net start mysql80,net stop mysql80

客户端连接:mysql -u root -p

关系型数据库:建立在关系模型基础上,由多张相互连接的二维表(由行和列组成的表)组成的数据库

二.SQL

通用语法:

分类:DDL,DML,DQL,DCL

DDL语句:定义数据库对象(数据库,表, 字段)

数据库操作:

1.查询所有数据库:show databases ;

2.查询当前数据库:select database() ;

3.创建一个xxx数据库:create database [if not exists] xxx [default charset utf8mb4] [collate 排序规则];

4.删除一个xxx数据库:drop database [if exists] xxx;

5.切换数据库:use xxx;

表操作:

1.查询当前数据库所有表:show tables;

2.查看指定表结构:desc 表名 ;

3.查询指定表建表语句:show create table 表名;

4.创建表:

表数据类型:

1.数值类型:

tinyint1B
smallint2B
mediumint3B
int、integer4B
bigint8B
float4B--指明精度(总位数)与标度(小数点后位数)
double8B-指明精度(总位数)与标度(小数点后位数)
decimal依据精度(总位数)与标度(小数点后位数)

2.字符串类型:

3. 日期时间类型:

5.添加字段: ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

6.修改数据类型:ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);

7,修改字段名和字段类型:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

8.删除字段:ALTER TABLE 表名 DROP 字段名;

9.修改表名:ALTER TABLE 表名 RENAME TO 新表名;

10.删除表:DROP TABLE [ IF EXISTS ] 表名;

11.删除指定表, 并重新创建表:TRUNCATE TABLE 表名;(在删除表的时候,表中的全部数据也都会被删除)

DML:对数据库中表的数据记录进 行增、删、改操作

1.给指定字段添加数据:INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

2.给全部字段添加数据::INSERT INTO 表名 VALUES (值1, 值2, ...);

3.批量添加数据:INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值 1, 值2, ...) ;        INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;

4. 修改数据:UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;(修改语句如果没有条件,则会修改整张表的所有数据。)

5. 删除数据:DELETE FROM 表名 [ WHERE 条件 ] ;(DELETE 语句如果没有条件,则会删除整张表的所有数据。 DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即 可)。)

DQL:用来查询数据库中表的记录

语句编写顺序:

1.基本查询(select from):

查询多个字段:SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;(* 查询所有字段)

字段设置别名:SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;

去除重复记录:SELECT DISTINCT 字段列表 FROM 表名;

2.条件查询(where):

 

select * from emp where idcard is not null;

select * from emp where age in(18,20,40);

#查询姓名为两个字的
select * from emp where name like '__';

#查询身份证号最后一位是X的
select * from emp where idcard like '%X';

3.分组查询(group by):

聚合函数(作用于某字段):SELECT 聚合函数(字段列表) FROM 表名 [where 条件];(NULL值是不参与所有聚合函数运算的)

 分组查询语法:SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];

#:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。where不能对聚合函数进行判断,而having可以。

#:分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。执行顺序: where > 聚合函数 > having 。支持多字段分组。

*可以理解为将整张表依据分组条件划分为多个子表(记录),分别对每个子表整体作查询操作

select workaddress, gender, count(*) '数量' from emp group by gender , workaddress 
;

4.排序查询(order by):

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

#ASC : 升序(默认值,可省略); DESC: 降序;如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;

5.分页查询 ( limit ) :

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

#:起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。如果查询的是第一页数据,起始索引可以省略。limit作用在查询语句最后部分。

DQL语句执行顺序:

DCL语句:管理数据库用户、控制数据库的访问权限

1.查询用户:select * from mysql.user;

2.创建用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';(主机名可使用 % 通配)

3.更改密码:ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;

4.删除用户:DROP USER '用户名'@'主机名' ;

5.权限控制:

查询权限: SHOW GRANTS FOR '用户名'@'主机名' ;

授予权限:GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

撤销权限:REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

#:多个权限之间,使用逗号分隔;授权时, 数据库名和表名可以使用 * 进行通配,代表所有。

三.函数: 

MySQL中函数:字符串函数、数值函数、日期函数、流程函数

1.字符串函数:

#start位置从下标1开始

2.数值函数:

#生成一个六位数的随机验证码。
select lpad(round(rand()*1000000 , 0), 6, '0');

 3.日期函数:

 

#入职天数倒序排序
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by 
entrydays desc;

4.流程函数:条件筛选

#when可以多次出现,从前往后依次匹配即可(类似if-else)

#成绩评级
select
 id,
 name,
 (case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end ) 
'数学',
 end ) '英语',
 end ) '语文'
 (case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格' 
(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格' 
from score;

四.约束:

作用于表中字段上的规则,用于限制存储在表中的数据(创建表/修改表的时候添加约束)

自增约束:AUTO_INCREMENT(插入时该字段可以省略)

外键约束:含有外键的表是子表,外键关联的表为父表

添加外键:

 CREATE TABLE 表名(
字段名    数据类型,
 ...
 [CONSTRAINT]  [外键名称]  FOREIGN  KEY (外键字段名)   REFERENCES   主表 (主表列名)
);

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

删除外键:ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

五.多表查询:

1:n(在多的一方建立外键,指向一的一方的主键)

n:n(建立第三张中间表,中间表至少包含两个外键,分别关联两方主键)

1:1(多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另 一张表中,在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE))

笛卡尔积:两个集合A集合 和 B集合的所有组合情况;去除无效的笛卡尔积, 可以给多表查询加上连接查询的条件

1.内连接:查询A、B交集部分数据(即满足连接条件)

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

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

2.外连接: 

左外连接:查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;

右外连接:查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;

3.自连接:是把一张表连接查询多次,可以是内连接查询,也可以是外连接查询

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

4.联合查询:多次查询的结果合并起来,形成一个新的查询结果集

 SELECT  字段列表   FROM   表A  ...  
UNION [ ALL ]
 SELECT  字段列表  FROM   表B  ....;
#对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
#union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

5.子查询:

SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询;子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个(子查询位置-where,from,select之后)

根据子查询结果分类:

1. 标量子查询(子查询结果为单个值-一行一列):常用的操作符:= <> > >= < <=

2. 列子查询(子查询结果为一列):IN 、NOT IN 、( ANY 、SOME 、 ALL-可结合上述操作符运用)

3. 行子查询(子查询结果为一行):= 、<> 、IN 、NOT IN

select * from emp where (salary,managerid) = (select salary, managerid from emp 
where name = 'xxx');

4. 表子查询(子查询结果为多行多列,类似行子查询的延伸):in

select * from emp where (job,salary) in ( select job, salary from emp where name = 
'aaa' or name = 'bbb' );

#from之后的例子-即将其作为表进行连接查询
 select e.*, d.* from (select * from emp where entrydate > '2024-01-01') e left 
join dept d on e.dept_id = d.id ;
#补充select之后的子查询例子
#查询所有的部门信息, 并统计部门的员工人数
select d.id, d.name , ( select count(*) from emp e where e.dept_id = d.id ) '人数' 
from dept d;

六.事务:

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

事务操作:

1.设置为事务手动提交:

SELECT  @@autocommit ;

SET   @@autocommit = 0 ;

COMMIT;

ROLLBACK;

1.明确开启事务:

START  TRANSACTION   或  BEGIN ;

COMMIT;

ROLLBACK;

事务四大特性(ACID):

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

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

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

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

并发事务问题:

赃读:一个事务读到另外一个事务还没有提交的数据

不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同

幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据 已经存在

事务隔离级别:

#查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

#设置事务隔离级别
SET  [ SESSION | GLOBAL ]  TRANSACTION  ISOLATION  LEVEL  { READ UNCOMMITTED | 
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

#事务隔离级别越高,数据越安全,但是性能越低

 

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

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

相关文章

《Pandas 简易速速上手小册》第6章:Pandas 时间序列分析(2024 最新版)

文章目录 6.1 时间序列数据基础6.1.1 基础知识6.1.2 重点案例&#xff1a;股票市场分析6.1.3 拓展案例一&#xff1a;温度变化分析6.1.4 拓展案例二&#xff1a;电商平台日销售额分析 6.2 日期与时间功能6.2.1 基础知识6.2.2 重点案例&#xff1a;活动日志分析6.2.3 拓展案例一…

最全整理!37 个 Python Web 开发框架总结!

大家好&#xff0c;用了 2 周的时间整理了 Python 中所有的网站开发库&#xff08;下文简称&#xff1a;Web 框架&#xff09;&#xff0c;供大家学习参考。 Q&#xff1a;Web 框架到底是什么&#xff1f; A&#xff1a;Web 框架主要用于网站开发。开发者在基于 Web 框架实现…

【数据结构(C语言)】树、二叉树详解

目录 文章目录 前言 一、树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念及结构 2.1 二叉树的概念 2.2 二叉树的基本形态 ​编辑2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 三、二叉树的顺序结…

Java编程练习之类的封装2

1.封装一个股票&#xff08;Stock&#xff09;类&#xff0c;大盘名称为上证A股&#xff0c;前一日的收盘点是2844.70点&#xff0c;设置新的当前值如2910.02点&#xff0c;控制台既要显示以上信息&#xff0c;又要显示涨跌幅度以及点数变化的百分比。运行效果如下&#xff1a;…

SketchBook 2022下载安装教程,保姆级教程,操作简单,小白也能轻松搞定,附安装包和工具

前言 Autodesk SketchBook是一款新一代的自然画图软件&#xff0c;软件界面新颖动人&#xff0c;功能强大&#xff0c;仿手绘效果逼真&#xff0c;笔刷工具分为铅笔&#xff0c;毛笔&#xff0c;马克笔&#xff0c;制图笔&#xff0c;水彩笔&#xff0c;油画笔&#xff0c;喷枪…

Offer必备算法_前缀和_牛客+力扣OJ题详解(由易到难)

目录 前缀和算法介绍 一维前缀和 二维前缀和 ①牛客DP34 【模板】前缀和 解析代码 ②牛客DP35 【模板】二维前缀和 解析代码 ③力扣724. 寻找数组的中心下标 解析代码 ④力扣238. 除自身以外数组的乘积 解析代码 ⑤力扣560. 和为 K 的子数组 解析代码 ⑥力扣974. …

2024美国大学生数学建模竞赛A-F题完整思路+配套代码数据+后续高质量参考论文更新

The Mathematical Contest in Modeling (MCM) The Interdisciplinary Contest in Modeling (ICM) 24美赛【完整每问手把手详细思路可修改50页多种思路版本word版保奖论文】配套升级求解代码可视化图表 美赛A-F题完整版获取见文末 下文包含&#xff1a;2024美国大学生数学建模…

代码随想录 Leetcode110.平衡二叉树

题目&#xff1a; 代码(首刷看解析 2024年1月30日&#xff09;&#xff1a; class Solution { public:int depth(TreeNode* root) {if (root nullptr) return 0;int leftHeight depth(root->left);if (leftHeight -1) return -1;int rightHeight depth(root->right)…

Java List的合并与切分

在Java开发中经常遇到list结构数据的处理&#xff0c;如List的合并或拆分&#xff0c;记录下来&#xff0c;方便备查。 一、List 合并 两个list数据的合并处理&#xff0c;可使用Java8 新特性的stream流&#xff0c;根据实际需要遍历取值。 1、定义 UserInfo 对象 订单的相…

LeetCode: 189.轮转数组

本篇目标了解&#xff0c;翻转数组的经典解法&#xff0c; 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 目录 基本方法概述&#xff1a; 1&#xff0c;翻转做法&#xff0c;推荐时O&#xff08;n&#xff09;&#xff0c;空&#xff08;1&#xff09; 2&#x…

Windows IIS服务如何配置并制作web站点结合内网穿透实现公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

【Linux C | I/O模型】IO复用 | select、pselect函数详解(看完就会用了)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Unity 模板方法模式(实例详解)

文章目录 简介示例1&#xff1a;游戏关卡流程示例2&#xff1a;测试试卷类示例3&#xff1a;游戏场景构建流程示例4&#xff1a;游戏动画序列示例5&#xff1a;游戏对象初始化过程 简介 Unity中的模板方法模式是一种行为设计模式&#xff0c;它在父类中定义了一个算法的框架&a…

关键字const

1.定义常量 const int a; 2.定义常量指针 1.不可以通过常量指针来修改其指向的内容。 2.不能把常量指针赋值给非常量指针&#xff0c;反过来可以。 3.函数参量为常函数指针时&#xff0c;可以避免函数内部不小心改变指针所指地方的内容。

【2024美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文

【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 题目将于2024年2月2日6:00发布。我们团队将会在8点前准时更新问题分析&#xff0c;逐步更新数学模型和实现代码&#xff0c;最后发布完整的论文。 更新进展&#xff1a; &#xff08;…

elementui 开始结束时间可以选择同一天不同时间段

先在main.js中导入 import moment from moment <el-row><el-col :span"12"><el-form-item label"考试开始时间" prop"startTime"><el-date-picker v-model"shiJuanXinXiForm.startTime" style"width: 100…

7款免费的Midjourney平替平台

AI艺术生成器正在改变设计和内容的制作方式。像Midjourney这样的工具已经将困难的想法转化为令人惊叹的视觉效果&#xff0c;改变了创造力的运作方式。但是&#xff0c;AI艺术涵盖了许多风格和需求。这就是Midjourney替代方案变得重要的原因&#xff08;特别是免费的替代方案&a…

基于springboot+vue的阿博图书馆管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

神经网络回归案例(python

目录 1.代码&#xff1a;2.效果&#xff1a;小结&#xff1a; 1.代码&#xff1a; import numpy as np import tensorflow as tf# 自变量和目标值 X np.array([[1, 2, 3, 4, 5, 6]]) # 自变量需要是二维数组形式 Y np.array([4531.575371])# 转换为TensorFlow张量 X tf.co…

python遍历目录的两种方法

我们有时想直接查看文件夹里的所有文件&#xff0c;但使用正常的方法太麻烦了&#xff0c;于是我开发出了两个python程序&#xff0c;可以遍历目录 第一种 不知大家还是否记得&#xff0c;我之前在我的处理文件程序里写过这个功能 python处理文件程序 这个程序只需要os、time…