当前位置: 首页 > 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.dtcms.com/a/343366.html

相关文章:

  • 在线课程|基于SprinBoot+vue的在线课程管理系统(源码+数据库+文档)
  • 华为仓颉语言的函数初步
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(三) 文本标签、按钮、文本框基本使用
  • Rust 入门 模块 (二十二)
  • 意象驱动下的感知与认知信息结构:上古汉语同源词研究视角——基于黄易青《上古汉语同源词意义系统研究》的理论框架
  • Eject配置
  • 常见的端口扫描
  • 从零到一:RAGFlow 本地部署全攻略
  • Python工程师向项目管理转型的深度分析与学习道路规划
  • 容器化与云安全实践:ChartMuseum、私有仓库、云安全、应用部署、生命周期、定时任务、HPA管理案例流程
  • visual studio更改git提交的用户名和邮件
  • LT8712SX,Type-C/DP1.4 /eDP转 DP1.4/HD-DVI2.0 带音频
  • 服务区小汽车违停检测算法创新与实践
  • Android系统框架知识系列(十二):通知中枢 - Notification Manager Service深度解析
  • 工厂模式全解析:简单、方法、抽象工厂详解
  • comfyUI背后的一些技术——Checkpoints
  • leetcode_238 除自身以外的数组乘积
  • 图--常见面试问题
  • 面试可能问到的问题思考-Redis
  • 开源后台管理系统
  • 云蝠智能Voice Agent的多语言、多音色与语音克隆技术解析
  • 手动实现树形下拉菜单
  • 云原生俱乐部-RH294知识点归纳(2)
  • EEMD-LSTM模型择时策略 --- 1.EEMD分解与LSTM模型搭建
  • 开源,LangExtract-Python库用LLM从非结构化文本提取结构化信息
  • 生产环境的 MySQL 数据库能用 Docker 吗?
  • Spring面试宝典:Spring IOC的执行流程解析
  • ES_数据存储知识
  • 基于SpringBoot的宠物用品系统【2026最新】
  • odoo-063 pip 安装 Segmentation fault (core dumped),曲线救国