一、数据库概念及作用
1.1 数据库概念
数据库就是以**一定格式进行组织的数据的集合。**通俗来看数据库就是用户计算机上的一些具有特殊格式的数据文件的集合。
普通文件:我可以存数据
数据库:我也可以存数据
问题:既然数据库本身就是一种文件,那用户可以不使用数据库而使用普通文件来进行数据的存储吗?
从理论上是可以的,但是相比于普通文件,数据库有以下特点:
- 持久化存储
- 读写速度极高
- 保证数据的有效性
- 对程序支持性非常好,容易扩展
1.2 数据库的作用
比如用户在网站上能够看到微博以及其相关评论,能在购物网站上看到商品的详细描述以及图片等等,这些数据都是来自于后台的数据库,总之数据库就是用来存储数据的。
知识要点:
数据库就是用户计算机上的一些具有特殊格式的数据文件的集合.数据库的特点:
1.持久化存储
2.读写速度极高
3.保证数据的有效性
4.对程序支持性非常好,容易扩展
二、数据库分类及特点
数据库分类
- 关系型数据库
- 非关系型数据库
2.1 关系型数据库
关系型数据库,是指采用了关系模型来组织数据的数据库,简单来说,这种关系模型指的就是二维表格模型.
示例:
编号 | 姓名 | 性别 | 年龄 | 电话 | 家庭住址 |
---|---|---|---|---|---|
1 | 孙悟空 | 男 | 100 | 188 8888 8888 | 花果山1号洞 |
2 | 白骨精 | 女 | 1000 | 166 6666 6666 | 盘丝2号洞 |
3 | 猪八戒 | 男 | 18 | 199 9999 9999 | 高老庄3号洞 |
常见的关系型数据库:
- Mysql :Web时代使用最广泛的关系型数据库。
- ORACLE:银行,电信等项目中使用到。
- SQLite:轻量级数据库,主要应用在移动平台。
- SQLServer:在微软项目中使用。
MySQL使用了双授权政策,它分为社区版和商业版,由于其体积小,速度快,总体使用成本低,尤其是开源,一般中小型网站的开发都选择MySQL作为网站数据库。
2.2 非关系型数据库
非关系型数据库,又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL,对NoSQL 最普遍的定义是“非关联型的”,强调Key-Value 的方式存储。
常见的比如说:mongoDB、redis
本部分主要讨论关系型数据库,对于非关系型数据库会在后面的课程学习到。
知识要点:
-
数据库分类:
关系型数据库
非关系型数据库 -
关系型数据库特点:
使用二维表格这种形式存储数据 -
非关系型数据库特点:
强调Key-Value 的方式存储数据
三、数据库管理系统
3.1数据库管理系统介绍
数据库管理系统( Database Management System,简称DBMS)是为管理数据库而设计的软件系统。
包括三大部分构成。
- 数据库文件集合:主要是一系列的数据文件,作用是存储数据。
- 数据库服务器:主要负责对数据文件以及文件中的数据进行管理。
- 数据库客户端:主要负责和服务端通信,向服务端传输数据或者从服务端获取数据。
3.2 SQL语句
数据库客户端和数据库服务端怎么通讯呢?
数据库客户端通过“特殊的语言”告诉服务端,客户端想要做什么. 这个专门的语言就是 SQL语句。
所以我们之后学习数据库的重点就在于如何编写sql语句。
SQL(Structured Query Language)是结构化查询语言,是一种用来操作RDBMS的数据库语言。当前几乎所有关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库。
那么什么是RDBMS呢?
Relational Database Management System 所谓的关系型数据库管理系统RDBMS,是专门用来管理关系型数据库的系统.
3.3 关系型数据库中核心元素
主键:唯一标识一行记录的字段 ------编号这一列的数据
字段:一列数据类型相同的数据 (数据列) 表头 优先定义------姓名-性别-年龄-电话-地址 这几列数据
记录:一行记录某个事物的完整信息的数据(数据行) ------编号为1.2.3的这几行数据
编号 | 姓名 | 性别 | 年龄 | 电话 | 地址 |
---|---|---|---|---|---|
1 | 孙悟空 | 男 | 100 | 188 8888 8888 | 花果山1号洞 |
2 | 白骨精 | 女 | 1000 | 166 6666 6666 | 盘丝2号洞 |
3 | 猪八戒 | 男 | 18 | 199 9999 9999 | 高老庄3号洞 |
数据表:由若干个字段和数据组成
数据库:由若干个数据表组成,一个数据库可以有多张数据表。
知识要点:
RDBMS的组成:
- 数据库客户端
- 数据库服务端
- 数据库文件集合
SQL语句:
- 关系型数据库中客户端和服务端之间通讯的语言
关系型数据库中的核心元素:
- 字段:一列数据类型相同的数据
- 记录:一行记录某个事物的完整信息的数据
- 数据表:有若干字段和记录组成
- 数据库:由若干数据表组成
四、MySQL环境搭建
注意环境变量的添加。
五、MySQL数据类型
5.1 数据类型
Python中也有很多不同的数据类型,不同的数据类型它们的作用就是存放不同的数据。就相当于不同的酒选择不同的容器装一样。
比较常用的数据类型有:int decimal varchar 等等
5.2 整型类型
MySQL中定义数据字段的类型是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
5.3浮点型
float:单精度型,只保证6位有效数字的准确性
double:双精度型,只保证16位有效数字的准确性
decimal:定点数,其中decimal(5,2)代表共5位数字,其中2位是小数,比如:888.88
5.4 字符串
5.4.1 char和varchar的区别
- char:定长字符串儿
- char也叫定长字符串儿,指的是在创建表的时候,char字段占用的磁盘空间的大小就已经固定了。
- 比如说,我们在定义name char(10),代表name字段将占用10个字符的硬盘空间,那么具体多少个字节要看使用的编码格式是什么,如果是utf8编码,那么一个字符占用3个字节,所以char(10)将占用30个字节,无论内容够不够30个字节都占30个字节的空间,例如只存abc三个字符也要占用30个字节空间。
- char也叫定长字符串儿,指的是在创建表的时候,char字段占用的磁盘空间的大小就已经固定了。
- varchar:变长字符串儿
- varchar也叫变长字符串,指的是字段占用磁盘空间的大小并不是固定的,而是由内容决定的,等于内容的实际长度+1个字节(用 \0 表示字符串结束)。
- 比如说,我们在定义name varchar(10),代表最多保存10个字符,如果使用utf8编码,那么最多占用30个字节的空间,但是如果内容不够30个字节,例如内容是abc,那么只占三个字符也就是9个字节再+1,共占10个字节的空间。
- varchar也叫变长字符串,指的是字段占用磁盘空间的大小并不是固定的,而是由内容决定的,等于内容的实际长度+1个字节(用 \0 表示字符串结束)。
5.4.2 text
**注意:**text与char和varchar不同的是,text不可以有默认值,char和varchar允许有默认值。
选择字符串类型的原则:
- varchar:适用于经常变化的字段用
- char:适用于知道固定长度的字符串
- 尽量用varchar
- 超过255字节的只能用varchar或者text,能用varchar的地方不用text
5.5 枚举类型
枚举类型enum,在定义字段时就预告规定好固定的几个值,然后插入记录时值只能在这几个固定好的值中选择一个。
语法定义:
gender enum(‘男’,’女’)
应用场景:
当值是几个固定可选时,比如:性别、星期、月份、表示状态时(比如:是、否)
5.6 时间类型
知识要点:
decimal: 定点数
decimal(5,2)代表共5位数字,其中2位是小数,比如:888.88
char:定长字符串
varchar:变长字符串
char(10) : 不管实际使用, 必然占用10个字符空间
varchar(10): 根据实际使用占用空间
enum: 枚举类型
gender enum(‘男’,’女’), gender的值只能选择其一
六、数据完整性和约束
6.1 数据完整性
数据完整性用于保证数据的正确性。系统在更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件。
6.2 参照完整性
参照完整性属于表间规则。在更新、插入或者删除记录时,如果只改其一,就会影响数据的完整性。如删除表2的某记录后,表1的相应记录未删除,致使这些记录成为孤立记录。
表1:
id | name | age | car |
---|---|---|---|
1 | 老王 | 20 | 101 |
2 | 老李 | 50 | 102 |
表2:
id | car | price |
---|---|---|
101 | 宝马 | 1 000 000 |
102 | 五菱神车 | 20 000 |
6.3 约束
约束类型 | 约束说明 |
---|---|
NOT NULL | 非空约束(设置非空约束,表示该字段下面保存的内容不能为空) |
PRIMARY KEY | 主键约束(唯一性和非空性) |
UNIQUE KEY | 唯一约束(唯一性,可以为空,但是只能有一个) |
DEFAULT | 默认约束(设置该字段下添加数据为空的时候会用设置的默认值填充) |
FOREIGN KEY | 外键约束(需要建立两表间的关系) |
知识要点:
数据完整性用于保证数据的正确性
约束作用是保证数据的完整性和一致性
七、登录和退出数据库命令
7.1 数据库操作基本步骤
- 连接数据库
- 输入用户名和密码
- 输入命令完成对数据库的操作(SQL语句的完成)
- 输入命令对数据库中的表结构和表数据的操作(SQL语句的完成)
- 退出数据库
7.2 连接数据库命令
打开终端,运行命令(系统环境变量里面加入了MySQL的启动路径):
mysql -uroot -p
回车后输入自己设置的密码,我当前设置的密码为qwe123
ps: mysql -uroot -pqwe123 也可以登录
7.3 退出数据库命令
在终端中,运行命令:
quit 和 exit 或 ctrl+d
注意:SQL语句以英文 ; 为结束符
ps: SQL语句不区分大小写
7.4 显示版本和时间命令
select version(); 显示版本
select now(); 显示查看时间
7.5 数据库基本操作命令
show databases; 查看所有数据库 show databases;
select database(); 查看当前使用的数据库 select database();
create database 数据库名 charset=utf8; 创建数据库 create database python charset=utf8
use 数据库名; 使用数据库 use python;
drop database 数据库名; 删除数据库-慎重使用 drop database python;
7.6 数据表基本操作命令
创建数据表命令:
create table 表名(
字段名称 数据类型 可选的约束条件
field1 datatype constraint1,
field2 datatype,
field3 datatype,
…………………………
fieldN datatype,
---- 主键说明可以放在字段中独立说明,也可以放在最后统一说明。
primary key(one or more fields)
);
示例:
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男', '女', '中性','保密'),
cls_id int unsigned default 0
);
Ps:auto_increment表示自动增长
7.7 查看表结构命令
show tables; 查看当前数据库中的所有表
desc 表名; 查看表结构
show create table 表名; 查看表的创建语句--详细过程
在开发过程中不需要频繁的操作表结构,所以该章节的目的就是让我们能够在需要的时候根据这些语法写出符合要求的SQL语句就可以了 .
7.8 数据表结构修改命令
alter table 表名 列名 类型; 添加字段
alter table change 原名 新名 类型及约束; 重命名字段
alter table 表名 modify 列名 类型和约束; 修改字段
alter table 表名 drop 列名; 删除字段
drop table 表名; 删除表
7.9 表数据操作命令
- 添加数据
insert into 表名 values(...); 全列插入:值得顺序与表结构得字段一一对应.
insert into 表名(列1,列2...) values(值1,值2,...); 部分列插入:指的顺序与给出得列顺序对应.
insert into 表名 values(...),(...)......; 一次性插入多条数据.
insert into 表名(列1,列2...) values(值1,值2,...),(值1,值2,...)...; 部分列多行插入数据.
- 修改查询数据
select * from 表名; 查询所有列
select 列1,列2,列3... from 表名; 查询指定列数据
update 表名 set 列1=值1,列2=值2,... where 条件. 修改数据
- 删除数据
delete from 表名 where 条件; 删除数据