继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python全栈开发当中MySQL是一个难点,今天一文带你掌握

慕村9548890
关注TA
已关注
手记 1260
粉丝 227
获赞 990

No.1 数据库概念

什么是数据库?

数据库就是一种特殊的文件,内部存储着需要的数据

RDBMS

所谓关系数据库,是建立在关系模型基础的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

SQL

SQL是结构化语言,是一种用来操作关系数据库的数据库语言。

webp

MySQL

MySQL是一个关系数据库管理系统

特点:

使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性

支持多种操作系统,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等

为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等

支持多线程,充分利用CPU资源

优化的SQL查询算法,有效地提高查询速度

提供多语言支持,常见的编码如GB2312、BIG5、UTF8

提供TCP/IP、ODBC和JDBC等多种数据库连接途径

提供用于管理、检查、优化数据库操作的管理工具

大型的数据库。可以处理拥有上千万条记录的大型数据库

支持多种存储引擎

MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库

MySQL使用标准的SQL数据语言形式

Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统

在线DDL更改功能

复制全局事务标识

复制无崩溃从机

复制多线程从机

No.2 数据完整性

一个数据库就是一个完整的业务单元,可以包含多张表,在表中为了更加精准的存储数据,保证数据的正确性,可以在创建表的时候,为表增加一些强制性的验证,包括数据类型、约束

数据类型

整数:int,bit

小数:decimal

字符串:varchar,char

日期时间: date, time, datetime

枚举类型(enum)

decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位

char表示固定长度的字符串,如char(3),如果填充ab时会补一个空格

varchar表示可变长度的字符串,如varchar(3),填充ab时就会存储ab

字符串text表示存储大文本,当字符大于4000时推荐使用

对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径

webp

webp

日期时间类型

webp

约束

主键primary key:物理上存储的顺序

非空not null:此字段不允许填写空值

惟一unique:此字段的值不允许重复

默认default:当不填写此值时会使用默认值,如果填写时以填写为准

外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常

No.3 命令行脚本

数据库操作

show databases; 查看数据库

use 数据库名; 使用数据库

select database(); 查看当前使用的数据库

create database 数据库名 charset=utf8; 创建数据库

drop database 数据库名; 删除数据库

数据表操作

show tables; 查看当前数据库中的所有表

desc 表名; 查看表结构

创建表

create table students(

id int unsingned primary key auto_increment not null,

name varchar(20) default '',

age int unsingned default 0,

height descimal(3,2) default 1.8,

gender enum('男','女') default '男'

)

alter table 表名 add 列名 类型; 添加字段

alter table 表名 change 类型及约束; 修改字段

alter table 表名 change 原名 新名 类型及约束; 修改字段(重命名字段)

alter table 表名 drop 列名; 删除字段

drop table 表名; 删除表

show create table 表名; 查看表的创建语句

数据增删改查

insert into 表名 values(); 全部列插入

insert into 表名(列1,...) values(); 部分列插入

insert into 表名(列1,...) values(),...; 插入多条数据

delete from 表名 where 条件; 删除删选出的数据

update 表名 set 列1=值1,列2=值2... where 条件; 修改数据

select 列1,列2,... from 表名; 查询数据

数据备份与恢复

备份

mysqldump –uroot –p 数据库名 > 数据库名.sql;

恢复

创建新的数据库

ysql -uroot –p 新数据库名 < 数据库名.sql

No.4 数据库设计

关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步,在开发中有很多设计数据库的软件,常用的如power designer,db desinger等,这些软件可以直观的看到实体及实体间的关系,设计数据库,可能是由专门的数据库设计人员完成,也可能是由开发组成员完成,一般是项目经理带领组员来完成

三范式

经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式

第一范式(1NF) 强调的是列的原子性,即列不能够再分成其他几列

第二范式(2NF) 首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分

第三范式(3NF) 首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况

E-R模型

E表示entry,实体,设计实体就像定义一个类一样,指定从哪些方面描述对象,一个实体转换为数据库中的一个表

R表示relationship,关系,关系描述两个实体之间的对应规则,关系的类型包括包括一对一、一对多、多对多

关系也是一种数据,需要通过一个字段存储在表中

实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值

webp

实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值

webp

实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值

webp

逻辑删除

对于重要数据,并不希望物理删除,一旦删除,数据无法找回

删除方案:设置isDelete的列,类型为bit,表示逻辑删除,默认值为0

对于非重要数据,可以进行物理删除

数据的重要性,要根据实际开发决定

No.5 MySQL查询

准备测试数据

创建数据库

create database python charset=utf8;

使用数据库

use python;

创建students表

create table students(

id int unsigned primary key auto_increment not null,

name varchar(20) default '',

age tinyint unsigned default 0,

height decimal(5,2),

gender enum('男','女','中性','保密') default '保密',

cls_id int unsigned default 0,

is_delete bit default 0

);

创建classes表

create table classes (

id int unsigned auto_increment primary key not null,

name varchar(30) not null

);

向students表中插入数据

insert into students values

(0,'小明',18,180.00,2,1,0),

(0,'小月月',18,180.00,2,2,1),

(0,'彭于晏',29,185.00,1,1,0),

(0,'刘德华',59,175.00,1,2,1),

(0,'黄蓉',38,160.00,2,1,0),

(0,'凤姐',28,150.00,4,2,1),

(0,'王祖贤',18,172.00,2,1,1),

(0,'周杰伦',36,NULL,1,1,0),

(0,'程坤',27,181.00,1,2,0),

(0,'刘亦菲',25,166.00,2,2,0),

(0,'金星',33,162.00,3,3,1),

(0,'静香',12,180.00,2,4,0),

(0,'郭靖',12,170.00,1,4,0),

(0,'周杰',34,176.00,2,5,0);

向classes表中插入数据

insert into classes values (0, "python_01期"), (0, "python_02期");

查询所有字段

select * from students;

查询指定字段

select name from students;

使用as给字段起别名

select id as 序号,name as 姓名,gender as 性别 from students;

使用as给表起别名

select s.id,s.name from students as s;

消除重复行

select distinct gender from students;

条件

使用where子句对表中的数据筛选,结果为True的行会出现在结果集中

where后面支持比较运算符、逻辑运算符、模糊查询、范围查询、空判断

比较运算符



作者:菜鸟Python
链接:https://www.jianshu.com/p/ca00bb55709c

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP