MySQL数据库存储
MySQL数据库存储
- MySQL数据库简介
- MySQL开发环境
- MySQL安装
- 图形化界面工具Navicat使用
- 表的操作
- 表的概念
- 3.2 创建表
- 3.3 修改表
- 数据的操作-增删改查
- 4.1 增加数据
- 4.2 删除数据
- 4.3 修改数据
- 4.4 查询数据
- 4.4.1 基础查询
- 4.4.2 分组查询和聚合函数
- 4.4.4 having语句
- 4.4.5 排序
- 4.5 多表联合查询
- 4.5.1 子查询
- 4.5.2 关联查询
- 4.5.2.1 inner jion
- 4.5.2.2 left join
- Python连接MySQL
- 5.1 pymysql执行增删改操作
- 5.1.1 添加数据
- 5.1.2 修改数据
- 5.1.3 删除数据
- 5.2 查询操作
- 5.3 封装一个简单的DBHelper
MySQL数据库简介
- 数据持久化
- MySQL是关系型数据库,MSSQL, Oracle,等等…
MySQL开发环境
MySQL安装
- 官网下载安装包。
链接: https://dev.mysql.com/downloads/ - MySQL的图形化界面工具navicat
图形化界面工具Navicat使用
表的操作
表的概念
- 关系型数据库中, 数据都是以表格的形式进行存储。
例表,学生:学号(唯一标识),姓名,生日,家庭住址,电话号等信息
OK. 按照这个规则来看. 每一条数据对应的就是一个人的信息.
3.2 创建表
创建表有两种方案:
- 用SQL语句创建表格
create table table_student(sno int(10) primary key auto_increment,sname varchar(50) not null, sbirthday date not null,saddress varchar(255),sphone varchar(12),class_name varchar(50), )
- 数据类型:
数据类型 | 说明 |
---|---|
int | 整数 |
double | 小数 |
varchar | 字符串 |
date | 时间(年月日) |
datetime | 时间(年月日时分秒) |
text | 文本 |
- 约束条件:
数据类型 | 说明 |
---|---|
primary key | 主键, 全表唯一值 |
auto_increment | 主键自增. |
not null | 不可以为空. |
null | 可以为空 |
default | 设置默认值 |
- 用Navicat图形化工具建表
3.3 修改表
- SQL方式
- 添加一列
ALTER TABLE table_name ADD COLUMN column_name datatype
- 删除一列
ALTER TABLE table_name DROP COLUMN column_name
- 修改一列的数据类型
ALTER TABLE table_nameMODIFY COLUMN column_name datatype
- 表格重命名
ALTER TABLE table_name RENAME TO new_name
- Navicat方式
在表上右键,点:Design Table,然后根据说明更改
数据的操作-增删改查
4.1 增加数据
INSERT INTO table_name(col1, col2, ccol3...) values (val1,val2,val3)
- 添加学生信息
INSERT INTO STUDENT(sname, sbirthday, saddress, sage, class_name) values ('周杰伦', '2020-01-02', "北京市昌平区", 18, "二班");
- 如果主键设置自增, 就不用处理主键了. mysql会自动照自然顺序进行逐一自增.
4.2 删除数据
DELETE FROM table_name where 条件语句
- 删除sno = 1的学生信息
DELETE FROM STUDENT where sno = 1 ;
4.3 修改数据
UPDATE table_name SET col1 = val1, col2 = val2... where 条件语句
- 修改sno = 1的学生的名字信息
UPDATE STUDENT SET SNAME = '王力宏' where sno = 1;
- 修改和删除数据的时候一定要带上where条件
- 不带条件的修改和删除,就是对全表更新、删除
4.4 查询数据
4.4.1 基础查询
SELECT *|col1, col2, col3 FROM table_name where_条件
- 全表查询
SELECT * FROM STUDENT;
- 查询学生表的某一字段,姓名、年龄
SELECT sname, sage FROM STUDENT;
- 根据学号查询学生信息
select * from student where sno = 1;
- 查询年龄大于20的学生信息
select * from student where sage > 20;
- and查询学生年龄大于20 小于40的信息(包含)
select * from student where sage >= 20 and sage <= 40;
select * from student where sage between 20 and 40 ;
- 查询姓张的学生信息
- _:一位字符串
- %:多位字符串
select * from student where sname like '张%';
4.4.2 分组查询和聚合函数
- 分组group by
- 不能单独使用,会报错,需配合聚合函数
select * from table_name group by col_name
- 5种聚合函数, 分别是: avg(), sum(), min(), max(), count()
- avg()查询每一个组的平均年龄
select avg(sage), class_name from STUDENT group by class_name;
- min()查询每个组最小的年龄
select min(sage), class_name from STUDENT group by class_name;
- max()查询每个组的最大年龄
select max(sage), class_name from STUDENT group by class_name;
- count()查询每个组的学生数量
select count(*), class_name from STUDENT group by class_name;
- sum()查询每个组的年龄和
select sum(sage), class_name from STUDENT group by class_name;
- ****不要把没有放在group by的内容直接放在select中。先分组,按分组信息进行查询,原来的字段未分组,放进select中组表显示,就显得混乱。
4.4.4 having语句
- having语句对聚合函数计算的结果进一步的筛选
- 查询平均年龄在15岁以上的组信息
select avg(sage), class_name from student group by class_name having avg(sage) > 15;
- having和where的区别:where是在原始数据上进行的数据筛选。而having是在聚合函数计算后的结果进行筛选。
4.4.5 排序
- order by语句对查询结果进行排序.
- asc按照年龄从小到大查询学生信息
select * from student order by sage asc
- desc按照年龄从大到小查询学生信息
select * from student order by sage desc
4.5 多表联合查询
- 数据库表结构设计范式, 第三范式,每个表的结构相对明确. 不存在歧义. 数据保存完整, 没有冗余,按此建表:
- 学生表: 学号, 姓名, 性别, 住址等…
- 课程表: 课程编号, 课程名称, 授课教师等…
- 学生课程-成绩表: 成绩表编号, 学号, 课程编号, 成绩
- 在该模型表结构中. 成绩表是非常重要的. 在成绩表中, 明确的说明了哪个学生的哪一门课程得了多少分. 它将两个原来毫不相关的表关联了起来. 建立了主外键关系.
- 主外键关系: 把A表中的主键放在另一张表里作为普通字段使用, 但数据要求必须来自于A.
建表语句:
-- 创建学生表, 课程表, 成绩表
-- 1. 学生表: 学号, 姓名, 性别, 住址等...
-- 2. 课程表: 课程编号, 课程名称, 授课教师等...
-- 3. 学生课程-成绩表: 成绩表编号, 学号, 课程编号, 成绩
create table stu(sid int primary key auto_increment,sname varchar(50) not null, gender int(1),address varchar(255)
);create table course(cid int primary key auto_increment,cname varchar(50) not null, teacher varchar(50)
);create table sc(sc_id int primary key auto_increment,s_id int, c_id int,score int,CONSTRAINT FK_SC_STU_S_ID FOREIGN key(s_id) REFERENCES stu(sid),CONSTRAINT FK_SC_COURSE_C_ID FOREIGN key(c_id) REFERENCES course(cid)
);
4.5.1 子查询
在where语句中可以进行另外的一个查询.
例如, 查询选择了"编程"这门课的学生
-- 查询选择了"编程"这门课的学生
-- 先查询编程课程的编号
select cid from course where cname = '编程';
-- 根据cid可以去sc表查询出学生的id
select s_id from sc where c_id = 2;
-- 根据学生ID查询学生信息
select * from stu where sid in (1,2,3,4,5,6);-- 把上面的sql穿起来
select * from stu where sid in (select s_id from sc where c_id in (select cid from course where cname = '编程')
);-- 查询课程名称为“编程”,且分数低于60的学生姓名和分数
select stu.sname, sc.score from stu, sc where stu.sid = sc.s_id and sc.score < 60 and sc.c_id in (select cid from course where cname = '编程'
)
4.5.2 关联查询
-
把多个表格通过join的方式合并在一起进行条件检索。
-
A表和B表连接. 通过A表的字段1和b表的字段2进行连接。
-
on后面的都是主外键关系
select ... from A xxx join B on A.字段1 = b.字段2
4.5.2.1 inner jion
-- 查询每门课程被选修的学生数
-- count(*)
-- group by cidselect c.cid,c.cname, count(*) from sc inner join course c on sc.c_id = c.cid group by c.cid, c.cname
4.5.2.2 left join
-- 查询所有学生的选课情况
select s.sname, c.cname from stu s left join sc on s.sid= sc.s_id left join course c on sc.c_id = c.cid-- 查询任何一门课程成绩在70分以上的姓名、课程名称和分数
-- score > 70 sc
-- sname student
-- cname course
select s.sname, c.cname, sc.score from stu s inner join sc on s.sid = sc.s_id inner join course c on sc.c_id = c.cid
where sc.score > 70
Python连接MySQL
- python用pymysql模块连接mysql
- 安装pymysql
pip install pymysql
- pymysql基本使用:
import pymysql# 链接数据库
conn = pymysql.connect(host='localhost',port=3306,user='root',password='test123456',database='spider_back'
)
# 创建游标,游标执行增删改查
cursor = conn.cursor()
5.1 pymysql执行增删改操作
5.1.1 添加数据
try:cursor = conn.cursor()result = cursor.execute("insert into stu(sname, address, gender) values ('张三', '恒大别野', 1)")print(cursor.lastrowid) # 获取自增的ID值print(result) # result是该sql会影响多少条数据conn.commit() # 提交
except:conn.rollback() # 回滚
5.1.2 修改数据
try:cursor = conn.cursor()result = cursor.execute("update stu set gender = 2 where sid = 12")print(result) # result是该sql会影响多少条数据conn.commit() # 提交
except:conn.rollback() # 回滚
5.1.3 删除数据
try:cursor = conn.cursor()result = cursor.execute("delete from stu where sid = 12")print(result) # result是该sql会影响多少条数据conn.commit() # 提交
except:conn.rollback() # 回滚
5.2 查询操作
# 查询
from pymysql.cursors import DictCursor
# cursor = conn.cursor(DictCursor) # 使用字典游标. 查询出的结果自动保存在字典中
cursor = conn.cursor() # 默认游标. 查询出的结果自动保存在元组中sql = """select * from stu
"""
ret_num = cursor.execute(sql)
# result = cursor.fetchall() # 获取全部结果
# result = cursor.fetchmany(5) # 获取部分结果
result = cursor.fetchone() # 获取单个结果
print(result)
# 一个游标如果被拿空了. 则不能再次获取内容.
result = cursor.fetchone() # 获取单个结果, 可以连续获取
print(result)
5.3 封装一个简单的DBHelper
import pymysql
from pymysql.cursors import DictCursor
class NoDataBaseException(Exception):pass
class DBHelper:def __init__(self, database=None, host="localhost", port=3306, username="root", password="123456"):if database:self.conn = pymysql.connect(host=host,port=port,user=username,password=password,database=database)else:raise NoDataBaseException("没有提供正确的数据库")def __enter__(self):return selfdef __exit__(self, exc_type, exc_val, exc_tb):return self.conn.close()def _change(self, sql, *args, isInsert=False):cursor = self.conn.cursor()try:rownum = cursor.execute(sql, args)self.conn.commit()if isInsert:return cursor.lastrowidelse:return rownumexcept Exception as e:print("报错了", e)self.conn.rollback()finally:cursor.close()def insert(self, sql, *args):return self._change(sql, *args, isInsert=True)def update(self, sql, *args):return self._change(sql, *args)def delete(self, sql, *args):return self._change(sql, *args)def query_list(self, sql, *args):cursor = self.conn.cursor()try:cursor.execute(sql, args)result = cursor.fetchall()return resultfinally:cursor.close()def query_one(self, sql, *args):cursor = self.conn.cursor()try:cursor.execute(sql, args)result = cursor.fetchone()return resultfinally:cursor.close()if __name__ == '__main__':with DBHelper("spider_back") as db:# result = db.query_list("select * from stu where gender=%s and address like %s", 1, "%北京%")# print(result)result = db.delete("delete from stu where sid = %s", 10)print(result)
- MySQL远程连接时, 必须对数据库做一个简短的配置
1, 打开mysql命令行.
2, 输入以下内容
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
相关文章:
MySQL数据库存储
MySQL数据库存储 MySQL数据库简介MySQL开发环境MySQL安装图形化界面工具Navicat使用 表的操作表的概念3.2 创建表3.3 修改表 数据的操作-增删改查4.1 增加数据4.2 删除数据4.3 修改数据4.4 查询数据4.4.1 基础查询4.4.2 分组查询和聚合函数4.4.4 having语句4.4.5 排序4.5 多表联…...
verilog语法进阶,时钟原语
概述: 内容 1. 时钟缓冲 2. 输入时钟缓冲 3. ODDR2作为输出时钟缓冲 1. 输入时钟缓冲 BUFGP verilog c代码,clk作为触发器的边沿触发,会自动将clk综合成时钟信号。 module primitive1(input clk,input a,output reg y); always (posed…...
案例069:基于微信小程序的计算机实验室排课与查询系统
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...
C语言:将三个数从大到小输出
#include<stdio.h> int main() {int a 0;int b 0;int c 0;printf("请输入abc的值:");scanf_s("%d%d%d", &a, &b, &c);if (b > a){int tmp a;a b;b tmp;}if (c > a){int tmp a;a c;c tmp;}if (b < c){int t…...
基于Hadoop的铁路货运大数据平台设计与应用
完整下载:基于Hadoop的铁路货运大数据平台设计与应用 基于Hadoop的铁路货运大数据平台设计与应用 Design and Application of Railway Freight Big Data Platform based on Hadoop 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的与意义 5 …...
Java基础题2:类和对象
1.下面代码的运行结果是() public static void main(String[] args){String s;System.out.println("s"s);}A.代码编程成功,并输出”s” B.代码编译成功,并输出”snull” C.由于String s没有初始化,代码不能…...
冒泡排序学习
冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻的元素来排序。具体实现如下: 1. 从待排序的数组中的第一个元素开始,依次比较相邻的两个元素。 2. 如果前一个元素大于后一个元素,则交换…...
LeetCode(65)LRU 缓存【链表】【中等】
目录 1.题目2.答案3.提交结果截图 链接: LRU 缓存 1.题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 k…...
网站提示“不安全”
当你在浏览网站时,有时可能会遇到浏览器提示网站不安全的情况。这通常是由于网站缺乏SSL证书所致。那么,从SSL证书的角度出发,我们应该如何解决这个问题呢? 首先,让我们简单了解一下SSL证书。SSL证书是一种用于保护网站…...
【Linux】驱动
驱动 驱动程序过程 系统调用 用户空间 内核空间 添加驱动和调用驱动 驱动程序是如何调用设备硬件 驱动 在计算机领域,驱动(Driver)是一种软件,它充当硬件设备与操作系统之间的桥梁,允许它们进行通信和协同工作。驱动程…...
Java研学-HTML
HTML 1 介绍 HTML(Hypertext Markup Language) 超文本标记语言。静态网页,用于在浏览器上显示数据 超文本: 指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 标记语言: 使用 < > 括起来的语言 超文本标记语言的结构, 包括“头”部分&am…...
SpringBoot之响应的详细解析
2. 响应 前面我们学习过HTTL协议的交互方式:请求响应模式(有请求就有响应) 那么Controller程序呢,除了接收请求外,还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中,都已经设置了…...
redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板
双写一致性 场景导入 如果现在有个数据要更新,是先删除缓存,还是先操作数据库呢?当多个线程同时进行访问数据的操作,又是什么情况呢? 以先删除缓存,再操作数据库为例 多个线程运行的正常的流程应该如下…...
智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.…...
illuminate/database 使用 五
之前文章: illuminate/database 使用 一-CSDN博客 illuminate/database 使用 二-CSDN博客 illuminate/database 使用 三-CSDN博客 illuminate/database 使用 四-CSDN博客 一、原生查询 1.1 原理 根据之前内容调用执行的静态类为Illuminate\Database\Capsule\M…...
武汉灰京文化:益智游戏的教育与娱乐完美结合
随着游戏技术的不断发展,益智类游戏正经历着一场革命性的变革,逐渐融合了教育和娱乐的元素。创新的设计和互动方式使得许多益智游戏成为了知识传递和技能训练的有效工具,同时保持了娱乐体验的趣味性。这种教育与娱乐的完美结合不仅使益智游戏…...
arcgis api for js 中的query实现数据查询
相当于服务地址中的query查询 获取图层范围内的数据4.24 import Query from arcgis/core/rest/support/Query; import * as QueryTask from "arcgis/core/rest/query";//获取图层范围内的数据4.24 _returnFeatureFromWhere(url, where, geo) {const self thisretu…...
AcWing 1250. 格子游戏(并查集)
题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中,再连一条边,就围成一个封闭的圈。一般用x * n y的形式将(x, y࿰…...
CSS对文本的简单修饰
CSS格式: 格式一:在head中的style标签范围内。 < style> 在style内的只写名字不写 : < > 选择器 { 属性的名称 : 样式; 属性的名称:样式; } < style> style中的注释用/* *…...
C++17中if和switch语句的新特性
1.从C17开始,if语句允许在条件表达式里添加一条初始化语句。当仅在if语句范围内需要变量时,使用这种形式的if语句。在if语句的条件表达式里定义的变量将在整个if语句中有效,包括else部分。 std::mutex mx; bool shared_flag true; // guard…...
极坐标下的牛拉法潮流计算57节点MATLAB程序
微❤关注“电气仔推送”获得资料(专享优惠) 潮流计算: 潮流计算是根据给定的电网结构、参数和发电机、负荷等元件的运行条件,确定电力系统各部分稳态运行状态参数的计算。通常给定的运行条件有系统中各电源和负荷点的功率、枢纽…...
软件设计师——计算机网络(三)
📑前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …...
【ArkTS】循环控制与List的使用
ArkTS如何进行循环渲染 现有数据如下 class Item{name:stringimage:Resourceprice:numberdicount:numberconstructor(name:string,image:Resource,price:number,dicount?:number) {this.name namethis.image imagethis.price pricethis.dicount dicount} }private items…...
条款3:尽量使用const
文章目录 const指针和函数声明const修饰指针const修饰函数const修饰容器const应用在函数中 const限定成员函数避免const重载的代码重复总结 const指针和函数声明 const修饰指针 char greeting[] "Hello"; char* p greeting; // non-const 指针,// non-const 数据…...
Chromadb词向量数据库总结
简介 Chroma 词向量数据库是一个用于自然语言处理(NLP)和机器学习的工具,它主要用于词嵌入(word embeddings)。词向量是将单词转换为向量表示的技术,可以捕获单词之间的语义和语法关系,使得计算…...
Gin之GORM 操作数据库(MySQL)
GORM 简单介绍 GORM 是 Golang 的一个 orm 框架。简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。使用 ORM框架可以让我们更方便…...
二十七、读写文件
二十七、读写文件 27.1 文件类QFile #include <QCoreApplication>#include<QFile> #include<QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("D:/main.txt");if(!file.open(QIODevice::WriteOnly | QIODe…...
flutter 代码混淆
Flutter 应用混淆: Flutter 应用的混淆非常简单,只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。 –obfuscate --split-debug-info 用来指定输出调试文件的位置,该命令会生成一个符号映射表。目前…...
05 Vue中常用的指令
概述 All Vue-based directives start with a v-* prefix as a Vue-specific attribute. 所有基于 Vue 的指令都以 v-* 前缀作为 Vue 特有的属性。 v-text The v-text directive has the same reactivity as with interpolation. Interpolation with {{ }} is more perform…...
Mr. Cappuccino的第67杯咖啡——MacOS通过PD安装Win11
MacOS通过PD安装Win11 下载ParallelsDesktop安装ParallelsDesktop激活ParallelsDesktop下载Windows11安装Windows11激活Windows11 下载ParallelsDesktop ParallelsDesktop下载地址 安装ParallelsDesktop 关闭上面的窗口,继续操作 激活ParallelsDesktop 关闭上面的…...
wordpress 插件 浮动小人/企业培训机构
一:重启xenserver,待启动界面进入到boot时,键入menu.c32二:待出现以下界面是,在5秒内按下tab键:三:按下tab建后,出现启动参数,然后加入single参数:回车&#…...
独立网站建设空间哪里买/快速排名教程
**JAVA实训之旅2** 今天开启了java实训第二课,老师带领我们开始敲代码之旅,说是敲代码,不如说是牵着老师的鼻子走,因为整堂课听下来都不知道自己学了什么,但还是能跟上老师的节奏。 首先老师带领我们依次创建四…...
网站设计毕业设计论文/温州网站快速排名
经过漫长的等待,终于装上win7了,但是忽然发现收不到无线信号(附近确实是有可用的无线信号的),初步以为可能是因为没有装无线网卡驱动的问题。然后去官网,找到对应型号的驱动,可是安装完驱动重新…...
临沂住房和城乡建设局网站/网络营销策划方案
本文记载了如何在微信小程序里面实现下拉刷新,上拉加载更多 先开看一下界面 大致如此的界面吧。 这个Demo使用了微信的几个Api和事件,我先列出来。 1.wx.request (获取远程服务器的数据,可以理解成$.ajax) 2. scroll-v…...
网站开发者不给源代码怎么办/快速优化关键词排名
殊不知,在N年前被奉为“圣经”的数据库设计3范式早就已经不完全适用了。这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用。 由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方…...
每个网站都有服务器吗/一手app推广接单平台
定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 解决的问题 请求和处理分开、实现解耦、提高系统的灵活…...