JavaSE入门级-第十三课-MySQL入门

 

关系型数据库

数据库,存储数据的虚拟仓库,根据底层实现可以分为,层次型,网转型,关系型,对象型,其中我们只需要关注 关系型,关系型数据库代表有SqlServer,Mysql,Oracle

数据库是一个底层软件,它的使用需要使用DBMS,数据库管理系统,其实我们平时口中说的数据库是包括了DBMS在内的组合

l  例:就好像操作系统一般,计算机底层都是软件需要搭载操作系统才能更方便运行

这种系统也分成 命令版 和 窗体版

 

层次型数据库

层次数据模型是用树状<层次>结构来组织数据的数据模型 就是树的组织结构来存储数据

l  例图:

 

 

 

(提醒:已经淘汰,曾经存在过)

网状型数据库

用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型

 

 

 

 

关系型数据库的特点

l  组成单位是一张又一张的二维表 称为实体

l  关系型数据库指的是使用表格表示实体之间关系的数据模型称之为关系数据模型

 

Mysql安装

Navicat安装

 

 

创建数据库

l  先确保服务开启 自行百度 可以 任务管理器 -> 服务 -> 搜索M -> 打开服务

 

 

 

 

l  创建连接

 

 

 

 

 

 

 

l  创建数据库

 

 

 

 

 

 

 

 

 

 

l  创建数据表

 

 

 

 

 

 

 

l  添加表数据

 

 

 

关系型数据库名词

关系

指的是二维表,每一张表都有一个表名(唯一),表中的数据都应该和表相关

记录

在二维表中,一行表示一条记录(除了表格头)(也叫 元组 企业不这么叫)

属性

在二维表中,一列我们称为属性 (在企业中 我们都称一列为一个字段)

属性的取值范围 我们 称为域(长度)

关联

表和表之间的关系 我们称为 关联

(表和表之间的关系 就一种 参照完整性 也 称作外键关系)

主键

主键是一个特殊的列(属性),数据内容必须是唯一的(不能重复,不能为空),主键的作用是可以标识唯一一条数据记录

主键是唯一的。一个数据表中只能包含一个主键(可以随意设置,设置成功之后有一把钥匙)

 

外键

参照完整性

在一张表中只能有一个主键,这张表的主键 在别的表中 就称为外键

 

数据冗余

表中存在数据重复的现象 就称为数据冗余(正常情况数据冗余 是我们需要去解决去避免出现的问题)

(但是在具体的业务中,适当的数据冗余 又是优秀的设计)

 

异常

执行sql语句过程中发生的错误就叫数据库异常

Sql语句指的是 DBMS 给我们提供操作数据库的 指令集

(绝大多数的异常都是 语法错误 一定是 认真检查自己的sql语法)

 

数据库使用操作

l  数据库操作系统的使用(DBMS)DBMS 整理出了一套指令集合

DDL数据库定义语言

l  如何创建一张表,和删除表:

-- 美化版本

CREATE TABLE userinfo (

         uname VARCHAR (8) NOT NULL,

         pwd VARCHAR (64) NULL,

         PRIMARY KEY (uname)

);

 

-- 删除表

drop table student;

drop table huluwa;

 

DML数据库管理语言

l  如何入管理表中的数据

-- DML数据管理语句

-- 新增数据 insert

-- userinfo 表结构 uname 主键 varchar 8  pwd varchar 64

insert into userinfo values('root','123456');

 

-- 删除 delete

-- drop 表结构的删除了 数据也没有了

-- delete 是删除数据

delete from userinfo;

 

-- 更新 update

update userinfo set pwd = '123456';

 

l  带条件

-- 指定列的新增

insert into userinfo(uname) value('大娃');

insert into userinfo(uname) value('二娃');

insert into userinfo(uname,pwd) value('三娃','12345');

-- 删除指定的记录

delete from userinfo where uname = '四娃'; -- 切记 删除一定要加where

-- 更新指定的记录

update userinfo set pwd = '123456' where uname = '大娃';

update userinfo set uname = '六娃' where uname = '大娃';

 

 

 

DQL数据库查询语言

基本语法

select 字段列表 from 表名

例句

Select * from emp;

完整语法:select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];

 

Where子句

=:字段 = 值 类似运算 < > >= <= != 例: where num = 1;

like:字段 like 值 %表示通配 例: where name like ‘张%’;

in:字段 in 范围 例:where score in (‘A’,’B’,’C’);

not in:字段 not in 范围 例:where score not in (‘A’,’B’,’C’);

between:字段 between 值 and 值 例:where age between 18 and 20;

or: where 条件1 or 条件2 表示或关系

and:where 条件 1 and 条件2 表示且关系

not:where not 条件1 表示取反关系

 

 

 

关联查询

多表,join,left join,right join

多表查询

select * from student,cla;

解析:简单的多表查询 是 将两张表的记录全部查询出来 A ∪ B, 笛卡尔集

正确的多表查询 应该 过滤掉不正确的的信息 where

select * from student as s,cla as c where s.cnum = c.cnum;

select s.*,c.cname,c.ctype FROM student s,cla c WHERE s.cnum = c.cnum;

另一种多表查询

-- 尝试写出2班的学生 (包括班级信息)

select s.*,c.cname,c.ctype FROM student s,cla c

WHERE s.cnum = c.cnum and s.cnum = 2;

-- 使用join的写法

select s.*,c.cname,c.ctype FROM student s join cla c on s.cnum = c.cnum

WHERE s.cnum = 2;

 

练习:

l  使用数据库语句操作数据库,完成部门员工多表查询

 

 

 

补充知识

使用命令打开服务

 

 

 

 

使用命令关闭服务

 

 

 

 

数据库定义

建库 删库

create database dbname;

drop database dbname;

 

 

数据表定义

建表

create table tablename (

column_name_1  column_type_1  constraints,

column_name_2  column_type_2  constraints,

……

column_name_n  column_type_n  constraints);

删除表

drop table tablename;

例句:

drop table emp;

 

数据表设计

修改表字段类型

alter table tablename modify [column] column_definitio;

例句:

alter table emp modify ename varchar(20);

 

添加表字段

alter table tablename add [column] column_definition;

例句:

alter table emp add column age int(4);

 

删除表字段

alter table tablename drop [column] col_name;

例句:

alter table emp drop column age;

 

修改字段名

alter table tablename change [column] old_col_name column_definition;

例句:

alter table emp change age age1 int(4) ;

 

修改表名

alter table tablename rename [to] new_tablename

例句:

alter table emp rename emp1;

 

 

 

 

DML语句语法

新增记录 指定列

insert into tablename (field1,field2,……fieldn)

values(value1,value2,……valuesn);

例句

insert into emp (num,name) values(‘01’,’大娃’);

全表

insert into tablename values(value1,value2,……valuesn);

例句

insert into emp values(‘01’,’大娃’);

批量新增

insert into tablename (field1, field2,……fieldn)

values

(record1_value1, record1_value2,……record1_valuesn),

(record2_value1, record2_value2,……record2_valuesn),

……

(recordn_value1, recordn_value2,……recordn_valuesn);

例句

insert into emp values(‘01’,’大娃’),(‘02’,’二娃’),(‘03’,’三娃’);

 

 

更新记录

update tablename set field1=value1, field2=value2, ..., fieldn=valuen [where condition]

例句

update emp set sal=1000 where ename='laodeng';

 

删除记录

delete from tablename [where condition]

例句

delete from emp where ename='qq';

 

删除整张表记录

truncate [table] tbl_name;

例句

truncate  table  emp;

 

truncate delete drop 有什么区别

truncate 和 delete 是删除表记录 truncate 是一次性删除 delete可以选择性删除

运行速度 truncate 会比 delete 速度快

drop 和 其它两个不一样 它是DDL语句 是对于 表结构的删除

 

数据表设计(难)

Mysql是关系型数据库,以二维表的方式去存放数据,如何去设计一张表???

注意在设计表的时候为了 保证 它的合理性

  1. 不会出现大量的数据冗余 (节约内存)
  2. 更方便的进行业务拓展 (支持 改改改)
  3. 更方便 CRUD 操作 (指的是 Create Read Update Delete)

 

我们前辈给我们规定除了几个条例(怎么来的?我们前辈犯的错他们去总结得来的,来之不易,痛苦中得来,血的教训)

称为 3大范式 (3NF)

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF

树养同学:要求数据库表的每一列都是不可分割的原子数据项,1NF

赵远同学:字段不可分,每个字段是原子级别的(长得挺帅的)

老唐同学:一个字段只能存储一项信息,字段不能再分列

 

l  第一范式解释:属性明确,不可再分,原子范式(必须遵循)

 

反例:违反第一范式

Sid

sname

sinfo

01

李雷

长得帅

02

韩梅梅

A

03

王二狗

 

正例:符合第一范式

sid

sname

sface

sscore

ssex

01

李雷

长得帅

C

02

韩梅梅

长得漂亮

A

03

王二狗

长得寒碜

A

 

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF

老唐同学:满足第一范式的前提下有主键,表中的任意一个字段都只依赖表中同一个字段

刘畅同学:要有主键?

树养同学:记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖

伟东同学:ha?what?

兴业同学:me too

老邓同学:再满足第一范式的基础之上,主键范式(尽量遵循)

 

反例:违反第二范式

Ssex

Sname

Sscore

Saddr

1

王二狗

A

王家村

1

张大牛

C

张家沟

0

马冬梅

B

马家屯

1

王二狗

C

马家屯

 

正例:满足第二范式

sid

Ssex

Sname

Sscore

Saddr

01

1

王二狗

A

王家村

02

1

张大牛

C

张家沟

03

0

马冬梅

B

马家屯

04

1

王二狗

C

马家屯

 

 

第三范式:设R是一个满足第一,二范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF

 

佳腾同学:不明白

忠滨同学:不知道

刘畅同学:不重复包含同类信息,有同类信息作为公共表

梓泳同学:能够联系到另外一张表

老邓:如果出现数据冗余可以使用外键,冗余范式 (随便你)

 

反例:违反第三范式 (适当的冗余是允许的)

student

Sid

Sname

Sscore

Cnum

cname

ctype

01

王二狗

A

01

C营3期

java

02

张大牛

C

01

C营3期

java

03

马冬梅

B

01

C营3期

java

04

李云龙

C

02

B营1期

php

05

楚云飞

A

02

B营1期

php

 

正例:符合第三范式

Student

Sid

Sname

Sscore

cnum

01

王二狗

A

01

02

张大牛

C

01

03

马冬梅

B

01

04

李云龙

C

02

05

楚云飞

A

02

Cla

Cnum

cname

ctype

01

C营3期

java

02

B营1期

php

 

 

数据库设计

概念模型

软件设计初期面向对象的设计 将具体的业务抽象成为概念模型画出,支持整个软件产品的 概念关系图 (E-R图)entity – relation

Entity 表示的是实体 也就是业务对象

Relation 表示的是 实体之间的关系

l  一对一关系

l  一对多关系

l  多对多关系

 

例如:葫芦小铺系统(电商)

(小结:上述3个实体中订单是属于一个比较特殊的业务,它需要表达 谁 买了 什么东西)

 

关系模型

l  根据概念模型 需要 将它转换成为关系模型(数据库的表设计)

l  通过专业的设计软件 根据概念模型 设计出 关系模型图

 

 

 

 

 

构建静态数据

l  按照正常的业务 将每张表的数据 刷上去 在通过DML语句或者是 DQL语句测试 能否支持系统的运行

 

 

 

 

 

 

l  写测试语句判断整个数据表和数据 能否支持系统的运行 每个功能都去测试一遍

 

 

 

 

 

 

l  都测试通过之后讲数据库导出备份一下

 

 

 

 

 

 

 

 

 

 

posted @ 2021-07-21 14:26  二娃千里眼  阅读(90)  评论(0)    收藏  举报