MySQL数据库——[08]

一 数据库分类

1、关系型数据库 SQL

mysql数据库,适用与互联网项目,微服务应用非常广泛。免费

Oracle 数据库,大型的,重量级的数据库。政府部分,政务系统。收费的

DB2 大型关系型数据库 ,一般商业,应用与ERP系统。

Sqlserver数据库,微软公司开发的数据库。T-Sql,使用C#语言

2、非关系型数据库,Nosql数据库

Redis,MongoDB

DB 数据库

DBMS 数据库管理软件 -MySQL

RDBMS 关系型数据库管理软件

二 卸载Mysql

如果曾经安装过Mysql

1、停止服务

此电脑-右键-管理-服务和应用程序-服务-MySql-停止此服务

2、应用程序中进行卸载

此电脑-双击打开-窗口上点击计算机-卸载或更改程序-Mysql卸载

3、删除安装盘符的mysql包

打开C盘,C:\Program Files下面的Mysql,点击删除

打开C盘,C:\ProgramData下面的Mysql,点击删除

4、删除环境变量配置

此电脑-右键属性-高级系统设置-环境变量-Path-删除Mysql配置项

C:\Program Files\MySQL\MySQL Server 5.5\bin
5、在注册表中删除

win+r 输入regedit打开注册表

第一步:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\EventLog\Application\MySQL 删除

第二步:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\MySQL 删除

删除mysql即可

6、重启计算机

三 windows系统上安装并操作mysql

3.1 安装Mysql

双击安装包,安装即可。

3.2 操作命令
1、win+r 输入cmd
2、mysql -uroot -p,回车输入密码
3、show databases;  --显示所有数据库
4、use mysql;   --使用test数据库
5、show tables; --显示test数据库下的所有数据表
6、select * from user; --查询数据表的数据记录
7、create database my_db; 创建数据库
8、use my_db;  --使用自己创建好的数据库my_db
9、create table user(
           userId int primary key,
           userName varchar(20) null
   );  --创建了一个user数据表
10、exit; 退出

安装sqlyog可视化工具。

四 结构化查询语句SQL

4.1 SQL分类

DDL:数据定义语言,包括 create ,drop alter

DML:数据操作语言,包括,insert update ,delete

DQL:数据查询语言 包括select,分支很多

DCL:数据控制语言,commit,rallback,grant


4.2 DDL
1. 操作数据库
CREATE DATABASE IF NOT EXISTS news_db; -- 创建数据库
USE news_db;  -- 使用数据库
DROP DATABASE IF EXISTS news_db; -- 删除数据库
SHOW DATABASES; -- 查询
2. 操作数据表
  • 创建表
--设置当前数据表自动增长的增量、步长
SET @@auto_increment_increment=3
CREATE TABLE IF NOT EXISTS news(
   newsId INT PRIMARY KEY AUTO_INCREMENT COMMENT '资讯ID',
   newsTitle VARCHAR(100) NOT NULL COMMENT '资讯标题',
   createTime DATETIME NULL COMMENT '创建时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- AUTO_INCREMENT --自动增长
-- ENGINE=INNODB 存储引擎为INNODB 
-- AUTO_INCREMENT=1 设定表自增的步长为1
-- DEFAULT CHARSET=utf8; 默认的编码格式
  • 删除表
DROP TABLE IF EXISTS news;
  • 修改列
-- 修改列
ALTER TABLE news ADD author VARCHAR(10) COMMENT '作者'
  • 查看数据表的基本信息
DESC news
4.3 DML
  • 删除数据表记录
DELETE FROM news
TRUNCATE TABLE news
--区别
--相同点:都可以删除数据表记录
--不同点:delete只能删除数据表记录,不会初始化数据表结构,TRUNCATE不能作用在有外键关联的表上。
  • 新增语句
INSERT INTO student(studentName,age,gradeId,birthday)
   VALUE('李四',22,4,'2000-01-03')
--字段名与给定的值的位置个数,类型要保持一致
-- 主键如果是自增的情况就不需要给他指定值
  • 修改语句
UPDATE student SET studentName='李四四',age=32
   WHERE studentId=14
 -- 需要特别指定条件
 
 
  • where 条件
UPDATE student SET studentName='李思3',age=32
-- where studentId between 13 and 15 
WHERE studentId>=13 AND studentId<=15
数据库引擎:
MyISAM:适用于这张表,有大量的查询操作。
InnoDB:增删改业务居多

主键:
对数据记录的唯一标识,不能重复。PRIMARY KEY

列数据
char 固定长度的字符串
varchar 可变长度的字符串

主键,外键
主从关系
当一个表引用了其他表的主键,那么在主从关系中,这个表就是引用了的表的从表。
在从表上添加外键索引,主从关系中,在执行插入语句的时候,应该先插入主表,再插入从表。在执行删除操作的时候,先删除从表,再删除主表。
4.4 DQL语句
4.1 Distinct去重

去除重复的行数据,一般用于统计运算中

-- 成绩表中记录的参加了考试的课程有哪些
SELECT DISTINCT subjectNo FROM result; 
4.2 as子句

数据库字段与表上都可以添加别名,在表连接查询的时候,方便使用别名.字段名来区分某个字段来源与哪张表。如果在定义的字段名与类的属性名不一致的时候,也可以使用别名来重新命名。

SELECT 
	subjectName AS 课程名,
	classHour AS 总课时 ,
	ClassHour/10 AS '均课时/天'
FROM SUBJECT;

4.3 like

用与模糊查询,与通配符一起配合使用。

通配符:%代表可以匹配任意多个字符 ,_代表匹配一个字符。

语法

...  where  userName like '李%'
4.4 in

用于子查询语句,用来在指定的范围内进行查询,区别于等值的查询。

子查询的概念:在一个完整的查询语句中,又嵌套另外一个查询语句,这样的结构就叫做子查询。

例:批量删除

delete from student where studentId in (1,5,7,13)
4.5 连接查询
1 内连接

inner join

匹配连接的表中全部都拥有的数据

-- 表连接查询,共分为 内连接-外连接

-- 笛卡尔积
-- 内连接1
SELECT * FROM student t1
   INNER JOIN grade t2
      ON t1.gradeId=t2.gradeId;
      
-- 内连接2
 SELECT * FROM student t1,grade t2
      WHERE  t1.gradeId=t2.gradeId
      
 -- 子查询3    
 SELECT * FROM student t1
    WHERE t1.gradeId IN (
        SELECT gradeId FROM grade
 )
2 外连接

左外连接

left join

从表作为左表,则与内连接的结果一致

匹配左表所有的数据

-- 外连接
-- 左外连接 :查询的是从表,连接的是主表,则结果与内连接相同。
SELECT * FROM student t1 RIGHT 
    JOIN grade t2
      ON t1.gradeId=t2.gradeId
    
-- 
SELECT * FROM grade t1 
LEFT JOIN student t2
      ON t1.gradeId=t2.gradeId

右外连接

right join

匹配右表所有的数据

主表作为右表,则与内连接的结果一致

3 自连接

典型应用就是定义字母表,来进行自身连接查询。

CREATE TABLE IF NOT EXISTS category(
     categoryId INT(10)  AUTO_INCREMENT  PRIMARY KEY,
     categoryName   VARCHAR(32) NOT NULL ,
     pid  INT(10)
);
-- 子母表 可以存储无限层级关系的数据
-- 自连接
SELECT 
	t2.`categoryId`,t2.`categoryName`,
	t1.`categoryName`
FROM category t1
   INNER JOIN category t2
      ON t1.`categoryId`=t2.`pid`
4.6 order by 排序

DESC :倒序排列,(降序),由高到低

ASC :正序排列,(升序,由低到高,可以省略不写。

SELECT * FROM result ORDER BY studentResult DESC

SELECT * FROM student ORDER BY BornDate DESC,sex ASC

如果按照日期进行倒序排列,则离现在日期最近的时间会排在首行。要使用有意义的列进行排序

4.7 Limit分页

Mysql数据库所特有的关键字,使用它来进行分页查询

-- 分页的几个核心指标
-- 共多少条记录数      19
-- 每页要显示多少条    5
-- 可以分为几页?      19%5!=0  (19/5)+1
-- 要查询哪页的数据(当前的页码)

SELECT * FROM student ORDER BY BornDate DESC 
LIMIT 0,5;

SELECT * FROM student ORDER BY BornDate DESC 
LIMIT 5,5;

SELECT * FROM student ORDER BY BornDate DESC 
LIMIT 10,5;

SELECT * FROM student ORDER BY BornDate DESC 
LIMIT 15,5;

-- limit 后面的两个参数的意义
-- 第一个参数代表 从第几行的索引值开始查询 【偏移量】
-- 第二个参数代表 每页显示多少条记录
4.8 子查询案例
-- 查询课程为《高等数学-2》且分数不小于80分的学生的学号和姓名
-- 3个连接

-- 表连接
SELECT t1.studentNo,t1.StudentName FROM student t1
   INNER JOIN result  t2
       ON t1.`StudentNo`=t2.StudentNo
   INNER JOIN SUBJECT t3
       ON t2.subjectNo=t3.subjectNo
   WHERE t3.subjectName='高等数学-2' AND t2.StudentResult>=80;  
   
-- 子查询   
-- 由里到外
SELECT t3.`StudentNo`,t3.`StudentName` FROM student t3 
  WHERE t3.`StudentNo` IN(
	  SELECT t2.StudentNo FROM result t2   
	      WHERE t2.StudentResult>=80   
	      AND t2.subjectNo IN (
		   SELECT t1.subjectNo FROM SUBJECT t1 
		      WHERE t1.subjectName='高等数学-2'
	      )
  )      
4.9、统计函数

统计函数也叫聚合函数。共有五个,操作的是行的数据。

count() 统计行数、SUM()求所有行上的数据的总和,AVG()平均值, MAX()最大值,MIN()最小值

SELECT COUNT(1) FROM student;

SELECT SUM(studentResult)/COUNT(1) FROM result;

SELECT AVG(studentResult) FROM result;

SELECT MAX(studentResult) FROM result;

SELECT MIN(studentResult) FROM result;
4.10 分组查询

group by 进行分组

HAVING 分组后的筛选条件,注意此处不能使用where

SELECT 
  t2.subjectName '课程名称',
  MAX(t1.studentResult) '最高分',
  MIN(t1.studentResult) '最低分',
  AVG(t1.studentResult) '平均分'
FROM result t1
   INNER JOIN SUBJECT t2
      ON t1.subjectNo=t2.subjectNo
   GROUP BY t1.subjectNo HAVING AVG(t1.studentResult)>=80
 

五、 事务

5.1 事务的概念

事务就是将一组SQL语句放在同一批次内去执行,

一条SQL,同一个处理批次,当里面有任意一条SQL语句执行失败,则整个操作将会回滚,反之,则会进行提交。

事务的执行基本原理:

关联执行,只要其中一条SQL执行失败,则会回滚,反之,就会提交。在执行事务的时候,首页先关闭mysql的自动提交。

注意:Mysql只支持InnoDB类型的数据库引擎。

没有加入事务的SQL语句

-- 转账操作,核心业务流程

-- 1、先查询张三的余额,判断余额是否满足转账金额

SELECT money FROM USER WHERE userId=1;

-- 2、如果张三余额够,则进行转账操作。反之,业务就中断
-- 2.1 转账,进行账号扣款
UPDATE USER SET money=money-1000 WHERE userId=1;

程序执行异常....

-- 3、给李四账号增加转账的金额
UPDATE USER SET money=money+1000 WHERE userId=2;

5.2 事务的四大特性

事务的ACID原则

1. 原子性

放在事务之中的SQL语句,无论是一条还是多条,它都将被视作一个不可分割的整体。如果执行成功,则会提交,如果但凡有一条SQL执行失败,则会把之前执行成功的操作进行撤销。要么保证全部执行成功,要么就全部回滚。

2.一致性

指的是事务在执行前,与执行后,数据的一致性不会改变。

3. 隔离性

指的的多个事务之间操作同一数据的时候,彼此是一个隔离状态,它们拥有独立的运行环境。彼此互不影响。

(事务的传播机制,与事务的隔离级别。(Spring的声明式事务,数据的脏读,幻读,不可重复读)

4. 持久性

在数据库操作中,事务执行之后,给数据库带来的影响是永久性的。

(IO操作,数据的持久化技术。)

5.3 事务执行的语法

使用事务的时候首先应该关闭自动提交

SELECT @@autocommit;  -- 查看自动提交是否开启,如果为1,则说明是开启状态
SET @@autocommit=0; -- 关闭自动提交
START TRANSACTION;
  UPDATE account SET money=money-1000 WHERE user_id=1;
  UPDATE account SET money=money+1000 WHERE user_id=2; 
ROLLBACK;
-- commit; -- 提交
SET @@autocommit=1; -- 开启自动提交

注意:TRANSACTION,ROLLBACK,commit后面的封号不要丢

六、索引

6.1 索引的分类

1、主键索引

2、普通索引

3、唯一索引

4、全文索引

6.2 索引的作用

mysql简历索引机制,目的就是为了提高查询的速度。索引一般会建立在MyISAM类型的数据表上。

  • 提高查询速度

  • 确保数据的唯一性

  • 可以加速表和表之间的连接,实现表与表之间的参照完整性

  • 使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间

  • 全文检索字段进行搜索优化

6.3 索引管理

1、索引的添加

ALTER TABLE student ADD INDEX bd (BornDate); --常规索引
ALTER TABLE news ADD FULLTEXT content (newsCotent) --全文索引

2、查看索引:

SHOW INDEX FROM student; -- 查看表上的全部索引 SHOW  INDEX(或KEYS) FROM 表名

3、删除索引

DROP INDEX content ON news

--删除主键索引的时候,如果主键上有自增属性的时候,要先取消自增
DROP INDEX `PRIMARY`  ON news
6.4 常见问题

问题1 :如何提高查询的速度?

1、在必要的查询的条件的列上添加索引。

2、Redis技术 -缓存数据库

3、热搜词,分词以后,配合 Elaticsearch。

4、分库,分表。一个表只存储10000条数据。编号为1-10000的数据,10001-20000存储在第二个表中。

问题2:Mysql中主键的生成策略有哪些?

1、自动增长

2、UUID

3、Mybatisplus -雪花算法 UUID的数据

4、可以借助算法,自己根据规则来进行自定义主键值 || 20位编号 ||

七、数据库设计

1、E-R图(实体关系图)
2、数据库的UML(数据库模型图)
3、使用Sqlyog工具生成数据库视图关系
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值