Python-Level2-day05:数据库概述;数据库管理语句;数据表管理语句;表数据基本操作增删改查;

3. 数据库

3.1概述

  • 数据存储

  1. 人工管理阶段

    缺点 : 数据存储量有限,共享处理麻烦,操作容易混乱

  2. 文件管理阶段 (.txt .doc .xls)

    优点 : 数据可以长期保存,可以存储大量的数据,使用简单。

    缺点 : 数据一致性差,数据查找修改不方便,数据冗余度可能比较大。

  3. 数据库管理阶段

    优点 : 数据组织结构化降低了冗余度,提高了增删改查的效率,容易扩展,方便程序调用处理

    缺点 : 需要使用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特点

    1. 是开源数据库,使用C和C++编写

    2. 能够工作在众多不同的平台上

    3. 提供了用于C、C++、Python、Java、Perl、PHP、Ruby众多语言的API

    4. 存储结构优良,运行速度快

    5. 功能全面丰富

  • MySQL安装

    • Ubuntu安装MySQL服务

      • 终端执行: sudo apt install mysql-server

      • 配置文件:/etc/mysql

      • 数据库存储目录 :/var/lib/mysql(root权限才能看,数据无价)

    • Windows安装MySQL

  • 启动和连接MySQL服务(linux启动它也跟着启动)

    • 服务端启动

      • 查看MySQL状态 : sudo service mysql status

      • 启动/停止/重启服务:sudo service mysql start/stop/restart

    • 连接数据库(前提是服务器启动了)

      mysql    -h  主机地址   -u  用户名(mysql的root)    -p 

      注意:

      1. 回车后输入数据库密码 (我们设置的是123456)

      2. 如果链接自己主机数据库可省略 -h 主机地址 选项(这里学习就不远程连接了)

    • 关闭连接

      ctrl+D 或者 exit
      ctrl+l 清屏操作
    • MySQL数据库结构

      • 数据元素 --> 记录 -->数据表 --> 数据库703f5fc5aa3a4a26acf2061986ed7819.png

    • 基本概念解析

      • 数据表(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;

      注意:库名的命名

      1. 数字、字母、下划线,但不能使用纯数字

      2. 库名区分字母大小写

      3. 不要使用特殊字符和mysql关键字

      4. 命令输入错误的话 ctrl+c 再enter即可以重新输入命令

    • 切换库

    • use 库名;

      e.g. 使用stu数据库
      use stu;
    • 查看当前在用的所在库

    • select database();

    • 删除库

    • drop database 库名;

      e.g. 删除test数据库
      drop database test;
    • 3.5 数据表管理

    • 基本思考过程

      1. 确定存储内容

      2. 明确字段构成

      3. 确定字段数据类型

    • 3.5.1 基础数据类型

    • 数字类型:

      • 整数类型:INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT

      • 浮点类型:FLOAT(精确到小数点38位),DOUBLE(小数点后308位),DECIMAL

      • 比特值类型:BIT

    588edef8f00d42458fd0c3153ff27bae.png

注意:

  1. 对于准确性要求比较高的东西,比如money,用decimal类型减少存储误差。声明语法是DECIMAL(M,D)。M是数字的最大数字位数,D是小数点右侧数字的位数。比如 DECIMAL(6,2)最多存6位数字,小数点后占2位,取值范围-9999.99到9999.99。

  2. 比特值类型指0,1值表达2种情况,如真,假 大小一个字节


  • 字符串类型:

    • 普通字符串: CHAR,VARCHAR

    • 存储文本(也是字符串):TEXT

    • 存储二进制数据: BLOB

    • 存储选项型数据:ENUM,SET33fdd90a33164d7096ddddd09556106d.png

注意:

  1. char:定长,即指定存储字节数后,无论实际存储了多少字节数据,最终都占指定的字节大小。默认只能存1字节数据。存取效率高。如果想存入10字节,则char(10)

  2. varchar:不定长,效率偏低 ,但是节省空间,实际占用空间根据实际存储数据大小而定。必须要指定存储大小 varchar(50)

  3. enum枚举类型用来存储给出的多个值中的一个值,即单选,enum('A','B','C')

  4. set用来存储给出的多个值中一个或多个值,即多选,set('A','B','C')

  5. 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语句中扮演了重要角色,主要通过一定的运算条件进行数据的筛选,在查询,删除,修改中都有使用。

  • 算数运算符

2f5bbbce49054034b5a9aa07d641e13d.png

e.g.
select * from class_1 where age % 2 = 0;
  • 比较运算符

e948afc523b2498c9e4e670a05f76ae1.png

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;#报错
  • 逻辑运算符60229674f3234152a02fd87d5fc561e8.png

    e.g. select * from class where sex='m' and age>9;2dd6dc00b22740ee86f2c206137f80e7.png​编辑

    --练习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


    前情回顾

    1. 正则表达式:根据规则去匹配字符串

    2. 元字符

      . * + ? {} () [] \d \w \s \b ^

    3. 规则

      特殊字符的匹配 : $ --> $ ---> +

      贪婪和非贪婪 : * --> *?

      分组 : ()

    4. re模块

      findall() search() match() split() sub() finditer()

      match对象 --> span() group()

    练习01

    1. 创建一个数据库 books 使用utf8格式

    2. 在该中数据库中创建数据表 book 字段如下 id bname author price press comment

    3. 在该表中插入若干数据 >=8条

      出版社 : 中国文学出版社 机械工业出版社 人民教育出版社 .... 价格 : 30 -- 120

    02查询练习

    1. 查找30多元的图书 2.查找人民教育出版社出版的图书  3.查找老舍写的,中国文学出版社出版的图书  4.查找备注不为空的图书 5.查找价格超过60元的图书,只看书名和价格 6.查找鲁迅写的或者茅盾写的图书

    作业 : 1. 今天的语句总结使用一遍

    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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dpq666dpq666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值