当前位置: 首页 > news >正文

Python学习-- 数据库和MySQL入门

数据库

变量、元组、列表、字典、集合、文件(xml yml json)
在这里插入图片描述

数据库的分类

关系型数据库

是指采用了关系模型来组织数据的数据库,其以行和列的形式来存储数据,便于用户理解。这一系列行和列组成的被称为表,一组表组成了数据库

关系型数据库有 MySQL Oracle MSSQLServer

非关系型数据库

NoSQL(Not-Only SQL)系列数据库,将非关系型数据转换为关系型数据

非关系型数据库有 Redis MongoDB 等

SQL语言分类 (面试高频考点)

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系型数据库

  1. 数据查询语言(DQL:Data Query Language):其语句,也称为数据检索语句,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHEREORDER BYGROUP BYHAVING。这些DQL 保留字常与其它类型的SQL语句一起使用。

  2. 数据操作语言(DML: Data Manipulation Language):其语句包括动词INSERTUPDATEDELETE。它们分别用于添加、修改和删除。

  3. 事务控制语言(TCL:Transaction Controller Language):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT (提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。

  4. 数据控制语言(DCL:Data Controller Language):它的语句通过GRANTREVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANTREVOKE控制对表单个列的访问。

  5. 数据定义语言(DDL:Data Definition Language):其语句包括动词CREATEALTERDROP。在数据库中创建新表或修改、删除表(CREATE TABLEDROP TABLE):为表加入索引等。

MySQL 语言

MySQL

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。 My SQL是最流行的关系型数据库管理系统之一, 在 WEB 应用方面, MySQL是最好的RDBMS(Relational Database ManagementSystem,关系数据库管理系统)应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

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

MySQL与Oracle区别

区别MySQLOracle
字符串类型varcharvarchar2
int类型自动递增支持自动递增 AUTO_INCREMENT不支持,要使用序列
分组语法如果出现分组,select后面可以出现其他字段,不报错但不建议一旦出现分组,那么select后面只允许出现分组字段和统计函数
分页语法使用limit关键字分页使用偏移量offset分页

01 安装与卸载

见 预科学习

02 命令详情

基础命令

数据库基础命令

登录 MySQL mysql -u root -p [password] [-h HOST] [-P PORT]

查看所有数据库 show databases;

使用数据库 use <database>

删除数据库 drop <database>;

创建数据库 create <database>;

查看数据库创建信息 show create database <database>;

查看数据库中的表 show tables;

查看某个表格的详细信息 desc <table>

MySQL 常用数据类型 Int Double Datetime Varchar

表基础命令

创建表 create table <表名称>(<字段(列名)1 类型(长度)>,<字段2 类型(长度)>,...);

删除表 drop table <表名称>;

修改表 添加列 alter table <表名称> add 字段 类型

​ 删除列 alter table <表名称> drop column 字段

​ 修改列的数据类型 alter table <表名称> modify column 字段 新的类型

​ 修改列名 alter table <表名称> change column 旧字段名 新字段名 的类型

值基础命令

添加

# 方式一  将所有字段都添加
insert into 表格名称 values (字段1,字段2,...);
# 方式二  添加指定字段
insert into 表格名称 (字段1,字段2,...) value (字段1,字段2,...);

修改

update 表名 set 字段 = '新值' where 字段条件 = '条件值';
# 如果不加where条件,那么结果是修改所有数据

删除

delete from 表名 where 字段条件 = '条件值';
# 如果不加where条件,那么条件是清空表格!

查询

select * from 表名;
建表约束 CONSTRAINT

非空约束 NK not null

# 方法一 直接在属性后加 not null 关键字
create table t_nk(id int(5) not null
);
# 方法二 在语句后用constraint关键字指定约束名
create table t_uk(id int(5),CONSTRAINT NK_name NOT NULL (id)
);desc t_nk;
# 结果
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.04 sec)

唯一约束 UK unique

# 方法一 直接在属性后加 unique 关键字
create table t_uk(id int(5) UNIQUE
);
# 方法二 在语句后用constraint关键字指定约束名
create table t_uk(id int(5),CONSTRAINT UK_name UNIQUE (id)
);desc t_uk;
# 结果
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  | UNI | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.04 sec)

主键约束 PK primary key (NK+UK)

# 方法一 直接在属性后加 primary key 关键字
create table t_pk(id int(5) primary key
);
# 方法二 在语句后用constraint关键字指定约束名
create table t_uk(id int(5) AUTO_INCREMENT, # 自动递增CONSTRAINT NK_name primary key (id)
);desc t_pk;
# 结果
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   | PRI | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.04 sec)

一般将id编号设置为主键,而且每一张表建议至少一个主键。

加主键的目的就是为了索引

  • 当主键为int数字类型的时候,一般设置自动递增

    • 方式一 MySQL支持自动递增,可以在创表时追加 AUTO_INCREMENT
    • 方式二 通过python程序做自动递增 id+=1
  • 当主键为varchar字符串类型的时候,无法再做自动递增

    • 方式一 通过python程序来生成固定格式且不会重复的主键 id+=1 “格式+id”
    • 方式二 通过某些算法来生成不会重复的主键 例如 雪花算法 等

联合主键

当需要两个及两个以上字段共同约束非空加唯一的时候,可以使用联合主键,指定多个主键

create table t_uk(id int(5) AUTO_INCREMENT, # 自动递增name varchar(255),CONSTRAINT NK_name primary key (id,name)
);
# 结果
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | NO   | PRI | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.04 sec)

外键约束 FK foreign key

constraint FK_name foreign key(外键列名称) references 主表名称(主表列名称)

一对多 一个主表列可以有多个子表列,一个子表列只能有一个主表列

create table t_fk(id int(5),constraint FK_name foreign key (id) references t_pk(id)  # 两步,先指定外键,再指定引用表和字段
);desc t_fk;
# 结果
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  | MUL | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.04 sec)

多对多 权限管理

一个角色可以有多个菜单,一个菜单可以被多个角色访问

表设计 用户表 n–n 角色表 n–n 功能菜单表

要实现多对多关系,就要加上一个中间表作为多对多外键管理,因此,上面的表设计就要优化,优化后为下:

用户表 n-- 用户角色表 --n 角色表 n-- 角色菜单表 --n 功能菜单表

create table t_person(pid int(10) auto_increment,pname VARCHAR(10) not null,phone VARCHAR(11),CONSTRAINT pk_pid PRIMARY KEY(pid) 
);CREATE TABLE t_role(rid int(5) auto_increment,rname varchar(10),CONSTRAINT pk_rid PRIMARY KEY(rid) 
);CREATE TABLE t_menu(mid int(5) auto_increment,mname varchar(10),image VARCHAR(10),url VARCHAR(255),pid int(5),CONSTRAINT pk_mid PRIMARY KEY(mid),CONSTRAINT fk_mid FOREIGN KEY(pid) REFERENCES t_menu(mid) 
);CREATE TABLE t_person_role(id int(5) auto_increment,pid int(5),rid int(5),CONSTRAINT pk_pr_id PRIMARY KEY(id),CONSTRAINT fk_pr_pid FOREIGN KEY(pid) REFERENCES t_person(pid),CONSTRAINT fk_pr_rid FOREIGN KEY(rid) REFERENCES t_role(rid)
);CREATE TABLE t_role_menu(id int(5) auto_increment,rid int(5),mid int(5),CONSTRAINT pk_rm_id PRIMARY KEY(id),CONSTRAINT fk_rm_rid FOREIGN KEY(rid) REFERENCES t_role(rid),CONSTRAINT fk_rm_mid FOREIGN KEY(mid) REFERENCES t_menu(mid)
);

级联操作

在创建外键的过程可以追加两种特殊的外键操作:

  • 级联删除(危险) 删除引用的父表中的数据时会将引用其的子表中的数据给一齐删除 on delete cascade

一般网站数据库都会使用逻辑删除,即给数据设置一个标识位(flag),当数据删除时使用update更新标识位使其不可被查询,而不会使用物理删除(delete)

不到万不得已的情况下不要使用物理删除/级联删除!

  • 级联设置null(推荐) 删除引用的父表中的数据时会将引用其的子表中的数据给设置为null on delete set null
# 级联删除
create table t_user(id int(10) primary key AUTO_INCREMENT,name varchar(20),password varchar(20),pid int(10),constraint fk_cascade_pid foreign key(pid) references t_menu(id) on delete cascade
);
# 级联设置null (推荐)
create table t_user(id int(10) AUTO_INCREMENT,name varchar(20),password varchar(20),address varchar(20),pid int(10),constraint pk_id primary key(id),constraint fk_null_pid foreign key(pid) references t_menu(id) on delete set null
);

检查约束 CK check

constraint CK_name check (id > 0) and (id < 100)

create table t_fk(id int(5),constraint CK_name check (id > 0) and (id < 100)
);
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  | MUL | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.04 sec)

检查约束实际上是程序的业务逻辑,一般会写在程序里而不是数据库中,所以一般会在数据库中使用check语句以缓解数据库压力

在MySQL8.0.16以下版本对check的支持不完整,所以可以设置但不会生效,8.0.16以上版本对其进行优化使其正常生效

http://www.xdnf.cn/news/1338805.html

相关文章:

  • CentOS 7常用国内源配置:阿里云、腾讯云、华为云、清华源
  • pycharm编译器如何快速掌握一个新模块的使用方法
  • JeeSite 快速开发平台:全能企业级快速开发解决方案
  • 【图像算法 - 20】慧眼识病:基于深度学习与OpenCV的植物叶子疾病智能识别系统
  • Python-Pandas GroupBy 进阶与透视表学习
  • 中国之路 向善而行 第三届全国自驾露营旅游发展大会在阿拉善启幕
  • Android14内核调试 - boot vendor_boot
  • 06高级语言逻辑结构到汇编语言之逻辑结构转换 for (...; ...; ...)
  • uni-app:实现文本框的自动换行
  • Android - 资源类型 MINE Type
  • 教育场景下禁用html5播放器拖动进度条的例子
  • 医疗信息化实战:引领医疗行业数字化转型实践
  • 华为AUTOSAR质量目标与开发实践
  • FCN网络结构讲解与Pytorch逐行讲解实现
  • Go语言中的迭代器模式与安全访问实践
  • open3d-点云函数:变换:旋转,缩放、平移,齐次变换(R,T)等
  • 开源,LangExtract-Python库用LLM从非结构化文本提取结构化信息
  • 移动应用抓包与调试实战 Charles工具在iOS和Android中的应用
  • 自然语言处理——04 注意力机制
  • 基于Spring Cloud Gateway动态路由与灰度发布方案对比与实践指导
  • 记一次 .NET 某光谱检测软件 内存暴涨分析
  • CentOS7安装部署PostgreSQL
  • 搭建FTP文件共享服务器
  • SQL中对视图的操作命令汇总
  • 【数据结构入门】排序算法:插入排序
  • 带有 Angular V14 的 Highcharts
  • 动学学深度学习03-线性神经网络
  • hadoop-3.3.6和hbase-2.4.13
  • Linux下Docker版本升级保姆攻略
  • 数据结构之排序大全(4)