爆福的丫头 发表于 2021-9-2 13:06:26

Python学习日志15 - 初识数据库

Python学习日志

RBHGO的主页欢迎关注
温馨提示:创作不易,如有转载,注明出处,感谢共同~
目录


文章目录



[*]

[*]Python学习日志
[*]

[*]目录
[*]Python学习日志15课 - 初识数据库
[*]

[*]数据库基本操纵
[*]

[*]登录(进入)`Mysql`
[*]查看数据库:
[*]创建数据库:
[*]删除数据库:
[*]获取数据库帮助:
[*]切换数据库
[*]数据库中的数据类型:
   
[*]表的基本操纵
[*]

[*]查看数据库中的表:
[*]创建二维表
[*]显示表结构:
[*]删除表:
[*]更新表:
[*]修改表:
[*]设计表:
[*]查询(搜索)表:
   
[*]其他内容
[*]

[*]范式理论
[*]数据的完备性和一致性
   
[*]总结
   



Python学习日志15课 - 初识数据库

数据库∶数据的堆栈(集散地),它办理了数据长期化和数据管理的问题。
长期化—>将数据从内存转移到硬盘(可以长久保存数据的存储介质)。
学习数据库,首先当然是正确安装、配置数据库环境,再谈然后。本文使用的是win10下的MySQL8的版本,如果您下载配置完成,给您的超级管理员账号设好了密码,那就让我们开始吧。


[*] 关系型数据库(本文以MySQL为例):
关系数据库特点。

[*] 理论基础:关系代数。
[*] 具体表象:用二维表(有行和列)组织数据。
[*] 编程语言:结构化查询语言(SQL)

[*] 编程语言:SQL -> Structured Query Language -> 结构化查询语言
SQL是一种专门用来与数据库通信的语言(不分大小写)

我们通常可以将SQL语句分为四类:
   

[*]DDL (数据界说语言) —> 创建、删除、修改各种对象 —> create / drop / alter
[*]DML (数据操纵语言) —> 插入、删除、更新(修改)数据 —> insert / delete / update
[*]DQL (数据查询语言) —> 检索(查询)数据 —> select
[*]DCL (数据控制语言) —> 授予或者召回用户权限 —> grant / revoke

[*] 非关系型数据库:

[*]NoSQL —> No SQL —> No, SQL —> Not Only SQL
[*]NewSQL —> 保存数据的方式可能完全不同于传统的关系型数据库,
但是允许使用关系型数据库的编程语言操纵/获取数据。

数据库基本操纵

登录(进入)Mysql

​ 1.PowerShell: mysql -u root -p —> 输入密码


[*]进入指定数据库 mysql -u 用户名 -h Ip地点 -p —> 输入密码
[*]也就是说连接自己的数据库还可以写成:
mysql -u root -h 127.0.0.1(localhost) -p —> 密码
​ 2.MySQL Command Line Client-Unicode: 直接密码进入
查看数据库:

-- 查看所有的数据库
show databases;

-- 查看所有字符集(编码方式)
show character set;

-- 查看所有的校对规则(排序)
show collation;

-- 查看所有的引擎
show engines; 创建数据库:

创建数据库时,我们通过default charset utf8指定了数据库默认使用的字符集,保举使用该字符集,因为utf8能够支持国际化编码。如果将来数据库中用到的字符可能包括类似于Emoji这样的图片字符,也可以将默认字符集设定为utf8mb4(最大4字节的utf-8编码)。
create database database_name default charset utf8mb4; 删除数据库:

drop database if exists database_name; 温馨提示:删库之前请三思而后行!!!
获取数据库帮助:

询问数据库操纵的操纵:问题前加 ?
-- 查看show命令的帮助
        ? show

-- 查看数据库的类型
        ? data types

-- 数据类型bigint的怎么使用,范围
        ? bigint

-- 浮点数据类型deciaml
        ? deciaml 切换数据库

切换到要操纵的数据库(执行操纵语句之前都得先切换到要操纵的数据库中):
use database_name; 温馨提示:前期最容易忘记的就是执行切换到要操纵的数据库中,以及语句末端的;号,直到;之前的语句换行也没关系,遇到分号才算是一段SQL语句的结束。
数据库中的数据类型:

创建好一个数据库,为的是长期化数据,存入数据是肯定不是直接的入库就完事了。我们需要在数据库中创建二维表,将特定的数据放在相应的表中,而创建表的时间,我们需要给表的每一列都给定数据类型,以免数据录入的错误,避免不必要的麻烦,所以记住数据类型很重要。
   整数:int(integer) / bigint / smallint / tinyint —> ussigned(无符号 -> 非负)   int范围 ---> -2^31 —— 2^31 - 1 ---> ussigned 0 —— 2^32 - 1   bigint范围 ---> -2^63 —— 2^63 - 1 ---> ussigned 0 —— 2^64 - 1   smallint范围 ---> -2^15 —— 2^15 - 1 ---> ussigned 0 —— 2^16 - 1(65535)   tinyint范围 ---> -2^7 —— 2^7 - 1 ---> ussigned 0 —— 2^8 - 1(255)   小数:float / double / decimal   建议使用   decimal ---> deciaml(10,2) —> 共有10位保留2位小数   时间日期:time / date / datetime / timestamp(时间戳)
   字符串:char / varchar 大对象:longtext / longblob   char / varchar   longtext / longblob(二进制大对象) —> 4G —> 放资源路径(URL)   布尔型:boolean   boolean ---> tinyint(1) —> 0 / 1   罗列(Mysql独有):emum
信赖大家在下载MySQL数据库的时间,都下载了MySQL自带的功能强盛的Workbench;没下也没关系,回到安装程序点击界面中Quick Action下蓝色的Reconfigure把它安装一下就行,在Workbench下写SQL语句比在命令行中舒服许多(就想我们写Python在Pycharm中写一样)注释用--。
表的基本操纵

DDL(数据界说语言 与 DML(数据操纵语言)
查看数据库中的表:

show tables; 创建二维表

关键字create
以下的创建表的SQL语句用学生表为例
create table tb_student
    (
      stu_id int unsigned not null comment '学号',
      std_name varchar(10) not null comment '姓名',
      stu_sex char(1) default 'M' not null comment '性别',
      stu_birth date comment '出生日期',
      primary key (stu_id)
    ) engine=innodb;

[*]主键(primary key):能够唯一确定一条记录的列
[*]外键(foreign key):外来的主键(其他表的主键)
显示表结构:

desc tb_student; 删除表:

关键字delete,drop
   1.drop table `tb_student`;(一般不这样使用)
   
   2.delete from `tb_student` where `stu_id`=3923;(删除表中的指定行,带where条件)
   
   3.truncate table `tb_student`;(截断不可修复,使用请慎重,别说是看我这里知道的) 更新表:

关键字update
更新表一定记得带where条件,否则会对全表进行跟新和删表一样是需要三思而后行的操纵。
update `tb_student` set `stu_addr`='四川成都',`col_id`=2
      where `stu_id`=3755; 修改表:

关键字alter
添加一个列:
    alter table `tb_student` add column `stu_address` varchar(100);

删除一个列:
    alter table `tb_student` drop column `stu_sex`;
    alter table `tb_student` add column `stu_sex` boolean default 1;

修改一个列(modify -> 只改类型,change -> 修改类名):
    alter table `tb_student` modify column `stu_sex` char(1) default 'M';
    alter table `tb_student` change column `stu_sex` `stu_gender` char(1) default 'F';

添加额外的约束条件:
    - 添加check约束,学生的性别只为'M'或'F':
      alter table `tb_student` add constraint `ck_student_gender`
      check (`stu_gender`='M' or `stu_gender`='F');

    - 添加唯一性约束,学院的名字是具有唯一性的:
      alter table `tb_college` add constraint `uk_college_name`
      Unique (`col_name`);
      
删除约束:
    alter table `tb_student` drop constraint `ck_student_gender`; 插入数据
关键字insert
向学生表写入数据:
    insert into `tb_student` values (3016, 'RBHGO', '1999-11-1', '慕尼黑', 'M');
    insert into `tb_student` values (1001, '金轮', '1983-8-13', '芜湖', 'M');

一次写入多条(可以只录入想录入的数据,顺序在此可以变换):
    insert into `tb_student` (`stu_name`, `stu_id`, `stu_gender`) values
    ('小六子', '1006', 'M'),
    ('二麻子', '1002', default),
    ('九妹', '1009', 'F'); 根据表的从属关系(关系的重数),在多的一方建立具有约束条件的列(列的类型要保持一致):
    alter table tb_student add column col_id int unsigned;
    alter table tb_student add constraint fk_student_col_id foreign key (col_id)
      references tb_college (col_id); 温馨提示:建立约束可以直接在建表时就写,但是让建表语句看起来更加臃肿,所以个人更喜欢在修改表时操纵。
设计表:

随手建一个表可以不消设计,但是在大体量的项目中,如果我们想将我们的表建得又快又好,提前绘图;这样我们就可以更加直观地建立数据库中需要的表,需要注意的就是表与表之间是否具有的关系。(当然Workbench支持绘图的这项功能)


[*] ER图 —> Entity Relationship Diagram
实体:矩形框 —> 表
属性:椭圆框 —> 列(字段)
关系:菱形框
~ 关系的重数:一对一(1:1)、一对多(1:n)、多对多(m:n 一般需要中间表来进行维护)
[*] EER图(物理模型)—> Extended ER图
弄好EER图通过正向工程(forward engineer) —> 直接生成表或者建表的SQL语句,
写好建表的SQL语句通过逆向工程(reverse engineer) —> 生成EER图
查询(搜索)表:

下面查询SQL语句的基本流程,也是我在分享数据库知识的时间想重点分享的内容,如果您有爱好的话,请关注我的下一篇文章。
        select ..., ..., ... as ..., ... as ...
    from ... where ... and... or...
    group by .....
    having ......
    order by ...... asc / desc
    limit ... offset ... 其他内容

范式理论

范式理论是设计关系型数据库中二维表的指导头脑。

[*]第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。
[*]第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。
[*]第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。
数据的完备性和一致性



[*]完备性:

[*]实体完备性 —> 主键 / 唯一索引
[*]参照完备性 —> 外键
[*]领域完备性—>数据类型、类型长度、非空约束、默认值约束、检查约束

[*]一致性:事务 —> ACID特性 / 事务隔离级别

[*]开启:start transaction / begin
[*]提交:commit
[*]回滚:rollback

总结

MySQL 最早是由瑞典的 MySQL AB 公司开辟的一个开放源码的关系数据库管理系统,该公司于2008年被昇阳微系统公司(Sun Microsystems)收购。在2009年,甲骨文公司(Oracle)收购昇阳微系统公司,因此 MySQL 目前也是 Oracle 旗下产物。
MySQL 在过去由于性能高、本钱低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用于中小型网站开辟。
学习数据库的知识是很有必要的它的出现就是因为办理以下问题
(1).实现数据共享,数据实现会合控制。 (2).减少数据的冗余度,并且容易扩充。 (3).数据的独立性。 (4).整体数据结构化。 (5).数据一致性和可维护性,以确保数据的安全性和可靠性,以及故障恢复。
在我的分享中,以SQL语句查询为主,朝向数据分析方向,如果您有爱好请关注我。
感谢学习陪同,您的点赞,批评就是我更新的动力

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Python学习日志15 - 初识数据库