数据库的基本概念

1.英文单词:DataBase 简称:DB
2.什么是数据库:用于存储和管理数据的仓库
3.数据库的特点
1.持久化存储数据的。其实数据库就是一个文件系统
2.方便存储和管理数据
3.使用了统一的方式操作数据库–SQL

4.常见的数据库软件
1.MYSQL:开源数据库,小型数据库
2.Oracle:收费的大型数据库
3.SQLServer:Microsoft公司收费的中型的数据库,C#,.net等语言常使用

在web应用中,使用最多的就是MySQL数据库,原因如下:
1)开源,免费
2)功能足够强大,足以应对WEB应用开发(最高支持千万级别的并发访问)

安装

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

卸载

1.去mysql目录找到my.ini文件
复制 datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
2.卸载MySQL. 控制面板卸载该程序
3.找到C:/ProgramData下的MYSQL文件,进行删除
在这里插入图片描述

配置

MySQL服务

MySQL服务启动
1.手动
2.cmd–>services.msc 打开服务的窗口
3.

在这里插入图片描述

在这里插入图片描述

mysql登入与退出

mysql登入
1.mysql -uroot -p密码
2.mysql -hip -p链接目标的密码
3.mysql --host=ip --user=root --password=连接目标的密码

mysql退出
1.exit
2.quit

mysql目录

mysql安装目录
1.配置文件 my.ini

mysql数据目录
几个概念:
数据库 文件夹
表 文件
数据:数据
在这里插入图片描述

SQL

什么是SQL

Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”

SQL通用语法

1.SQL语句可以多行或者单行书写,以分号结尾。
2.可以使用空格和缩进来增强语句的可读性
3.MySQL数据库的SQL语句不分大小写
4.三种注释
单行注释 :-- 注释内容 或者 # 注释内容(mysql 特有)
多行注释:/* 注释 */

SQL分类

DDL(Data Definition Language)数据定义语言
用来定义数据库对象

DML(Data Manipulation Language)数据操作语言
用来对数据库中的表进行增删改查

DQL(Data Query Language)数据查询语言
用来查询数据库中的表的记录(数据)

DCL(Data Control Language)数据控制语言
定义数据库访问权限和安全级别,创建用户

DDL 操作数据库 创建和查询

1.操作数据库 CRUD 增删改查
C Create 创建
R Retrieve 查询
查询所有数据库名称
show databases(数据库创建之后默认四个数据库)
在这里插入图片描述
information_schema 视图
mysql 核心数据库 存储很多表文件
performance_schema 性能 对于性能提升做一些操作
test 测试

查询创建mysql数据库的命令(同时查看字符集)
在这里插入图片描述

创建新数据库
在这里插入图片描述
检测是否存在某个数据库,如果没有,就创建

在这里插入图片描述
设置字符集
在这里插入图片描述

U Update 修改
修改数据库的字符集
在这里插入图片描述

D Delelte 删除
删除数据库
drop database 数据库名称
在这里插入图片描述
存在再删除

在这里插入图片描述
使用数据库

查询当前数据库的名称
select database();

使用数据库
use 数据库名称
在这里插入图片描述

2.操作表

C Create 创建
create table 表名(
列名1,数据类型1,
列名2,数据类型2,

列名n,数据类型n,
);
注意:最后一列,不需要加逗号(,)

数据类型:
int 整数类型
double 小数类型 例如date(4,1)总共四位,小数后面保留1位
data 日期,包含年月日,yyyy-mm-dd;
datime 日期,包含年月日时分秒,yyyy-mm-dd hh:mm:ss;
timestamp 时间类型 包含年月日分秒 yyyy-mm-dd hh:mm:ss;

hh:mm:ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间来自动赋值;

varchar:字符串
name varchar(20):姓名最大字符20个字符
zhangssan 8个字符 张三 2个字符

create table stu(
	id int,

	name varchar(32),

	age int,

	score double<4,1>,
	birthday date,

	insert_time timestamp
 
);

R Retrieve 查询
show tables 查询数据库中所有表名称在这里插入图片描述
查询表结构
desc 表名称
在这里插入图片描述
在这里插入图片描述

复制表
create table 表名 like 被复制的表名;
U Update 修改
1.修改表名
alter table 表名 rename to 新的表名
在这里插入图片描述
2.修改表的字符集
在这里插入图片描述

3.添加一列
4.修改列名称的类型
5.删除列

D Delelte 删除
drop table 表名;
drop table if exists 表名;
在这里插入图片描述

在这里插入图片描述
修改表名称和属性
在这里插入图片描述

修改属性
在这里插入图片描述

图形化界面工具SQLyog

在这里插入图片描述
正常使用

在这里插入图片描述

DML 增删改表中的数据

1.添加数据
语法:
insert into 表名(列名1,列名2,…列名n)values(值1,值2,…值n);
注意:
1.列名和值要一一对应
2.如果表名后,不定义列名,则默认给所有列添加值

在这里插入图片描述

insert into 表名 values(值1,值2,...值n);
//2.如果表名后,不定义列名,则默认给所有列添加值

在这里插入图片描述
3.除了数字类型,其他类型需要使用引号(单双都可以)引起来

2.删除数据

语法
	delete from 表名 [where 条件]
注意:
	1.如果不加条件,则删除表中所有记录

在这里插入图片描述
TRUNCATE TABLE 表名; 删除一整个表,在创建一张一摸一样的表,效率更高

在这里插入图片描述

3.修改数据
语法
update 表名 set 列名1 = 值1,列名2=值2,… [where 条件]

DQL:查询表中的记录

语法
select * from 表名;
注意:
1.如果不加任何条件,则会将表中所有记录全部修改.
在这里插入图片描述

修改行的属性

在这里插入图片描述

DQL查询语句

ORDER BY 子句
ORDER BY 排序字段 排序方式
DESC 降序
ASC 升序

在这里插入图片描述
按照A排名,如果A一样,则按照B排名
在这里插入图片描述

  1. 聚合函数
  2. 将一列数据作为一个整体进行纵向的计算

count,max,min,sum,avg
count:一般选择非空的列:主键

select count(IFNULL(english,0)) from student;

IFNULL(english,0)如果english是NULL就替换成0

在这里插入图片描述
如上图avg,sum,min都可以直接这么用

分组查询

1.语法:group by 分组字段
2.注意
1.分组之后查询的字段:分组字段、聚合函数

在这里插入图片描述

增加限定条件,低于60分不参与分组
在这里插入图片描述

having

where和having的区别?
  1. where 在分组之前进行限定,如果不满足条件,则不参与分组。

    having在分组之后进行限定,如果不满足结果,则不会被查询出来。

  2. where后不可以跟聚合函数,having可以进行聚合函数的判断

在这里插入图片描述

别名作用

a as b
在这里插入图片描述

分页查询

语法 limit 开始的索引,煤业查询的条数

公式:开始的索引 = (当前的页码-1)*每一页显示的条数

在这里插入图片描述
在这里插入图片描述
分页操作是一个方言,limit是mysql独有的

基础查询

select * from 表名

select
字段列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定

查询非重复数据

在这里插入图片描述

直接计算元素总和

在这里插入图片描述

IFNULL

如果某个元素是NULL,则可以替换成想替换的数值
在这里插入图片描述

as 起别名

可以使用as给列元素起一个其他的名字

条件查询

1.where子句后跟条件
2.运算符

,<,<=,>=,=,<>
BEWEEN … AND 表示在一个范围之内

在这里插入图片描述

IN (集合)
在这里插入图片描述

OR
在这里插入图片描述

LIKE “ %” 模糊查询

% 多个字符
_单个字符
在这里插入图片描述

查询名字是两个字符的人
在这里插入图片描述

IS NULL 查询某一列为NULL的值

IS NOT NULL 查询不为空
在这里插入图片描述

约束

概念 对表中的数据进行限定,保证数据的正确性,有效性,完整性

分类:
1.主键约束:primary key
2.非空约束 not null
3.唯一约束 unique
4.外键约束 foreign key

唯一约束

在这里插入图片描述

注意mysql中,唯一位数限定的列的值可以有多个null

删除唯一约束
alter table stu drop index phone_number;

在创建表后,添加唯一约束
alter table stu modify phone_number varchar(30) unique;

主键约束

注意:
1.含义:非空且唯一
2.一张表只能有一个字段为逐渐
3.记录就是表中记录的唯一标识

2.在创建表时,添加主键约束

在这里插入图片描述
删除主键
错误 ALTER TABLE stu MODIFY id INT;

ALTER TABLE stu DROP PRIMARY KEY;

创建完表后,添加主键

ALTER TABLE stu MODIFY id INT PRIMARY KEY;

自动增长

概念: 如果某一列的类型是数值类型的,使用auto_increment 可以来完成值得自动增长

在创建表时,添加主键约束,并且完成主键自增长

在这里插入图片描述

删除自动增长
alter table stu modify id int;

添加自动增长
alter table stu modify id int auto_incremenr;

外键约束

foreign key
让表与表产生关系,从而保证数据的约束正确

创建外键

1,创建表时,可以添加外键

语法
create 表明(
外键列
constraint 外键名称 foreign key (外键列名称)references 主表名称(主表列名称)
);

CREATE TABLE department(
	id INT PRIMARY KEY AUTO_INCREMENT,
	dep_name VARCHAR(20),
	dep_locationion VARCHAR(20)
);

CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT,
	dep_id INT,
	CONSTRAINT emp_dept_fk FOREIGN KEY s(dep_id) REFERENCES department(id)
);

部门无法直接删除行数,因为被员工的外键约束所绑定
在这里插入图片描述

删除外键
ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;

在这里插入图片描述

添加外键
ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主列表名称)**

在这里插入图片描述

级联操作

级联(cascade)

ON UPDATE CASCADE ON DELETE CASCADE /*级联更新,级联删除*/

实例

ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
ON UPDATE CASCADE ON DELETE CASCADE /*级联更新,级联删除*/;

两张表添加了级联更新
b表更新了之后 a表的相关数据也进行了更新!
在这里插入图片描述

级联删除
a表和b表绑定级联删除,如果b表删除数据,a表的相关数据也会删除
在这里插入图片描述

级联操作
1.添加级联操作
语法: ALTER TABLE 表明 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) references 主表名称(主列表名称) ON UPDATE CASCADE ON DELETE CASCADE ;
2.
1.级联更新 ON UPDATE CASCADE
2.级联删除 ON DELETE CASCADE

数据库设计

1.多表之间的关系
1.一对一
如:人和身份证
分析:一个人只有一个身份证,一个身份证只能对应一个人
2.一对多(多对一)
如:部门和员工
分析:一个部门有多个员工,一个员工只能对应一个部门
3.多对多
如:

数据库设计的范式

概念:设计数据库时要遵循一些规范,要遵循后边的范式要求,必须要遵循前面的范式要求

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种凡是呈递次规范,越高的范式数据冗余就越小。
目前关系数据库有六种范式

分类:
1.第一范式:每一列都是不可分割的原子数据项
2.第二范式:在1NF的基础上,非码属性必须完全依赖候选码(在1NF基础上消除非属性对主码的部分函数依赖)
几个概念:
1,函数依赖:A–>B,如果通过A属性表(属性组)的值可以确定唯一B属性的值,则称B依赖于A。
例如:学号—>姓名
(学号,课程名称)—>分数
2.完全属性依赖:A—>B,如果A是一个属性组,则B属性值确定需要依赖于A属性组中所有的属性值
例如:(学号,课程名称)—>分数
3.部分函数依赖:A–>B,如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
例如:(学号,课程名称)–>姓名
3.第三范式:在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)

数据库备份和删除和还原

备份

在这里插入图片描述

在这里插入图片描述

删除

在这里插入图片描述

还原

在这里插入图片描述

多表查询

笛卡儿积:
有两个集合A,B取这两个集合的所有组成情况.
要完成多表查询,需要完成无用数据的清除
多表查询的分类:
1.内链接查询
1.隐式内链接:用where条件来清除无用数据
在这里插入图片描述

在这里插入图片描述

		2.显式内链接
		INNER 可省略

在这里插入图片描述

		select 字段列表 from 表名1 inner join 表名2 on 条件
	3.内链接查询
		1.从那些表查询数据
		2.条件是什么
		3.查询那些数据
2.外连接查询
	1.左外链接
		select 字段列表 from 表1 left[outer] join 表2 on 条件;

查询的左链接的部分以两边的子集
在这里插入图片描述

2.右外链接
	
3.子查询
查询中嵌套查询,称嵌套查询为子查询

嵌套查询最高年龄的人的信息
在这里插入图片描述

子查询不同情况:
1.子查询的结果是单行单列
子查询可以作为条件进行判断
小于平均年龄的信息
在这里插入图片描述

2.子查询的结果是多行多列
子查询可以作为一张虚拟表
在这里插入图片描述

3.子查询的结果是多行单列
子查询可以作为条件,用运算符IN来判断
在这里插入图片描述

事务

1.事务的基本介绍
1.概念
	如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要嘛同时成功,要嘛同时失败
2.操作
	1.开启事务:start transcation;
	2.回滚 rollback;
	3.提交 commit;
-- 开启事务
START TRANSACTION;
UPDATE account SET balance = balance - 500 WHERE NAME = "张三";
ERROR
UPDATE account SET balance = balance + 500 WHERE NAME = "李四";

-- 发现执行没问题,提交事务	
COMMIT;

-- 发现出问题了,回滚到事务开启部分
ROLLBACK;
4.MYSQL数据库中事务默认自动提交
*一条DML语句会默认自动提交一次事务
mysql就是自动提交的


修改事务的默认提交方式	
	查看事务默认提交方式SELECT @@autocommit; --1表示默认提交 0表示手动提交
	修改默认提交方式:SET @@autocommit  = ?;
2.事务的四大特征
1.原子性:不可分割的最小操作单位,要嘛同时成功,要嘛同时失败
2.持久性:当事务提交或回滚后,数据库会持久化的保存数据
3.隔离性:多个事务之间。相互独立。
4.事务操作前后,操作总数不变
3.事务的隔离级别(了解)
概念:多个事务是隔离的,相互独立。
但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
存在问题:
	1.脏读:一个事物,读取到另一个事务中没有提到的数据
	2.不可重复读(虚度)同一个事物中,两次读取的数据不一样
	3.幻读:一个事物操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
	
隔离级别:
	1.read uncommitted: 读未提交
		产生的问题:脏读,不可重复读,幻读
	2.read committed:读已提交(Oracle 默认)
		产生的问题:不可重复读,幻读
	3.repeatable 可重复读(Mysql 默认)
		产生的问题:幻读
	4.serializable:串行化--锁线程状态
		可以解决所有问题

注意:隔离界别从小到大安全性越来越高,但是效率越来越低

数据库设置隔离级别:
select @@tx_isolation;
数据库设置隔离级别:
set global transaction isolation level 级别字符串;

演示

DCL

SQL分类:
1.DDL 操作数据库和表
2.DML增删改表中数据
3.DQL查询表中数据
4.DCL管理用户,授权

DBA:数据库管理员

DCL:管理用户,授权
1.管理用户
1.添加用户
2.删除用户
3.修改用户密码
4.查询用户
–1.切换到mysql数据库
USE mySQL
2.查询user表
通配符:

在这里插入图片描述
删除用户

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

修改用户密码

UPDATE	USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';

在这里插入图片描述

SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

在这里插入图片描述

mysql 中忘记了root用户的密码
1.cmd->net stop mysql 停止mysql服务
	需要管理员运行cmd
	
2.使用无验证方式启动mysql服务
mysqld --skip-grant-tables	

3.打开cmd窗口直接输入mysql即可使用
4.use mysql
5.update user set password = password("你的新密码") where user = 'root'
6.关闭两个窗口
7,打开任务管理器手动结束mysqld.exe
8.启动mysql服务
9.使用新密码

2.管理权限
1.查询权限在这里插入图片描述

2授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
所有权限 `GRANT ALL ON *.* TO 'xiaochun'@'localhost';`

在这里插入图片描述

3.撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐