数据库概述
数据库相关定义
数据库: 存放数据的仓库,数据库中包含了数据和数据库对象, 例如表(table) ,视图(view),存储过程(procedure) 和触发器等都称为数据对象
在这个数据库体系中包含如下几个概念
1、数据(Data): 数据是描述事物的符号记录,是数据库的基本对象 ,例如 图像,视频,音频,记录信息 。数据处理: 顾名思义就是对数据进行处理,包括对数据存储、计算、加工、检索的过程
2、数据库(DataBase): 数据库可分为为 关系型数据库(MySql ,Oracle、DB2 等)和非关系型数据库 (Redis ,MongoDB )存储数据的仓库, 长期存储在计算机内有组织,有结构的大量的可共享的数据集合。
特点:永久存储、有组织、可共享
3、数据库管理系统(DataBaseManager System)
它是介于用户和操作系统之间的管理数据的软件, 它可以科学有效的组织和存储数据 。
它的作用:数据定义功能、数据的组织和存储、数据的操纵功能、数据库的运行管理、数据库的建立和维护
数据库管理系统通常由DBA(数据库管理员 DataBase Administrator)管理
4、数据库系统(DataBase System)把以数据应用为基础的系统统称为数据库系统,它包含 数据库、计算机硬件,数据库管理系统和相关软件和管理人员
数据库软件介绍
Oracle : 甲骨文公司产品 (收费)
MySql:被甲骨文收购(免费,开源)
SQL Server: 微软的数据库
DB2: IBM公司
数据建模
概念模型定义: 为了解决特定的问题,将人们所关心的某些方面,建立以数据字段为基础的 模型 , 面向人,按用户的观点对数据和信息建立模型 ,这里通常使用 ER模型(Entity -Ralation)
数据模型包括: 层次模型、 网状模型、关系模型(重点)
关系模型:
关系: 将一个没有重复行重复列的二维表称为一个关系, 二维表也叫关系表
元组: 在关系表中的 一条记录就是元素, 每一条记录对应一个元组
字段(属性): 一个关系中的 每一列的列头称为字段(属性) ,每一个属性都有一个属性名, 其属性的值称为属性值
域: 每一个属性的取值范围, 例如 性别属性 它的域就是男,女, 每一个属性的值都必须来自域的值
主键: 在一个关系表中, 用于唯一标识的,没有特定业务意义的可以定义为主键,例如 表的ID
外键: 来自主外键表的关系中(主表和子表) ,在子表中与主表关联的字段。 例如 班级表 和 学生表
主表: 在这个关系中 表示1的一方 是主表, 多的一方式子表 班级表是主表,学生表是子表
例如 学生和科目表的关系: 学生是主表,科目是子表 。
数据库的三大范式
三大范式的作用: 用于在设计数据库表时,尽量减少数据表设计的字段冗余,和增强表的设计的合理性 ,在实际开发中 必须准寻第一,二范式,可以适当的不准寻第三范式。
第一范式: 在一个关系表中所有的属性都是不可分割的独立单元。
第二范式: 在满足第一范式的基础上, 每一个字段除了主键以外 都与该表主体直接相关 。例如学生表中 可以定义 学生姓名,学生年龄,学生生日,不能定义学生的班级。因为学生的班级不是与学生直接相关的 ,而是建立班级表关联学生表。
第三范式: 在满足第二范式的基础上 , 除了主键以外的列 都不传递依赖于主键列,则满足第三范式
在实际开发中 第三范式作为可选规则
学生id 学生姓名 学生年龄 外键班级id 班级名称(传递依赖)
传递依赖的字段会增加数据表字段冗余 ,当修改“班级名称时”, 不仅要修改 班级表的班级名称,还要修改 学生表的班级名称,这个不合理的, 但有时候为了提高查询效率(减少表的关联),也可以不满足第三范式(增加冗余字段)。
安装卸载数据库
数据库版本 : MySQL5.0 、MySQL5.5、MySQL5.7 、MySQL8.0 (推荐)
在 我的电脑-》管理-》 管理进程服务 -》 MySQL80服务
mysql的默认管理员 root 密码自定义
mysql的默认端口号: 3306
连接mysql的方式
1、通过命令行连接
cmd进入到mysql的安装目录(C:\Program Files\MySQL\MySQL Server 8.0)的bin目录下:mysql -hIP地址 -u用户名 -p秒
远程连接: mysql -h47.100.182.246 -uroot -p123456
本地连接时 ip可以写 localhost 或者 127.0.0.1
2、 可以采用第三方客户端连接, 可以通过命令行访问
mysql的核心配置文件: my.ini 8.0以前在安装目录下,8.0以后在数据文件的目录下:C:\ProgramData\MySQL\MySQL Server 8.0
数据库的基本命令
1、创建用户:create user 用户名 identified by ‘密码’
给用户重命名:rename user 用户名 to 新用户名,创建用户之后 需要给用户赋予权限
2、给用户赋予权限 (grant ):grant select on 数据库名.* on 用户名 – 给用户名赋予查询 该数据库的所有对象的权限
撤销权限:revoke select on 数据库名.* from 用户名-- 给用户撤销 查询该数据库的权限
3、 删除用户 drop user 用户名
4、创建数据库:create database 数据库名
使用数据库: use 数据库名 ,当使用指定数据库时,后面所有操作都是针对该数据库的
5、 显示所有数据库 :show databases ;
显示数据库下所有的表:show tables;
设置编码格式 (没有乱码则不需要修改):set character_set_results=’GBK’;
desc 表名: 显示该表的结构
SQL语言
SQL(Structure Query Language)结构化查询语言,用于操作主流数据库,例如MySQL ,ORACLE,DB2等, 方便快捷的检索和管理数据库 。
SQL语言分类
1、数据定义语言(DDL Data Definition Language) : 用于定义数据库表结构,视图,用户等 对象, create 、alter 、drop
2、数据操纵语言(DML Data Manipulation Language); 用于操作数据和检索数据 ,包含 insert 、 delete 、 update 、 select
3、数据控制语言(DCL Data Controller Language): 给用户赋予权限 (grant) ,撤销权限 (revoke)
4、事务控制语言(TCL Data Transaction Language ):commit (提交事务)、rollback (回滚事务)
数据查询个检索select
数据库操作中最常用的语句
基础语法:select 字段名1 , 字段名2 ,… from 表名 [ where 条件赛选] ;
-- 注释 查询表记录
-- 查询单列
select sid from t_student ;
-- 查询多列 查询指定sql 快捷键 选中sql ctr+shift+r
select sid,sname from t_student;
-- 查询所有列
select * from t_student;
select * from t_dept;
select * from t_man;
-- 去掉重复列 distinct (效率较低)
-- 查询所有学生的年龄
select distinct(sage) from t_student;
-- 使用数学表达式
-- 将每个学生的分数 增加20分 并重命名列(as关键字)
select sscore as 分数 , sscore + 20 as '增加20分后' from t_student;
-- 注意 在数学计算过程中,如果数据为空,会影响计算结果
-- 可以使用 判空处理 ifnull 如果字段为空 就表示0
select sscore as 分数 , ifnull(sscore ,0) + 20 as 加20后 from
t_student;
-- 给字段起别名时,如果出现特殊字符,可以使用“”
-- mysql中“” 和 ‘’的区别
select sname as '姓名' ,sscore as "分 数" from t_student ;
-- 所有男生信息 where 字段名 ='值' mysql推荐用''
select * from t_student where ssex="男";
-- 连接操作符 ,可以将多个字段连接到一个字段中显示
concat(字段1,字段2)
select concat(concat(sname,'的'),SSCORE) as '学生的分数' from t_student ;
SELECT * FROM T_STUDENT;