数据库的基本知识(学习笔记)

本文介绍了现实世界、信息世界和机器世界之间的关系,阐述了数据库中的实体、属性、联系等概念。重点讲解了关系型数据库MySQL中的数据表创建,包括主键、外键的设定,并展示了数据库权限管理和数据操作,如增删改查。此外,还涵盖了SQL命令的应用,如ALTER用于修改表结构,DELETE用于删除数据,以及UPDATE用于更新记录。
摘要由CSDN通过智能技术生成

## 在讲数据库之前,我们先了解一下现实世界,信息世界,机器世界,这三者之间的关系

1.1现实世界

现实世界也就是客观存在的世界,这一概念在数据库中指的是对某一事物的描述,描述其各方面特征以及是否与其他事物存在联系

2.1信息世界

信息世界是对客观事物的抽象描述,是对现实世界经过分析、归纳和抽象得到的信息,这样的信息具有一定的格式。

2.2信息世界中的信息是对现实世界事物的解释,是对我们所认识事物的加工,所以引入一些概念:

实体:指现实世界中一个客观存在并能区别的事物
属性:实体的某一特征
属性型:指属性名
属性值:某一属性名的一个具体值
实体集:同一类型实体的集合,比如所有学生是一个实体集
实体型:实体名 + 所有属性名,如学生(姓名,学号,年龄,性别,··)
码:能为一标识一个实体的属性或属性集称为实体的码
域:属性的取值范围,比如性别这一属性的域就是{男,女}
联系:单个实体集内部的属性存在着联系,不同实体集之间也存在着联系,这个联系可能是1对1,1对多,多对多。

3.1机器世界

在机器世界里,我们所看到的事物要以数据的形式展现,所以必须对信息世界的信息再次抽象,引入概念:

字段:就是属性名,有型和值
记录:字段的有序集合,有型和值,记录又称元组
文件:同类记录的集合,也就是一个实体集
关键字:能够唯一标识每个记录的字段或字段集

在这里插入图片描述

3.2总体来看,要做到讲现实世界中的信息储存到计算机中,必须要经过两次抽象,并规定数据的储存方式,如图;

在这里插入图片描述

概念模型:也叫信息模型,对现实世界的一级抽象的结果
数据模型:也叫逻辑模型是对数据及其联系的描述,包括了组织方式、表达方式和存储路径,它是对现实世界的两级抽象的结果

3.3DBMS所支持的数据模型有很多,如有层次模型、网状模型、关系模型,这些模型所实现的功能包括对各自数据库的增删改查等,以及对数据库的约束。
4.1接下来,我们以MySQL数据库(关系型数据库)为例来解释数据表的概念以及创建方法;

先举个例子:
在这里插入图片描述
1.这张二维表格,表示的就是一个实体集合;
2.表中的一行就是一个元组,也是实体集中的一个实体;
3.表中的每一列的名称就是一个属性,且不可重复;
4.每一列(即属性)会有一个范围,比如性别只能为男女,这个范围就叫做域;

4.2数据库的键:数据库中的键(key)也可以称为码,是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分,比如:

超键:
能唯一标识元组的属性集,其中一个属性可以为作为一个超键,多个属性组合也可以作为一个超键。
候选键:
候选键有两个要求:
1.始终能够确保在关系中能唯一标识元组。
2.在属性集中找不出真子集能够满足条件。
其中第一个条件就是超键的标准,所以我们可以把候选键理解为不能再“缩小”的超键

主键;
从候选码里选定一个作为主键,不可为空,且不可重复;

外键:
在一个表A中,有一个属性b不是关系A主键或候选键,但是是另一关系B的主键,这中情况属性b则是关系A中的外键。

主键和外键的例子:
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqlI91OI-1639559971140)(C:\Users\ZhangYu\Pictures\日常\屏幕截图 2021-12-13 174143.png)]

5.了解完基本知识,我们来实操一下,任务如下:

在本地mysql中创建一个名为nuc_lab的表,表的具有的列为name,lab_number,并将name在创建表时设置为主键,lab_number设置为外键,外键关联到一个新创建表的lab_number列,这个新创建的表名为lab_location其中包含的列为lab_number,location

1.首先打开MySQL命令行,创造一个nuc_web的库:
create database web;
2.进入到库中,并创建数据表名为nuc_lab,里面的字段为name和lab_number,类型为字符,并设name为主键;
use nuc_lab;
creat table nuc_lab(name varchar(20) primary key,lab_number varchar(20));
3.再建一个表为lab_location,字段为location和lab_number,并把lab_number设为外键;
create table lab_location(lab_number varchar(20),location varchar(20),foreign key(lab_number) REFERENCES nuc_lab(lab_number));
这样我们就完成了。

6.mysql的一些常用命令:

6.1创建用户及权限管理

我们进入MySQL命令行时,通常用的是root用户登录,这就代表我们拥有了全部权限,可以以管理员的身份进行数据库的管理,但我们想给普通用户去使用数据库的话,我们就需要给这些用户分配权限,让他们可以进行一些基本的操作:

首先创建一个用户:

create user '用户名'@'host' identified by'密码';

host是这个用户所在的主机名,若为本地的话可以写localhost,也可以不写;

接下来,我们进入到这个用户,打开cmd,输入mysql -u 用户名 -p,然后输入密码,进入后,我们先查看一下库名,show databases;
在这里插入图片描述
右边为新用户,我们可以看到有很大的差别,这就是因为权限的问题;(想查看当前用户的权限用show * from user;)
我们用root账户来授权:

grant select on mysql.* to 'student' identified by '123456';

我们可以看到已经可以查看了
在这里插入图片描述
接下,我们进入web库的nuc_lab的表,并插入一段数据:
在这里插入图片描述发现无法插入,这是因为我们没有授予insert的权限,我们授予以后再看:

在这里插入图片描述发现就可以了,我们可以授权也可以解除权限,利用下列语句:

revoke select,insert on web.nuc_lab from 'student';

6.2对数据表的增删改

alter命令
1.修改表名

alter table 旧名 rename 新名

在这里插入图片描述2.修改列名:

alter table nuc_lab change lab_number labnumber;

在这里插入图片描述
3.修改一列的属性

alter table lab_location modify lab_number varchar(6) default null;

在这里插入图片描述4.增加字段:

alter table nuc_lab add columns level varchar(20)

在这里插入图片描述5.删除字段:

alter table nuc_lab drop column level;
alter table nuc_lab drop column phone;
注意如果表中只有一个字段,无法用drop删除;

在这里插入图片描述
6.3 delete语句

删除语句一共有3种:

1.drop删除整个表,包括结构和内容
2.truncate删除表中所有数据,但不能与where一起使用
3.delete删除表中指定数据,能与where一起使用

1.删除整个表的数据

1.delete from table_name;

2.配合where删除

delete from nuc_lab where nuc_lab.lab_number='1';

在这里插入图片描述
3.配合order by删除

delete from nuc_lab order by lab_number limit 1;

意思是以lab_number字段排序,取第一个删除,如果该字段储存的是数字的话,从小到大排序,如果该字段储存的是字符,则以ascii码进行排序;

6.4drop删除
用drop删除是直接将表全部删除而不是删除表中的数据(也可以用来删除库),这需要一定的权限

DROP DATABASE db_name;
删除数据库
DROP TABLE table_name;
普通删除表 
DROP TABLE IF EXISTS tbl_name1;
DROP TABLE IF EXISTS 'tb1_name2','tb1_name1';
可以一次删除多个表,if exists是如果有一个表不存在,依然可以绕过执行,而不会报错; 

6.5 update命令

update 表名 set 列名 新的值 where 列名=‘ ’

如图:
在这里插入图片描述
再用where限定的时候,也可以用
update nuc_lab set name='yuandin' where lab_number=2;
效果是一样的
----------------------------------------------未完待续---------------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值