Mysql基础篇

一、MYSQL概述

1、数据库相关概念

名称全称简称
数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)
数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)
SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Query Language(SQL)

2、mysql数据库

(1)mysql下载和安装

Mysql社区版

(2)mysql启动

net start mysql80
net stop mysql80

(3)mysql客户端连接

  1. mysql自带的客户端
  2. mysql [-h 127.0.0.1] [-p 3306] -u root -p

(4)mysql数据模型

关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:

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

在这里插入图片描述

二、SQL

1、SQL通用语言

  • sql语句可以单行或多行书写,以分号结尾。
  • sql语句可以使用空格、缩进来增强可读性。
  • Mysql的sql语句不区分大小写,关键字建议大写。
  • 注释: 单行注释 - -内容
    多行注释 /* 内容*/

2、SQL分类

分类全称说明
DDLData Definition Language数据定义语言, 用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言, 用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言, 用来查询数据库表中的数据
DCLData Control Language数据控制语言, 用来创建数据库用户、控制数据库的访问权限

3、DDL

(1)数据库

<1> 查询

SHOW DATABASES;
SELECT DATABASE();

<2> 创建

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

<3>删除

DROP DATABASE [IF EXISTS] 数据库名;

<4>使用

USE 数据库名;

(2)表

<1> 查询

查询当前数据库所有表 SHOW TABLES;
查询表结构 DESC 表名;
查询指定表的建表语句 SHOW CREATE TABLE 表名;

<2>创建

在这里插入图片描述

<3>数据类型

mysql中的数据类型主要分为三类:数值类型、字符串类型、日期时间类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

备注:
 - UNSIGNED 无符号,表示数字从0开始   eg: AGE TINYINT UNSIGNED  ---(0,255)
 - CHAR性能较好,varchar性能较差      eg:性别字段长度固定,选用char(1),不用varchar(1)

<4>修改

添加字段: ALTER TABLE 表名 ADD (字段 类型(长度) [COMMENT 注释]) ;
修改字段类型: ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名称和类型: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型(长度) [COMMENT 注释]);
删除字段: ALTER TABLE 表名 DROP 字段名;
修改表名:ALTER TABLE 表名 RENAME TO 新表名;

<5>删除

删除表 DROP TABLE [IF EXISET] 表名;
删除表,并重新创建 TRUNCATE TABLE 表名;

(3)总结

在这里插入图片描述

4、DML

DML全称Data Manipulation Language(数据操作语言),用来对数据库中标的数据进行增删改操作。

  • 添加数据(INSERT)
  • 修改数据(UPDATE)
  • 删除数据(DELETE)

(1)添加数据

给指定字段添加数据

INSERT INTO 表名(字段1,字段2, ...) VALUES(1,值2...);

给全部字段添加数据

INSERT INTO 表名 VALUES(1,值2...);

批量添加数据

INSERT INTO 表名(字段1,字段2, ...) VALUES(1,值2...),(1,值2...);
INSERT INTO 表名 VALUES(1,值2...)(1,值2...),(1,值2...);

在这里插入图片描述

(2)修改数据

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

(3)删除数据

DELETE FROM 表名 [WHERE 条件];

在这里插入图片描述

5、DQL

DQL全称是Data Query Language(数据查询语言),用来查询数据库中表的记录。
查询关键字:SELECT
在这里插入图片描述

(1)基本查询

查询多个字段

SELECT 字段1,字段2,字段3 FROM 表名;
SELECT * FROM 表名;

设置别名

SELECT 字段1 AS 别名1 ,字段2 AS 别名2 FROM 表名;

去重

SELECT DISTINCT 字段 FROM 表名;

(2)条件查询

SELECT 字段 FROM 表名 WHERE 条件列表;

在这里插入图片描述

(3)聚合函数

将一列数据作为一个整体,进行纵向计算。

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

语法如下:

SELECT 聚合函数(字段) FROM 表名;

(4)分组查询

语法:

SELECT *  FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

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

注意:

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

(5)排序查询

语法

SELECT *  FROM 表名 ORDER BY 字段名 DESC/ASC;

注意

  • 如果多字段排序,当第一个字段值相同时,才会根据第二个字段记性排序。
  • 排序方式默认值是ASC

(6)分页查询

语法

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

在这里插入图片描述

(7)执行顺序

在这里插入图片描述

6、DCL

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

(1)管理用户

  • 查询用户
SELECT * FROM USER;
  • 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  • 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
  • 删除用户
DROP USER '用户名'@'主机名';

在这里插入图片描述

(2)权限控制

MYSQL中定义了多种权限,如下表:

权限说明
ALL,ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表

语法:

  • 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
  • 授予权限
GRANT 权限 ON 数据库名.表名 TO '用户名'@'主机名';
  • 撤销权限
REVOKE 权限 ON 数据库名.表名 FROM '用户名'@'主机名';

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

(3)总结

在这里插入图片描述

三、函数

函数是指一段可以直接被另一段程序调用的程序或代码。
包括:

  • 字符串函数
  • 数值函数
  • 日期函数
  • 流程函数

(1)字符串函数

在这里插入图片描述

(2)数值函数

函数功能
CEIL(X)向上取整
FLOOR(X)向下取整
MOD(X,Y)返回X/Y的模
RAND()返回0~1的内的随机数
ROUND(X,Y)参数X的四舍五入,保留Y位小数

(3)日期函数

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

(4)流程函数

在这里插入图片描述

四、约束

(1)概述

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目标:保证数据库中数据的正确、有效性和完整性。
分类:

约束关键字描述
非空约束NOT NULL限制该字段的数据不能为null
唯一约束UNIQUE保证该字段的所有数据都是唯一、不重复的
主键约束PRIMARY KEY主键是一行数据的唯一标识,要求非空且唯一
默认约束DEFAULT采用默认值
检查约束(mysql8.0.16版)CHECK保证字段值满足一个条件
外键约束FOREGIN KEY用来让两张表的数据之间建立连接,保证数据的一致性和完整性

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

(2)约束演示

在这里插入图片描述
在这里插入图片描述

(3)外键约束

概念:外键用来让两张表的数据之间建立连接,从而保证数据可一致性和完整性。
语法:

  • 添加外键
CREATE TABLE 表名(
			字段名   数据类型,
			...
		 [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
  • 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
  • 删除/更新行为
    在这里插入图片描述
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE;

(4)总结:

  • 非空约束:NOT NULL
  • 唯一约束:UNIQUE
  • 主键约束:PRIMARY KEY(自增:AUTO_INCREMENT)
  • 默认约束:DEFAULT
  • 检查约束:CHECK
  • 外键约束:FOREIGN KEY

五、多表查询

1、多表关系

分为三种:

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

(1)一对多(多对一)

案例:部门和员工的关系
关系:一个部门对应多个员工,一个员工对应一个部门
实现:在多的一方监理外键,指向一的一方的主键

(2)多对多

案例:学生和课程的关系
关系:一个学生可以选择多门课程,一个课程也可以供多个学生选择

(3)一对一

案例:用户和用户详情的关系
关系:一对一关系,多用于单表拆分

2、多表查询概述

(1)概述:

指从多张表中查询数据

(2)笛卡尔积

在数学中,两个集合A和B的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)。
在这里插入图片描述

(3)多表查询分类


▷ 连接查询

	→ 内连接: 相当于查询A、B交集部分数据
	→ 外连接:
			左外连接:查询左表所有数据,以及交集部分数据
			右外连接:查询右表所有数据,以及交集部分数据
	→ 自连接: 当前表和自动的连接查询,必须使用表别名

▷ 子查询

3、内连接

查询两张表交集的部分。
在这里插入图片描述

语法:

  • 隐式内连接
SELECT 字段列表 FROM1,2 WHERE 条件;
  • 显示内连接
SELECT 字段列表 FROM1 [inner] join2 on 条件;

4、外连接

  • 左外连接
SELECT 字段列表 FROM1 LEFT JOIN2 ON 条件;
  • 右外连接
SELECT 字段列表 FROM1 RIGHT JOIN2 ON 条件;

5、自连接

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

SELECT 字段列表 FROM1 别名A LEFT JOIN1 别名B ON 条件;

6、联合查询

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

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
union all会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

7、子查询

(1)概念

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

(2)语法:

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

子查询位置可以放在WHERE之后、FROM之后、SELECT之后。

(3)分类:

  • 标量子查询(子查询结果为单个值)
    常用的操作符:= 、<>、 > 、>= 、<、<=
    在这里插入图片描述

  • 列子查询(子查询结果为一列)
    常用的操作符:IN 、NOT IN、ANY 、SOME 、ALL

操作符描述
IN在指定的集合范围内,多选一
NOT IN不在指定的集合范围内
ANY子查询返回列表中,有任意一个满足即可
SOIME与ANY等同,使用SOME的地方都可以使用ANY
ALL子查询返回列表的所有值都必须满足

在这里插入图片描述

  • 行子查询(子查询结果为一行)
    子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
    常用的操作符:= 、<>、IN、NOT IN
    在这里插入图片描述

  • 表子查询(子查询结果为多行多列)
    子查询返回的结果是多行多列,这种子查询成称为表子查询。
    操作符:IN
    在这里插入图片描述

六、事务

1、事务简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认Mysql的事务是自动提交的,也就是说,当执行一条DML语句,Mysql会立即隐式的提交事务。

2、事务操作

(1)设置手动提交

  • 查看、设置事务提交方式
SELECT @@autocommit;
SET @@autocommit=0;//设置手动提交
  • 提交事务
commit;
  • 回滚事务
ROLLBACK;

(2)开启事务

  • 开启事务
START TRANSACTION;
  • 提交事务
commit;
  • 回滚事务
ROLLBACK;

3、事务四大特性

在这里插入图片描述

4、并发事务问题

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5、事务隔离级别

隔离级别脏读不可重复读幻读读
Read uncommitted(读未提交)
Read committed(读已提交)×
Repeatable Read(可重复读)(默认)××
Serializable(串行化)×××

在这里插入图片描述

6 、总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值