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

Python学习日志

RBHGO的主页欢迎关注

温馨提示:创作不易,如有转载,注明出处,感谢配合~

目录

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

数据库∶数据的仓库(集散地),它解决了数据持久化数据管理的问题。

持久化—>将数据从内存转移到硬盘(可以长久保存数据的存储介质)。

学习数据库,首先当然是正确安装、配置数据库环境,再谈然后。本文使用的是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: 直接密码进入

退出MySQL
	QUIT(quit)
查看数据库:
-- 查看所有的数据库 
 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 ...
其他内容
范式理论

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

  1. 第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。
  2. 第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。
  3. 第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。
数据的完整性和一致性
  • 完整性:
    • 实体完整性 —> 主键 / 唯一索引
    • 参照完整性 —> 外键
    • 领域完整性—>数据类型、类型长度、非空约束、默认值约束、检查约束
  • 一致性:事务 —> ACID特性 / 事务隔离级别
    • 开启:start transaction / begin
    • 提交:commit
    • 回滚:rollback
总结

MySQL 最早是由瑞典的 MySQL AB 公司开发的一个开放源码的关系数据库管理系统,该公司于2008年被昇阳微系统公司(Sun Microsystems)收购。在2009年,甲骨文公司(Oracle)收购昇阳微系统公司,因此 MySQL 目前也是 Oracle 旗下产品。

MySQL 在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用于中小型网站开发。

学习数据库的知识是很有必要的它的出现就是因为解决以下问题

(1).实现数据共享,数据实现集中控制。 (2).减少数据的冗余度,并且容易扩充。 (3).数据的独立性。 (4).整体数据结构化。 (5).数据一致性和可维护性,以确保数据的安全性和可靠性,以及故障恢复。

在我的分享中,以SQL语句查询为主,朝向数据分析方向,如果您有兴趣请关注我。

感谢学习陪伴,您的点赞,评论就是我更新的动力

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值