数据库1

本文介绍了MySQL数据库的基础知识,包括E-R模型、三范式、数据库与表的操作,以及如何通过图形界面和命令行进行数据的增删改查。详细讲解了查询语句的使用,如比较运算符、逻辑运算符、模糊查询、范围查询等,以及如何进行数据的备份与恢复。此外,还提到了MySQL与其他数据库的区别,如InnoDB和MyISAM引擎的特性。最后,文章给出了使用Python与MySQL交互的教程,包括安装模块、增删改查操作及事务处理。
摘要由CSDN通过智能技术生成

1 mysql
内容简介

  1. mysql数据库,是当前应用非常广泛的一款关系型数据库
  2. 查看官方网站
  3. 查看数据库排名
  4. 主要知识点包括:
    a) 数据库与表的操作
    b) 数据的增加、修改、删除
    c) 数据的查询(重点)
    d) 与python交互

    1.1 创建库和表
    内容简介
  5. 主要知识点包括:能够与mysql建立连接,创建数据库、表,分别从图形界面与脚本界面两个方面讲解
  6. 相关的知识点包括:E-R关系模型,数据库的3范式,mysql中数据字段的类型,字段约束
  7. 数据库的操作主要包括:
  8. 数据库的操作,包括创建、删除
  9. 表的操作,包括创建、修改、删除
  10. 数据的操作,包括增加、修改、删除、查询,简称crud
  11. 学生表结构:
    a) id
    b) 名称
    c) 性别
    d) 地址
    e) 生日
  12. 科目表结构:
    a) id
    b) 名称
    1.1.1 数据库简介
    人类在进化的过程中,创造了数字、文字、符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题
    计算机诞生后,数据开始在计算机中存储并计算,并设计出了数据库系统数据库系统解决的问题:持久化存储,优化读写,保证数据的有效性
    当前使用的数据库,主要分为两类
  13. 文档型,如sqlite,就是一个文件,通过对文件的复制完成数据库的复制
  14. 服务型,如mysql、oracle、postgre,数据存储在一个物理文件中,但是需要使用终端以tcp/ip协议连接,进行数据库的读写操作
    E-R模型
    当前物理的数据库都是按照E-R模型进行设计的
    E表示entry,实体
    R表示relationship,关系
    一个实体转换为数据库中的一个表
    关系描述两个实体之间的对应规则,包括
  15. 一对一
    合法的情况下:一个男人娶一个女人,一个女人嫁一个男人
  16. 一对多
    目前教室里,一个老师教多个学生,一个学生被一个老师教
    一个教室里有很多学生,一个学生只能一个教室
  17. 多对多
    在大学中,一个学生选很多课程,一个课程被学生选
    在大学里,一个学生可以有很多老师,一个老师可以教很多学生

关系转换为数据库表中的一个列在关系型数据库中一行就是一个对象
三大范式
经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式。在一定程度上,为了提高访问性能,可以允许一定的冗余。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

  1. 第一范式(1NF)
    所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
    说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
  2. 第二范式(2NF)
    在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。(该主键的添加是在ER设计时添加,不是建库时随意添加)
    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
  3. 第三范式(3NF)
    在1NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
    第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。
    说明:后一个范式,都是在前一个范式的基础上建立的
    1.1.2 安装管理
    如果是在windows上安装,请参考资料。
    如下是在linux上进行安装的过程。
    安装
    sudo apt-get install mysql-server mysql-client
    然后按照提示输入
    image.png

管理服务
• 启动
service mysql start
• 停止
service mysql stop
• 重启
service mysql restart
• 查询服务是否启动
netstat -tap | grep mysql
允许远程连接
• 找到mysql配置文件并修改
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address=127.0.0.1注释

• 登录mysql
image.png

• 运行命令下面3条命令
1、选择使用mysql数据库
use mysql;

2、更新,将root原来的Host的值localhost改成% localhost表示只能本地登陆,%表示任何机器都可以登陆
update user set Host="%" where User=“root”;

3、刷新权限信息,也即是让我们所作的设置马上生效
flush privileges;
image.png

• 重启mysql
/etc/init.d/mysql restart
或者
service mysql restart
1.1.3 卸载管理
删除mysql的数据文件
sudo rm /var/lib/mysql/ -R

删除mqsql的配置文件
sudo rm /etc/mysql/ -R

自动卸载mysql的程序
sudo apt-get autoremove mysql* --purge
sudo apt-get remove apparmor

1.1.4 数据完整性
一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中
在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束
字段类型
在mysql中包含的数据类型很多,这里主要列出来常用的几种

  1. 数字:int,decimal
    decimal(5,2) 整数位最多是3位,小数位最多是2位
  2. 字符串:char,varchar,longtext
    char(10) 10个字符长度,用不完,也是10个长度
    varchar(10) 10个字符长度,用多少,是多少长度
    字符 = 字节+编码

char因为是定长,所以查询效率高,浪费空间
varchar因为是边长,所以节省空间,查询效率相对低
3. 日期:date,datetime
详情请点击MySQL数据类型
约束
目的:保证数据的正确性。

  1. 主键primary key,默认是唯一,标识这一行数据与其它不同。非空并唯一。没有逻辑意义,只是可以唯一标识这一行
  2. 非空not null,默认是NULL
  3. 惟一unique
  4. 默认default
  5. 外键foreign key 先创建主键表,再创建外键表
    1.1.5 图形窗口操作
    使用图形窗口连接
    • windows下的navicat点击“连接”弹出窗口,按照提示填写连接信息,如下图
    image.png

• 连接成功后,会在连接名称下面显示出当前的数据库
• 双击选中数据库,就可以编辑此数据库
• 下次再进入此软件时,通过双击完成连接、编辑操作
数据库操作
• 在连接的名称上右击,选择“新建数据库”,弹出窗口,并按提示填写
image.png

• 在数据库上右击,选择“删除数据库”可以完成删除操作
表操作
• 当数据库显示为高亮时,表示当前操作此数据库,可以在数据中创建表
• 一个实体对应一张表,用于存储特定结构的数据
• 点击“新建表”,弹出窗口,按提示填写信息
image.png

• 主键的名称一般为id,设置为int型,无符号数,自动增长,非空
• 自动增长表示由mysql系统负责维护这个字段的值,不需要手动维护,所以不用关心这个字段的具体值
• 字符串varchar类型需要设置长度,即最多包含多少个字符
• 点击“添加栏位”,可以添加一个新的字段
• 点击“保存”,为表定义名称
数据操作
• 表创建成功后,可以在右侧看到,双击表打开新窗口,如下图
image.png

• 在此窗口中可以增加、修改、删除数据
逻辑删除
• 对于重要数据,并不希望物理删除,一旦删除,数据无法找回
• 一般对于重要数据,会设置一个isDelete的列,类型为bit,表示逻辑删除
• 大于大量增长的非重要数据,可以进行物理删除
• 数据的重要性,要根据实际开发决定
1.1.6 脚本命令操作
sql语句分为两大类:
1、 dml 对表的数据内容进行增删改查
2、 ddl 除了dml之外
使用命令连接
• 命令操作方式,在工作中使用的更多一些,所以要达到熟练的程度
• 打开终端,运行命令
mysql -hip -uname -ppassword
mysql -uroot -p
回车后输入密码,当前设置的密码为mysql
• 连接成功后如下图
image.png

• 退出登录
quit或exit
• 退出成功后如下图
image.png

• 登录成功后,输入如下命令查看效果
查看版本:select version();
显示当前时间:select now();
• 注意:在语句结尾要使用分号;
远程连接
• 一般在公司开发中,可能会将数据库统一搭建在一台服务器上,所有开发人员共用一个数据库,而不是在自己的电脑中配置一个数据库
• 运行命令
mysql -hip地址 -uroot -p
• -h后面写要连接的主机ip地址
• -u后面写连接的用户名
• -p回车后写密码
数据库操作
• 查看数据库
image.png

• 创建数据库
create database 数据库名 charset=utf8;
image.png

• 删除数据库
drop database 数据库名;
• 切换数据库
use 数据库名;
• 查看当前选择的数据库
select database();
表操作
• 查看当前数据库中所有表
show tables;
• 创建表
auto_increment表示自动增长,只能是数字类型
主键本身是用来唯一标识这一行,没有业务逻辑意义,所以是什么值不重要,只要唯一就行,所以如果是主键不需要修改
create table 表名(列及类型);
如:
create table students(
id int auto_increment primary key,
sname varchar(10) not null
);

• 修改表
alter table 表名 add|modify|drop 列名 类型;
如:
alter table students add birthday datetime;
• 删除表
drop table 表名;
• 查看表结构
desc 表名;
• 更改表名称
rename table 原表名 to 新表名;
• 查看表的创建语句
show create table ‘表名’;
数据操作
• 查询
select * from 表名
• 增加
全列插入:insert into 表名 values(…)
缺省插入:insert into 表名(列1,…) values(值1,…)
同时插入多条数据:insert into 表名 values(…),(…)…;
或insert into 表名(列1,…) values(值1,…),(值1,…)…;
• 主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准
• 修改
update 表名 set 列1=值1,… where 条件
• 删除
delete from 表名 where 条件
• 逻辑删除,本质就是修改操作update
alter table students add isdelete bit default 0;
如果需要删除则
update students isdelete=1 where …;
备份与恢复
 数据备份
• 进入超级管理员
sudo -s
• 运行mysqldump命令
mysqldump –uroot –p 数据库名 > ~/备份文件.sql;
按提示输入mysql的密码

 数据恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值