Mysql概述

时间:2024-05-20 17:55:09

1 数据库概述

1.1 什么是数据库

DataBase,简称DB,数据库

数据库就是用来存储、管理数据的仓库

层次式数据库、网络型数据库、关系型数据库、非关系型数据库

1.2 什么是关系型数据库

其实就是以二维表的形式保存、管理数据的数据库
Mysql概述

非关系型数据库底层是以键值对(key-value)结构保存数据

常见的关系型数据库:

SQL Server:微软提供,适用于中型、大型项目,收费,在java中的使用占比大概10%,.NET C#

Oracle:甲骨文公司提供,适用于大型、超大型项目,性能优异,功能强大,收费,在Java中使用占比50%

Mysql:瑞典mysqlAB公司提供,适用于小型、中型项目,小巧轻量,免费开源,性能也不差。在Java中使用占比20%

DB2:IBM公司提供,IBM 服务器软件、服务器硬件、数据库

Sqlite:迷你,嵌入式设备,智能家居,手机,ipad

1.3 数据库相关概念

1.31、数据库服务器

服务器软件,mysql 软件,将服务器软件装在电脑上,就可以作为一台服务器对外提供服务器。(存取数据)

1.3. 2、数据库

在每一个数据库服务器中,可以有很多个仓库(数据库),通常情况下,一个网站中的所有数据会存放在一个数据库中。

京东 db_jd数据库

百度 db_baidu数据库

淘宝 db_taobao数据库

1.3.3、表

一个数据库中可以创建多张表,而一张表用于存放一类信息

(Java中的类对应数据库中的表)

商品信息 tb_product表

购物车信息 tb_cart表

用户信息 tb_user表

订单信息 tb_order表

1.3.4、表记录

一张表中可以包含多条表记录,一个表记录用于存放某一条具体的信息
Mysql概述
数据库服务器、数据库、表、表记录_17

2 Mysql数据类型

2.1 数值类型

Mysql中提供了很多的数值类型,其中最常用的:

int 对应Java中的int类型,占用4个字节

double 对应Java中的double类型,占用8个字节

2.2 字符串类型

2.2.1、char(n) – 定长字符串,长度固定

n表示字符数,范围是 0~255(个字符)

name char(10),表示存入的数据长度不能超过10(10是最大长度,不能超过10个字符),如果存入的数据长度不满足10,剩余的空间会用空格补全。因此无论存入的数据字符数是多少个,占用的空间都是固定的!

char类型在存入数据的效率上比varchar要略高一些。

char类型适用于存储长度固定的数据,比如身份证号,学生编号,存储长度固定的数据,既不会有空间浪费,还可以提高效率。

2.2.2、varchar(n) – 不定长字符串,长度不固定

mysql5.0之前的版本: n表示字符数,范围是 0~255(个字符)

mysql5.0之后的版本: n表示字符数,范围是 n*字节数 < 65535

name varchar(10),表示存入的数据长度不能超过10(10是最大长度,不能超过10个字符),如果存入的数据长度不满足10,剩余的空间可以留给别的数据使用。因此数据实际占用的空间和数据的长度是一致。

varchar类型适用于存储长度不固定的数据,虽然效率不如char类型高,但不会有空间的浪费。

** 面试题:char和varchar有什么区别?

text 范围是:0~65535个字节

bigtext 范围是:4GB

2.3 日期类型

date 日期(年月日)

time 时间(时分秒)

datetime 日期+时间(年月日 时分秒)

timestamp 时间戳,格式是年月日 时分秒,从1970年1月1日到指定时间之间的毫秒值

datetime和timestamp两者之间的差别:

(1)存的数据不同,datetime存入的就是一个年月日时分秒的时间字符串;而timestamp存入的是从1970年1月1日到某一个日期之间的毫秒值。

(2)范围不同:datetime的范围是 10009999年,而timestamp范围是19702038年

(3)datetime不能设置自动更新时间,而timestamp可以设置自动更新值为当前时间。

User表
Mysql概述

3 新增、修改、删除表记录

数据库的创建、删除、修改、查看

表的创建、删除、修改、查看

!!!表记录的新增、修改、删除、!!!查询

3.1 通过cmd插入或查询数据的编码问题

3.2 mysql数据库的字段约束

思考1:如果id是编号,编号应该是唯一的且不能为空,如何保证这一点?

3.2.1、主键约束

:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。

添加主键约束:
Mysql概述

3.2.2、唯一约束

:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。

添加唯一约束:
Mysql概述

3.2.3、非空约束

:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。

添加非空约束:
Mysql概述

思考2:在插入数据时,如何保证插入的id不会因为重复而报错?

可以采用主键自增长策略,如果id主键是数值,可以设置主键自增,即在插入数据时,给id赋值一个null,数据库如果检测到id设置了自增策略,会自动获取一个id值插入到表中,而且每次插入完之后,都会自增1

思考3:如果id主键设置了自增后,在插入数据时,是否可以设置id的值?

可以,如果给自动增长的主键id设置了一个值,只要值不冲突,是可以设置的。并且设置完后,数据表中保存的自增变量的值,会在设置值的基础上+1

3.3 drop、delete、truncate之间的区别?

3.4 mysql中常见的函数

ifnull(列名, 值) – 对某一列中的null值进行处理, 如果有null则用第二个参数进行替换

---------------------多行函数-------------------

max( 列名 ) – 对某一列中的值求最大值

min( 列名 ) – 对某一列中的值求最小值

count( 列名 | * ) – 对某一列/所有列统计行数

sum( 列名 ) – 对某一列中的所有值求和

avg( 列名 ) – 对某一列中的所有值求平均值

以上函数分组和不分组, 返回的结果是不同的, 如果不分组, 默认整个查询结果是一组, 就会返回一个 最大值、最小值、行数、总和、平均值。

如果分了组,有多少个组,就返回多少个 最大值、最小值、行数、总和、平均值。


year( 日期 ) – 从日期中提取年份

month( 日期 ) – 从日期中提取月份

day( 日期 ) – 从日期中提取天数

curdate() – 获取当前日期, 格式为"年月日"

curtime() – 获取当前时间, 格式为"时分秒"

sysdate() – 获取当前日期加时间, 格式为"年月日 时分秒"

4 外键和表关系

4.1 外键约束

在现实生活中,有很多数据间往往是有关系, 比如:员工和部门之间存在一定的关系;学生和老师之间也存在一定的关系。

这些关系往往是需要我们保存起来的,那么:

思考1:如何在数据库中保存两张表数据之间的对应关系呢?

可以在其中的一张表中添加一个列,保存另外一张表的主键,从而来保存两张表数据之间的对应关系
Mysql概述

思考2:指定某一列为外键和不指定外键有什么区别?

以部门和员工表为例,在员工表中添加一个列dept_id保存部门表的主键。

在将dept_id指定为外键之前,数据库认为dept_id这个列就是一个普通的列,和其他列没有什么区别, 所以数据库也不认为两张表之间有任何关系, 当然也不会帮我们维护这种关系.

如果将dept_id这个列指定为外键, 就等同于告诉数据库, 部门表和员工表之间是有关系的, 员工表中的dept_id列是要严格参考部门表的主键(id)这一列的, 数据库也会帮我们维护这段关系.

思考3:什么是外键?

外键其实就是用于通知数据库,两张表数据之间对应关系的这样一个列。

思考4:创建表的同时怎么添加外键?

Mysql概述

思考5:如果在创建表时没有指定外键,那么后期该如何指定外键?

<<参见课件8.7>>

思考6:如何删除外键?

<<参见课件8.7>>

4.2 表关系

4.2.1、一对多(多对一)

对于一对多的关系,我们可以在多的一方(学生表)中添加列,保存一的一方(班级)的主键,从而保存两张表之间的对应关系。
Mysql概述

Mysql概述

4.2.2、一对一

对于一对一的关系,可以在任意一方添加列保存另一方的主键,从而保存两张表之间的对应关系
Mysql概述

4.2.3、多对多

Mysql概述

4.3 多表关联查询、外连接查询

1、笛卡尔积查询

2、关联查询:

3、左外连接查询:

4、右外连接查询:

4.4 where和having的区别

where和having都是用于筛选过滤,其区别在于:

(1)where是在分组之前进行筛序过滤

(2)having是在分组之后进行筛选过滤

(3)where中不能使用列别名和多行函数(count,max,min,sum,avg)

(4)having可以使用列别名和多行函数

5 数据库的备份和恢复

5.1 备份数据库

在cmd窗口中(未登录的状态下), 可以通过如下命令对指定的数据库进行备份: mysqldump -u用户名 -p 数据库的名字 > 备份文件的位置

例如: 对db40库中的数据(表, 表记录)进行备份, 备份到 d:/db40.sql文件中

Mysql概述

5.2 恢复数据库

在cmd窗口中(未登录的状态下), 可以通过如下命令对指定的数据库进行恢复: mysql -u用户名 -p 数据库的名字 < 备份文件的位置

例如: 将d:/db40.sql文件中的数据恢复到db80库中

首先需要先创建db80库,在cmd窗口再执行如下命令:

– 在cmd窗口中(已登录的状态下)执行

Mysql概述

– 在cmd窗口中(未登录的状态下)

Mysql概述

或 例如: 将d:/db40.sql文件中的数据恢复到db100库中

– 在cmd窗口中(已登录的状态下)执行, 先创建db100库,进入db100库

Mysql概述

– 在通过source执行指定位置下的文件中的sql语句。

Mysql概述