MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)

目录

概述

概念

MySQL启动与停止

客户端连接

关系型数据库(RDBMS)

SQL

数据类型

DDL

DML 

DQL

DCL 

函数

字符串函数

数值函数

日期函数

流程函数

约束

多表查询

多表关系

笛卡尔积

内连接

外连接

自连接 

联合查询

子查询

事务


概述

概念

  1. 数据库(DB)-数据存储的仓库
  2. 数据库管理系统(DBMS)-操纵和管理数据库的大型软件
  3. 数据库系统(DBS)-是由数据库及其管理软件组成的系统。
  4. SQL-操作关系型数据库的编程语言,是一套标准

MySQL启动与停止

启动

net start mysql80

停止

net stop mysql80

客户端连接

cmd指令

mysql [-h 127.0.0.1] [-P 3306] -u root -p

关系型数据库(RDBMS)

建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

特点:

  1. 使用表存储数据,格式统一,便于维护
  2. 使用SQL语言操作,标准统一,使用方便 

SQL

数据类型

数值类型:主要是不同大小的整型。

字符串类型:主要理清char(定长字符串)和varchar(变长字符串)的区别。

日期类型:常用DATE,注意日期要写在单引号内部:

类型描述大小格式范围
DATE日期值3YYYY-MM-DD1000-01-01至9999-12-31

DDL

Data Definition Language数据定义语言,用来定义数据对象(数据库,表,字段)

数据库操作

1.查询所有数据库:SHOW DATABASES;
2.查询当前数据库:SELECT DATABASE();
3.创建:CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET 字符集 COLLATE 排序规则;

4.删除:DROP DATABASE IF EXISTS 数据库名;

5.使用:USE 数据库名;

表操作

1.查询当前数据库所有表

SHOW TABLES;

2.查询表结构

DESC 表名;

3.查询指定表的建表语句

SHOW CREATE TABLE 表名;

4.创建表

CREATE TABLE 表名(字段1 字段1类型[COMMENT 字段1注释],字段2 字段2类型[COMMENT 字段2注释],字段3 字段3类型[COMMENT 字段3注释],......字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];

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 

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。

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,...),...;

4.修改数据:

UPDATE 表名 SET 字段名1=值1,字段名2=值2,... [WHERE 条件];

5.删除数据:

DELETE FROM 表名 [WHERE 条件];

DQL

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

  • 基本查询
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(GROUP BY)
  • 排序查询(ORDER BY)
  • 分页查询(LIMIT)

简单提一些容易忘记的知识点: 

1.去除重复记录的关键字:distinct

SELECT DISTINCT 字段列表 FROM 表名;

 2.where与having(分组查询关键字)的区别

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

执行顺序:where > 聚合函数 > having

3.排序查询中:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

4.分页查询:

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

起始索引从0开始,起始索引= (查询页码-1)*每页显示记录数
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10

5.查询语句编写顺序和执行顺序:

编写顺序:

SELECT
    字段列表
FROM
    表名列表
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数

--------------------------------------------------------------

执行顺序:

FROM
    表名列表
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后条件列表
SELECT
    字段列表
ORDER BY
    排序字段列表
LIMIT
    分页参数

DCL 

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。

1.查询用户

USE mysql;
SELECT * FROM user;

2.创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

3.修改用户密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

4.删除用户

DROP USER '用户名'@'主机名';

注意:

  • 主机名可以使用通配符‘%’。
  • 这类SQL开发人员操作得比较少,主要是DBA(Database Administrator 数据库管理员)使用。作简单了解

5.查询权限

SHOW GRANTS FOR '用户名'@'主机名';

6.授予权限

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

7.撤销权限

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

注意:

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

函数

字符串函数

函数功能
CONCAT(S1,S2,...Sn)字符串拼接,将S1,S2,...Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度

RPAD(str,n,pad)

右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部尾部的空格
SUBSTRING(str,start,len)返回从字符串str从start位置起的len个长度的字符串

数值函数

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAN()返回0~1内的随机数,小数位数随机、不包含0和1
ROUND(x,y)求参数x的四舍五入的值,保留y位小数

日期函数

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数

流程函数

作用类似于C语言的三目操作符

函数功能
IF(value,t,f)如果value为true,则返回t,否则返回f
IFNULL(value1,value2)如果value不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] ... ELSE [default] END如果val1为true,返回res1,... 否则返回default默认值
CASE [expr] WHEN [val1] THEN [res1] ... ELSE [default] END如果expr的值等于val1,返回res1,...否则返回default默认值

约束

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中数据。
  2. 目的:保证数据库中数据的正确、有效性和完整性。
  3. 分类:
约束描述关键字
非空约束限制该字段的数据不能为NULLNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的为唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本之后)保存字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

一般的约束我们看一下之前的例题就可以明白其用法:

  •  根据需求,完成表格的创建:
字段名字段含义字段类型约束条件约束关键字
idID唯一标识int主键,并且自动增长PRIMARY KEY,AUTO_INCREMENT
name姓名varchar(10)不为空,并且唯一NOT NULL,UNIQUE
age年龄int大于0,并且小于等于120CHECK
status状态char(1)如果没有指定该值,默认为1DEFAULT
gender性别char(1)
create table user(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check(age > 0 and age <= 120) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
) comment '用户表';

重点看一下外键的用法:

添加外键

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

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

外键删除/更新行为

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致)
CASCADE当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许取null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名)ON UPDATE CASCADE ON DELETE CASCADE;

多表查询

多表关系

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

 

笛卡尔积

笛卡尔积是指在数学中,两个集合A和集合B的所有的组合情况。

例如A、B 和1、2、3、4组合,不同的组合情况就有八种:

  • A 1
  • A 2
  • A 3
  • A 4
  • B 1
  • B 2
  • B 3
  • B 4

所以,在多表查询时,需要消除无效的笛卡尔积。

内连接

 隐式内连接

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

显式内连接

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

外连接

左外连接

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

相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据

右外连接

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

相当于查询表2(右表)的所有数据,包含表1和表2交集部分的数据

自连接 

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

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

联合查询

查询语法

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。

子查询

SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

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

 子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT 的任何一个。

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

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

根据子查询位置,分为:WHERE之后、FROM之后、SELECT之后。

事务

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

 1.事务操作 

START TRANSACTION; -- 开启事务
COMMIT / ROLLBACK; -- 提交/回滚事务

2.事务四大特性

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

 

原子性(Atomicity)

  • 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

当一个事务在执行时,它会将一组SQL语句放在同一批次内去执行。如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。

一致性(Consistency)

  • 事务完成时,必须使所有的数据保持一致状态。

例如,银行转账可以分解为两个动作:从A账户中扣除资金额X,然后将资金额X加到B账户中。如果在这个过程中发生了错误,那么整个操作都应该被回滚到初始状态。保证A和B加起来的账户余额要和初始状态一致。

隔离性(Isolation)

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

例如,一个事务正在修改某个数据项,此时另一个事务也想要修改这个数据项,但是由于隔离性的存在,第二个事务会等待第一个事务完成修改后再进行修改 。

持久性(Durability)

  • 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务一旦提交,它对数据库的改变就应该是永久性的(将数据提交保存在了硬盘中),接下来的其他操作或故障不应该对本次事务的修改有任何影响 。

3.并发事务问题

(1)脏读

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

(2)不可重复读

一个事务先后读到同一条记录,但两次读取的数据不同,称之为不可重复读。

(3)幻读

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

 

4.事务隔离级别 

READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE(串行化)

 


END


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

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

相关文章

LeetCode 面试题 03.05. 栈排序

文章目录 一、题目二、C# 题解 一、题目 栈排序。 编写程序&#xff0c;对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据&#xff0c;但不得将元素复制到别的数据结构&#xff08;如数组&#xff09;中。该栈支持如下操作&#xff1a;push、pop、peek 和…

go基础08-map的内部实现

和切片相比&#xff0c;map类型的内部实现要复杂得多。Go运行时使用一张哈希表来实现抽象的map类型。运行时实现了map操作的所有功能&#xff0c;包括查找、插入、删除、遍历等。在编译阶段&#xff0c;Go编译器会将语法层面的map操作重写成运行时对应的函数调用。 下面是大致的…

YOLOV7改进-添加Deformable Conv V2

可变形卷积link class DCNv2(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride1,padding1, groups1, actTrue, dilation1, deformable_groups1):super(DCNv2, self).__init__()self.in_channels in_channelsself.out_channels out_channelsse…

QT for andriod

QT for andriod 开发 apk软件&#xff0c;因为一些特殊的原因&#xff0c;在这里简单的记录一哈自己开发apk的流程和心得。 首先说明我采用的环境有哪些&#xff1f; 1、QT的版本&#xff0c;个人建议5.15.2的版本及以上&#xff0c;我是用的5.15.2。 2、andriod studio 可以…

3D数据导出工具HOOPS Publish:3D数据查看、生成标准PDF或HTML文档!

HOOPS中文网http://techsoft3d.evget.com/ 一、3D导出SDK HOOPS Publish是一款功能强大的SDK&#xff0c;可以创作丰富的工程数据并将模型文件导出为各种行业标准格式&#xff0c;包括PDF、STEP、JT和3MF。HOOPS Publish核心的3D数据模型是经过ISO认证的PRC格式(ISO 14739-1:…

STM32移植FAT文件系统

所谓“移植”&#xff0c;就是打通FAT源码和物理设备之间的软件接口。 FAT源码早就被公益组织给写好了&#xff0c;直接下载源码。但是FAT作为顶层应用程序&#xff0c;它需要面对的底层物理设备是不确定的&#xff0c;那么底层的物理设备驱动程序就需要程序员来自己写。物理设…

Docker的初级使用

Docker的初级使用 Docker的安装1.1 如果之前安装过旧版本的Docker,可以使用下面命令卸载:1.2.安装docker1.3.启动docker1.4.配置镜像加速2.CentOS7安装DockerCompose2.1.下载2.2.修改文件权限2.3.Base自动补全命令:3.Docker镜像仓库3.1.简化版镜像仓库3.2.带有图形化界面版本…

Java中的值传递与引用传递 含面试题

面试题分享 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档…

Android:基于mvvm框架使用viewPage

一、前言&#xff1a; 最近在学习viewpage的使用&#xff0c;加上一直以来用mvvm框架。就想着记录一下。 二、代码展示&#xff1a; 1.引入依赖 //viewPage2引用(微信左右滑动页面)implementation androidx.viewpager2:viewpager2:1.0.0 2.在xml中的使用 3.在代码中找到vie…

脚本:python实现樱花树

文章目录 代码效果 代码 from turtle import * from random import * from math import * def tree(n, l):pd () # 下笔# 阴影效果t cos ( radians ( heading () 45 ) ) / 8 0.25pencolor ( t, t, t )pensize ( n / 3 )forward ( l ) # 画树枝if n > 0:b random () *…

【前沿】数据目录是什么?您为何需要它?

简而言之&#xff0c;数据目录就是关于企业数据资产的一个有序清单。它可以使用元数据来帮助企业管理数据&#xff0c;帮助数据专业人员收集、组织、访问和充实元数据&#xff0c;从而为数据发现和治理提供支持。 01 数据目录的定义和类比 在上文我们简单介绍数据目录的定义&a…

算法通关村第12关【黄金】| 字符串冲刺题

1.最长公共前缀 思路&#xff1a;纵向比较&#xff0c;每个字符串从头挨个比较 class Solution {public String longestCommonPrefix(String[] strs) {StringBuilder sb new StringBuilder();for(int i 0;i<strs[0].length();i){char c strs[0].charAt(i);for(int j 1;j…

Qt实现图书管理系统(C++)

文章目录 数据库表的实现创建表将powerDesigner里面的表导出成xxx.sql脚本将SQL文件导入数据库创建表 图书管理系统思维导图创建工程开发阶段创建Dlg_login登录页面login页面样式主页页面布局主函数测试login设置logo打包程序子页面的样子将子页面放到StackedWidget里面按钮直接…

Linux 查看属于某个组(例如docker组)的所有用户

要查看属于某个组&#xff08;例如docker组&#xff09;的所有用户&#xff0c;可以使用getent命令。getent命令用于从Name Service Switch库中获取条目。 要列出docker组下的所有用户&#xff0c;可以执行&#xff1a; getent group docker这会返回类似下面的输出&#xff1…

Python学习 -- logging模块

logging 模块是 Python 中用于记录日志的标准库&#xff0c;它提供了丰富的功能&#xff0c;可以帮助开发者进行日志记录和管理。以下是关于logging模块的详细使用方式&#xff0c;包括日志级别、处理流程、Logger 类、Handler 类、Filter 类、Formatter 类以及模块中常用函数等…

zookeeper搭建分布式集群启动失败(Error contacting service. It is probably not running.)

文章目录 1.排查2.解决 1.排查 1.启动zookeeper后查看状态/bin/zkServer.sh status发现报错Error contacting service. It is probably not running. [rootzookeeper01 apache-zookeeper-3.8.2-bin]# ./bin/zkServer.sh status /usr/bin/java ZooKeeper JMX enabled by defau…

shell入门运算符操作、条件判断

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

PCIe 5.0验证实战,经常遇到的那些问题?

PCIe 5.0是当前最新的PCI Express规范&#xff0c;提供了更高的数据传输速率和更大的带宽。 PCIe是连接两个芯片的接口&#xff0c;负责两个芯片通信, 连接芯片的通路为高速SerDes, 称之为链路。PCIe确保通路正常-链路训练状态机。PCIe在芯片内部是非常重要的一个大的模块&…

YOLOv5改进算法之添加CA注意力机制模块

目录 1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动 1.CA注意力机制 CA&#xff08;Coordinate Attention&#xff09;注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息&#xff0c;以便模型可以更好地…

大数据课程K20——Spark的SparkSQL概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的SparkSQL由来; ⚪ 了解Spark的SparkSQL特点; ⚪ 了解Spark的SparkSQL优势; ⚪ 掌握Spark的SparkSQL入门; 一、SparkSQL概述 1. 概述 Spark为结构化数据处理引入了一个称…