3. 数据库
3.1概述
-
数据存储
-
人工管理阶段
缺点 : 数据存储量有限,共享处理麻烦,操作容易混乱
-
文件管理阶段 (.txt .doc .xls)
优点 : 数据可以长期保存,可以存储大量的数据,使用简单。
缺点 : 数据一致性差,数据查找修改不方便,数据冗余度可能比较大。
-
数据库管理阶段
优点 : 数据组织结构化降低了冗余度,提高了增删改查的效率,容易扩展,方便程序调用处理
缺点 : 需要使用sql 或者其他特定的语句,相对比较专业
-
数据库应用领域
数据库的应用领域几乎涉及到了需要数据管理的方方面面,融机构、游戏网站、购物网站、论坛网站 ... ...都需要数据库进行数据存储管理。
-
基本概念
-
数据库 : 按照数据一定结构,存储管理数据的仓库。数据库是在数据库管理系统管理和控制下,在一定介质上的数据集合。
-
数据库管理系统 :管理数据库的软件,用于建立和维护数据库。
关系型数据库和非关系型数据库
关系型: 采用关系模型(如二维表)来组织数据结构的数据库 ,如Oracle 、SQL_Server、 MySQL
非关系型: 不采用关系模型组织数据结构的数据库,如:MongoDB、Redis
3.2 MySQL
1996年,MySQL 1.0发布,作者Monty Widenius, 为一个叫TcX的公司打工,当时只是内部发布。到了96年10月,MySQL 3.11.1发布了,一个月后,Linux版本出现了。真正的MySQL关系型数据库于1998年1月发行第一个版本。MySQL是个开源数据库,后来瑞典有了专门的MySQL开发公司,将该数据库发展壮大,在之后被Sun收购,Sun又被Oracle收购。
官网地址:MySQL
-
MySQL特点
-
是开源数据库,使用C和C++编写
-
能够工作在众多不同的平台上
-
提供了用于C、C++、Python、Java、Perl、PHP、Ruby众多语言的API
-
存储结构优良,运行速度快
-
功能全面丰富
-
-
MySQL安装
-
Ubuntu安装MySQL服务
-
终端执行: sudo apt install mysql-server
-
配置文件:/etc/mysql
-
数据库存储目录 :/var/lib/mysql(root权限才能看,数据无价)
-
-
Windows安装MySQL
-
下载MySQL安装包(windows) MySQL :: Download MySQL Installer
-
直接运行安装文件安装
-
-
-
启动和连接MySQL服务(linux启动它也跟着启动)
-
服务端启动
-
查看MySQL状态 : sudo service mysql status
-
启动/停止/重启服务:sudo service mysql start/stop/restart
-
-
连接数据库(前提是服务器启动了)
mysql -h 主机地址 -u 用户名(mysql的root) -p
注意:
-
回车后输入数据库密码 (我们设置的是123456)
-
如果链接自己主机数据库可省略 -h 主机地址 选项(这里学习就不远程连接了)
-
-
关闭连接
ctrl+D 或者 exit ctrl+l 清屏操作
-
MySQL数据库结构
-
数据元素 --> 记录 -->数据表 --> 数据库
-
-
基本概念解析
-
数据表(table) : 存放数据的表格
-
字段(column): 每个列,用来表示该列数据的含义
-
记录(row): 每个行,表示一组完整的数据
-
-
-
3.3 SQL语言
-
什么是SQL
-
结构化查询语言(Structured Query Language),一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
-
SQL语言特点
-
SQL语言基本上独立于数据库本身
-
各种不同的数据库对SQL语言的支持与标准存在着细微的不同
-
每条命令以 ; 结尾
-
SQL命令(除了数据库名和表名)关键字和字符串可以不区分字母大小写
3.4 数据库管理
-
查看已有库
-
show databases;
-
创建库
-
create database 库名 [character set utf8];
说明:中括号表示选填,如果数据库要存中文数据,就需要写character set utf8
e.g. 创建stu数据库,编码为utf8 create database stu character set utf8; 或者 create database stu charset=utf8;
注意:库名的命名
-
数字、字母、下划线,但不能使用纯数字
-
库名区分字母大小写
-
不要使用特殊字符和mysql关键字
-
命令输入错误的话 ctrl+c 再enter即可以重新输入命令
-
-
切换库
-
use 库名;
e.g. 使用stu数据库 use stu;
-
查看当前在用的所在库
-
select database();
-
删除库
-
drop database 库名;
e.g. 删除test数据库 drop database test;
-
3.5 数据表管理
-
基本思考过程
-
确定存储内容
-
明确字段构成
-
确定字段数据类型
-
-
3.5.1 基础数据类型
-
数字类型:
-
整数类型:INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
-
浮点类型:FLOAT(精确到小数点38位),DOUBLE(小数点后308位),DECIMAL
-
比特值类型:BIT
-
-
注意:
对于准确性要求比较高的东西,比如money,用decimal类型减少存储误差。声明语法是DECIMAL(M,D)。M是数字的最大数字位数,D是小数点右侧数字的位数。比如 DECIMAL(6,2)最多存6位数字,小数点后占2位,取值范围-9999.99到9999.99。
比特值类型指0,1值表达2种情况,如真,假 大小一个字节
-
字符串类型:
-
普通字符串: CHAR,VARCHAR
-
存储文本(也是字符串):TEXT
-
存储二进制数据: BLOB
-
存储选项型数据:ENUM,SET
-
注意:
-
char:定长,即指定存储字节数后,无论实际存储了多少字节数据,最终都占指定的字节大小。默认只能存1字节数据。存取效率高。如果想存入10字节,则char(10)
-
varchar:不定长,效率偏低 ,但是节省空间,实际占用空间根据实际存储数据大小而定。必须要指定存储大小 varchar(50)
-
enum枚举类型用来存储给出的多个值中的一个值,即单选,enum('A','B','C')
-
set用来存储给出的多个值中一个或多个值,即多选,set('A','B','C')
-
blob存储图片,音频,视频等二进制,text存储文本例如备注,评论,文章等等。
3.5.2 表的基本操作
-
创建表
create table 表名(字段名 数据类型 约束,字段名 数据类型 约束,...字段名 数据类型 约束);
注意:约束是可选项,可以不写。
-
字段约束
-
如果你想设置数字为无符号则加上 UNSIGNED
-
如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
-
DEFAULT 表示设置一个字段的默认值
-
COMMENT 增加字段说明,相当于注释
-
AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加1。
-
PRIMARY KEY 关键字用于定义列为主键。主键的值不能重复,且不能为空。
-
e.g. 创建班级表 create table class (id int primary key auto_increment,name varchar(32) not null,age tinyint unsigned not null,sex enum('w','m'),score float default 0.0); e.g. 创建兴趣班表 create table hobby (id int primary key auto_increment,name varchar(32) not null,hobby set('sing','dance','draw'),level char not null,price decimal(6,2),remark text);
-
查看数据表
show tables;
-
查看表结构
desc 表名;
-
查看数据表创建语句信息
show create table 表名;
-
删除表
drop table 表名;
3.6 表数据基本操作
3.6.1 插入(insert)
insert into 表名 values(值1,值2...),(值1,值2...),...;这个方式每个记录里面的所有元素的必须填写 insert into 表名 (字段1,...) values (值1,值2...),...;选择字段插入,在有的字段允许不插入情况下 e.g. insert into class values (2,'Baron',10,'m',91),(3,'Jame',9,'m',90); insert into class (name,age,sex,score) values ('Lucy',17,'w',81);
3.6.2 基础查询(select)
select * from 表名 [where 条件]; 其中*代表所有字段 select 字段1,字段2 from 表名 [where 条件]; e.g. select * from class; select name,age from class;
3.6.3 where子句
where子句在sql语句中扮演了重要角色,主要通过一定的运算条件进行数据的筛选,在查询,删除,修改中都有使用。
-
算数运算符
e.g. select * from class_1 where age % 2 = 0;
-
比较运算符
e.g. select * from class where age > 8; select * from class where age between 8 and 10; select * from class where age in (8,9); select * from class where score is null; select * from class where score = null;#报错
-
逻辑运算符
e.g. select * from class where sex='m' and age>9;编辑
--练习01 --1. 创建一个数据库 books 使用utf8格式 create database books charset=utf8; use books;
--2. 在该中数据库中创建数据表 book 字段如下 -- id bname author price press comment create table book1 ( id int primary key auto_increment, bname varchar(50) not null, author varchar(30), price float, press varchar(128), comment text );
--3. 在该表中插入若干数据 >=8条 -- 出版社 : 中国文学出版社 机械工业出版社 -- 人民教育出版社 .... -- 价格 : 30 -- 120
insert into book1 (bname,author,press,price,comment) values ("边城","沈从文","机械工业出版社",36,"小城故事多"), ("骆驼祥子","老舍","机械工业出版社",43,"你是祥子么?"), ("茶馆","老舍","中国文学出版社",55,"老北京"), ("呐喊","鲁迅","人民教育出版社",71,"最后的声音"), ("朝花夕拾","鲁迅","中国文学出版社",53,"好时光"), ("围城","钱钟书","中国文学出版社",44,"你心中的围城是什么");
insert into book1 (bname,author,press,price) values ("林家铺子","茅盾","机械工业出版社",51), ("巨人传","忘了","人民教育出版社",47);
练习02:基础查询练习
--1. 查找30多元的图书 select * from book where price >= 30 and price<40;
--2.查找人民教育出版社出版的图书 select * from book where press="人民教育出版社";
--3.查找老舍写的,中国文学出版社出版的图书 select * from book where author="老舍" and press="中国文学出版社";
--4.查找备注不为空的图书 select * from book where comment is not null;
--5.查找价格超过60元的图书,只看书名和价格 select bname,price from book where price>60;
--6.查找鲁迅写的或者茅盾写的图书 select * from book where author in ("鲁迅","茅盾");
-
3.6.4 更新(即修改)表记录(update)
update 表名 set 字段1=值1,字段2=值2,... where 条件; 注意:update语句后如果不加where条件,所有记录全部更新(修改),例如年龄普增。
e.g. update class set age=11 where name='Abby';
3.6.5 删除表记录(delete)
delete from 表名 where 条件; 注意:delete语句后如果不加where条件,所有记录全部清空,即清空整个表
e.g. delete from class where name='Abby';
3.6.6 表字段的操作(alter)---表结构修改
语法 :alter table 表名 执行动作; 执行动作: * 添加字段(add) alter table 表名 add 字段名 数据类型;(默认增加到最后) alter table 表名 add 字段名 数据类型 first;(指定增加到第一个) alter table 表名 add 字段名 数据类型 after 字段名; * 删除字段(drop) alter table 表名 drop 字段名; * 修改数据类型(modify) alter table 表名 modify 字段名 新数据类型; * 修改字段名(change) alter table 表名 change 旧字段名 新字段名 新数据类型;
e.g. alter table hobby add tel char(11) after name; alter table hobby drop tel ; alter table hobby modify tel char(16); alter table hobby change tel phone char(16);
-
5.txt
前情回顾
-
正则表达式:根据规则去匹配字符串
-
元字符
. * + ? {} () [] \d \w \s \b ^
-
规则
特殊字符的匹配 : $ --> $ ---> +
贪婪和非贪婪 : * --> *?
分组 : ()
-
re模块
findall() search() match() split() sub() finditer()
match对象 --> span() group()
练习01
-
创建一个数据库 books 使用utf8格式
-
在该中数据库中创建数据表 book 字段如下 id bname author price press comment
-
在该表中插入若干数据 >=8条
出版社 : 中国文学出版社 机械工业出版社 人民教育出版社 .... 价格 : 30 -- 120
02查询练习
-
查找30多元的图书 2.查找人民教育出版社出版的图书 3.查找老舍写的,中国文学出版社出版的图书 4.查找备注不为空的图书 5.查找价格超过60元的图书,只看书名和价格 6.查找鲁迅写的或者茅盾写的图书
作业 : 1. 今天的语句总结使用一遍
-
练习没做出来的自己写出来
-
mysql01.sql
--创建数据表 create table class( id int primary key auto_increment, name char(50) not null, age tinyint unsigned not null, sex enum("m","w","o"), score float default 0 );
create table hobby2 ( id int primary key auto_increment, name varchar(50) not null, hobby set("sing","dance","draw"), level char comment "A ,B or C", price decimal(7,2), remark text comment "备注信息" );
--class 创建语句 show create table class;
--数据插入操作 --必须每个字段的元素都写上 insert into class2 values (1,"Lily","w",18,76.5), (2,"Tom","m",17,88), (3,"Emma","w",18,91);
--选择字段插入,not null字段必须写上 insert into class2 (name,age,score) values ("James",19,65), ("Abby",19,77), ("Alex",18,92), ("Eva",17,74);
insert into class2 (name,age,sex) values ("Lucy",19,"w");
--练习 insert into hobby2 (name,hobby,level,price,remark) values ("Joy","sing,dance","A",56000,"good"),--逗号隔开表示双选 ("Emma","sing","B",26000.888,"perfect"), ("Lily","draw","C",9800.99,"beatiful");
insert into hobby2 (name,hobby,price) values ("Ben","dance,draw",40000), ("Tom","dance",12000), ("Levi","draw",9900);