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]