一文入门mysql 数据库

news2024/9/21 18:51:37

一、数据库概述

什么是数据库

       数据库是一个用于存储和管理数据的仓库。数据按照特定的格式存储,可以对数据库中的数据进行增加、修改、删除和查询操作。数据库的本质是一个文件系统,按照一定的逻辑结构组织数据,以方便高效地访问和维护。

什么是数据库管理系统

       数据库管理系统(DataBase Management System,DBMS)是一个操作和管理数据库的软件。它用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

常见的数据库管理系统

MYSQL :

MySQL 不仅用于小型数据库,还可以扩展到大型企业级应用场景。它在许多高流量的网站和大型企业系统中得到了广泛应用。
虽然 Oracle 收购了 MySQL,但开源版本仍然存在且免费。MySQL 有多个版本(如社区版、企业版等),其中一些版本收费,但免费的社区版仍在维护和更新。
Oracle :收费的大型关系数据库管理系统,主要用于大型企业级应用。

SQLServer:MicroSoft 公司收费的中型的数据库。SQL Server 不仅适用于 C# 和 .NET 语言,还可以与其他编程语言(如 Java、Python、PHP 等)一起使用。

SQLite : 嵌入式的小型数据库,SQLite 不仅应用于手机端,还可以应用于桌面应用程序和物联网(IoT)设备等。

PostgreSQL:PostgreSQL 是一种开源的关系数据库管理系统,功能强大且可扩展,适用于各种规模的应用场景。它在许多大型企业和开源项目中得到了广泛应用。

NoSQL:除了上述描述的关系数据库管理系统外,还有一类称为 NoSQL(Not Only SQL)数据库,它们使用非关系模型来存储和管理数据。这些数据库包括 MongoDB(文档存储)、Redis(键值存储)、Apache Cassandra(列存储)和 Neo4j(图数据库)等。这些数据库在大数据、分布式系统和实时应用场景中具有优势。

数据库表

数据库中以表为组织单位存储数据。

表类似我们的Java类,每个字段都有对应的数据类型。

那么用我们熟悉的java程序来与关系型数据对比,就会发现以下对应关系。

类----------表

类中属性----------表中字段

对象----------记录

二、MySql数据库

1.安装:

可以观看我之前的作品

2.登录,在windows命令窗口

mysql -u(用户名) -p(密码) -h(主机ip地址) -P(主机ip端口号) 

3.基础指令

(1)数据库基本指令:

show  databases;  显示所有的数据库

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

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

use 数据库名; 使用数据库

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

(2)数据表基本指令:

show tables;  显示数据库中的所有数据表

create  table 表名 (列名 类型 约束1 约束2...,列名  类型  约束1  约束2...);  创建数据表

desc 表名;  查看数据表结构

drop table 表名;  删除数据表

(3)数据表中列的增删改:

alter table 数据表名 drop 列名;  删除列

alter table 数据表名  add  列名 类型 约束1  约束2...;  创建列

alter table 数据表名  change 列名 新列名 类型 约束1  约束2...;  修改列

(4)列的约束条件:

1.主键 :primary  key ,可以确定唯一的一行

2.非空 :not null ,不能为空,必须有值

3.自增长: auto_increment  ,每次+1

4.唯一: unique, 列中内容不重复

5.默认:default,默认值

6.外键:foreign,与其他表关联,是其他表的主键

7.检查:check,Mysql 8 才有,检查满足条件

4.高级指令

(1)、CURD  增删改查

查:

1.select * from 数据表名 where 条件; 慎用,非常耗时

2.select 列名,列名,列名 from 数据表名 where 条件;

3.select  列名 as 别名,列名 as 别名 from 数据表名 where 条件;

条件:

1.比较运算符: =   >  >=  <  <=  !=  <>

2.逻辑运算符:and or  not

3.成员运算符: in [a,b,c]

4.between a and b

5.判断是否为空:is null  is not null

6.like   % 代表多个字符,_ 代表一个字符

关联查询:表与表之前存在关联关系
嵌套查询:第一次查询的结果作为第二次查询的条件
表连接:

1.笛卡尔连接:一个表中每一行都和另外一个表中所有行连接

2.内连接 :inner join 

举例:select user.id as 用户id, user.username as  用户名, role.nick as 昵称, role.level as 等级 from user inner join role  on user.id = role.user_id;

3.外连接:左外连接,右外连接

左外连接:left join,以左表为主,左表条件满足 正常显示 不满足 右侧补null。

举例:select * from user left join role on user.id = role.user_id;

右外连接:right join,以右表为主,右表条件满足 正常显示 不满足 左侧补null。

举例:select * from role right join user on user.id = role.user_id;

4.全连接:full join,left join   union  right join, mysql不支持关键字 full join

举例: select * from user right join role on user.id = role.user_id union  select * from user left join role on user.id = role.user_id;

1. insert into  表名 values (列1, 列2,列n),(列1, 列2, 列n)....  列的个数与值的个数一致

2 . insert into  表名  (列1, 列2) values (值1, 值2), (值1, 值2)...    可以指定哪些列的数据,没有默认值的列必须插入

3. insert into   表名  set  列1=值1,列2=值2;  插入1行指明插入的列与其值

update 数据表名 set 列名1 = 值1 where 条件;  如果没有条件就修改整个表

delete from 表名 where 条件;  如果没有条件就清空表

(2)、分组、分页、排序

1. 去重:distinct  ,单独列展示 并对列去重

举例: select  distinct user_id from role;

2. 分组:group by ,一般会结合count (*)进行统计

举例: select info as '组信息', count(*) as 个数 from role group by info;

3. 分页:limit ,一个数字n 代表 前n个,两个数字start, count,每页显示count个  第n页公式:(n-1)* count, count

4. 排序: order by, asc 升序、desc 降序

举例:select * from role order by user_id desc , id  desc  ;  id 降序

(3)、用户操作

1.root系统管理员+ 其他用户,% 代表所有ip都可以访问

2.创建用户:create user '用户名'@'%' identified by '123456';

3.分配权限:grant 权限列举 to ‘用户名’@‘%’ on  数据名.表名 ,all 所有权限,*.*  所有数据库中的所有表

4. 刷新权限: flush privileges;

5. 删除用户:drop user  '用户名'@'%';

6. 修改密码:alter user ‘用户名’@‘%’  identified by ‘123456’;

(4)、外键

1.创建、添加外键:constraint  外键名 foreign key   (列名)  references  表 (列名)on update  cascade  on  delete   cascade;

2. 删除外键:alter table 表名 drop foreign key 外键名;

(5)、函数

1. 查看当前数据库:select database();

2. 查看当前用户: select  user();

3. 查看版本: select version();

4. 现在时间: select now();

5. 时间戳: select unix_timestamp();

(6)、特殊数据类型

1. int

2. varchar、char

3. datetime,default current_timestamp,default current_timestamp on update current_timestamp

4. enum,enum("男“,”女“, ”保密“)  default "保密"

三、pymysql

1、pymysql 基础使用

(1).安装

终端输入:pip install pymysql

(2). 导包
import pymysql
(3). 构建连接实例
con = pymysql.connect(user="qyc", password='123456')
 (4). 使用数据库
con.select_db("python2407")
(5). 创建游标(游动的鼠标),用于执行sql语句
cur = con.cursor()

5.1 使用游标执行sql

row = cur.execute("show tables")
print(f"{row}个表")

5.2 打印所有表 fetchall

datas = cur.fetchall()
for data in datas:
    print(data[0])

 5.3 打印一个表(游标前进一位) fetchone

datas = cur.fetchone()
print(datas[0])
datas = cur.fetchone()
print(datas[0])

5.4 打印n个表  fetchmany(size=n) 取n个

datas = cur.fetchmany(size=2)
print(datas)

5.5 游标滚动,默认相对(relative), (absolute)绝对,正值前进,负值后退

cur.scroll(1)  # 打印 第一个
data = cur.fetchone()
print(data)
cur.scroll(0, mode="absolute") # 同样打印第一个
data = cur.fetchone()
print(data)
(6). 关闭游标,关闭连接
 cur.close() con.close()

2、查询插入参数

(1). 查询单个数据
cur.execute("select * from role where nick =%s or level = %s", args=('射手', 3))
#结果:(4, '射手', 3, 1002)
(2).查询多行
cur.executemany("select * from role where id = %s and level =%s", [(3, 1), (5, 15)])
#结果:(5, '打野', 15, 1003)
(3). 插入单行数据
row = cur.execute("insert into student values (%s,%s,%s)", (0, '赵六', 30))

插入前:

插入后:

(4). 插入多行数据
row = cur.executemany("insert into student values (%s,%s,%s)", [(0, '吕布', 6), (0, '李白', 3)])

插入前:

插入后:

3、pymysql 辅助类

笔者编写了一个小小案例,应该挺好理解的,创建类,封装了进入mysql的方法,每次初始化的时候都可以进入mysql

import pymysql


class MySqlHelper:
    def __init__(self, db="python2407"):
        self.con = None
        self.cur = None
        self.con = pymysql.connect(user="root", password="123456", database=db)
        self.cur = self.con.cursor()

    def query_one(self, query, args=None):
        self.cur.execute(query, args)
        return self.cur.fetchone()

    def query_all(self, query, args=None):
        self.cur.execute(query, args)
        return self.cur.fetchall()

    def update(self, query, args=None):
        row = self.cur.execute(query, args)
        self.con.commit()
        return row

    def __del__(self):
        if self.cur:
            self.cur.close()
        if self.con:
            self.con.close()


class UserMysqlHelper:
    @staticmethod
    def login(username, password):
        sql = MySqlHelper()
        user = sql.query_one("select * from user where username=%s and password = %s ", (username, password))
        return user

    @staticmethod
    def regist(username, password):
        sql = MySqlHelper()
        row = sql.update("insert into user (username,password) values (%s,%s)", (username, password))
        return row


def main():
    while True:
        menu = """0、退出
1、登录
2、注册
"""
        print(menu)
        option = input("输入数字选择对应选项")
        if option not in [str(i) for i in range(3)]:
            print(f"输入不合法,重新输入")
        else:
            if option == "0":
                break
            elif option == "1":
                while True:
                    username = input("输入用户名")
                    if 2 <= len(username) <= 4:
                        break
                    else:
                        print(f"输入不合法,重新输入")
                while True:
                    password = input("请输入密码")
                    if 2 <= len(password) <= 10:
                        break
                    else:
                        print(f"输入不合法,重新输入")
                user = UserMysqlHelper.login(username, password)
                if user:
                    print(f"登陆成功")
            elif option == "2":
                while True:
                    username = input("输入用户名")
                    if 2 <= len(username) <= 4:
                        break
                    else:
                        print(f"输入不合法,重新输入")
                while True:
                    password = input("请输入密码")
                    if 2 <= len(password) <= 10:
                        break
                    else:
                        print(f"输入不合法,重新输入")
                while True:
                    password2 = input("请再次输入密码")
                    if 2 <= len(password2) <= 10:
                        break
                    else:
                        print(f"输入不合法,重新输入")
                if password != password2:
                    print(f"密码不一致,重新注册")
                else:
                    row = UserMysqlHelper.regist(username, password)
                    if row > 0:
                        print(f"注册成功")
                    else:
                        print(f"注册失败,重新注册")


if __name__ == '__main__':
    main()

4. pymysql 执行函数与过程

(1). 构建过程函数

构建函数:

 输入:

CREATE DEFINER=`root`@`localhost` PROCEDURE `regist_user`(IN `n` int)
BEGIN
	#Routine body goes here...
	# 清空用户表
  
	# 注册n个用户
	
	# 声明一个变量i 他的类型为int  他的初始值为1
	DECLARE i INT DEFAULT 1;
	
	# 使用循环 创建n个账户
	WHILE i <= n DO
		INSERT INTO `user` VALUES (0, CONCAT('name',i), '123456');
		SET i = i + 1;		
	END WHILE;

END

函数执行前:

单击 运行

输入参数:100

函数运行后:多了100个数据

(2)、构建函数

保存,运行,输入参数  a,b

 结果:

以上就是小编使出浑身解数写的mysql了,创作不易,请大家多多点赞支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python创建LNK文件选择器并导出配置文件

在这篇博客中&#xff0c;我将介绍如何使用Python的wxPython库开发一个GUI应用程序&#xff0c;该应用程序可以选择文件夹中的.lnk&#xff08;快捷方式&#xff09;文件&#xff0c;并将选中的文件导出为特定格式的buttons.ini配置文件。这个工具非常适合用来快速生成配置文件…

使用Java调用Apache commons-text求解字符串相似性实战

目录 前言 一、字符串距离的几种计算方法 1、Levenshtein 距离 2、Overlap Coefficient计算 3、Q-gram Matching 4、余弦相似性计算 二、基于余弦相似性的基地名称对比 1、加载百科中的基地信息列表 2、设置忽略词列表 3、将数据库地名和Excel进行对比 三、总结 前言…

c语言音频.wav读写示例

1 .wav格式说明 一. RIFF 概念 在 Windows 环境下&#xff0c;大部分的多媒体文件都依循着一种结构来存放信息&#xff0c;这种结构称为"资源互换文件格式"(Resources lnterchange File Format)&#xff0c;简称 RIFF。例如声音的 WAV 文件、视频的 AV1 文件等等均…

EmguCV学习笔记 VB.Net 2.4 Image类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

【图解秒杀系列】秒杀技术点——秒杀按钮点亮、削峰

【图解秒杀系列】秒杀技术点——秒杀按钮点亮、削峰 秒杀按钮点亮涉及的问题以及解决办法处理流程 削峰答题 & 验证码具体流程 排队 秒杀按钮点亮 在秒杀场景中&#xff0c;秒杀商品页面是需要处理按钮点亮的逻辑的。在秒杀未开始前&#xff0c;按钮置灰&#xff0c;不可点…

POSIX信号量semaphore实现线程同步

POSIX标准定义了信号量接口如下&#xff0c;常常用于线程间同步。 #include <semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem); int sem_post(sem_t *sem); int sem_wait(sem_t *sem); sem_init()在sem指向的地址…

微信小程序反编译工具

目录 介绍 工程结构还原 微信开发者工具运行 如何查看当前运行版本? 开启小程序F12 重新打包运行 效果示例 安装 用法 参数说明 获取微信小程序AppID 文件夹名即为AppID 下载地址 介绍 纯Golang实现,一个用于自动化反编译微信小程序的工具,小程序安全利器, 自…

【杂谈】-8个常用的Python图像操作库

8个常用的Python图像操作库 文章目录 8个常用的Python图像操作库1、OpenCV2、Pillow&#xff08;PIL&#xff09;3、Scikit Image4、Numpy5、SciPy6、Mahotas7、SimpleITK8、Matplotlib 在当今世界&#xff0c;数据在每个行业垂直领域中都发挥着至关重要的作用。图像可以是提取…

Redis 操作的原子性及其保证机制

Redis 操作的原子性及其保证机制 1、单命令的原子性2、事务的原子性3、并发操作的考虑4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Redis 的操作之所以是原子性的&#xff0c;主要得益于其单线程的执行模型。这种模型确保了每个命…

5.9.8 最优化控制初探——PID参数优化

总目录&#xff1a;http://t.csdnimg.cn/YDe8m 5.9.8 最优化控制初探——PID参数优化 之前在“A_2_PID控制转速例程”例程中&#xff0c;PID参数是手动调节的。然而在已经获得系统完整数学模型的情况下&#xff0c;我们可以使用效率更高的方法&#xff0c;即最优化控制。先来看…

Nios II新建项目

1.Nios II Application and BSP form Template BSP:board support package&#xff08;板级支持包&#xff09; 2.Nios II Sotware Examples SOPC Information File name:选择项目文件夹下的 .sopcinfo 文件 Project name:自定义名称 Project location:Use default locatio…

删除镜像报容器依赖错误

1、删除镜像报容器依赖错误 出现这个错误的原因是因为5303b5323a4c容器使用了此镜像。解决&#xff1a;先停止容器、删除容器、之后再镜像即可。 2、查看镜像对应的容器 # docker ps -a | grep 611a37aa5ffc 3、先停止容器 # docker stop 5303b5323a4c 4、删除容器 # do…

Spring Boot: 2.7.x 至 2.7.18 及更旧的版本,漏洞说明

本文提供的修复指南将帮助开发者有效规避 CVE-2024-38808 和 CVE-2024-38809 的风险。如果你正在使用老版本的 Spring Boot&#xff0c;请尽快参考本文进行修复与升级。 此漏洞来源于spring官网&#xff1a;https://spring.io/blog/2024/08/14/spring-framework-releases-fixe…

flink车联网项目前篇:业务实现1(第67天)

系列文章目录 业务实现 3.1 创建catalog 3.1.1 vvp 3.1.2 mysqlcdc 3.1.2.1 使用限制 3.1.2.2 配置MySQL Catalog 3.1.3 xxxxpm 3.1.3.1 下载Paimon插件 3.1.3.2 在MaxCompute项目中上传Paimon插件 3.1.3.3 创建自定义Catalog类型 3.1.3.5 配置catalog 3.1.4 xxxxx 3.1.4.1 背…

Linux设置yum源为阿里云镜像源

一、验证网络是否可以连接阿里云镜像 #验证网络是否可以连接阿里云镜像 ping mirrors.aliyun.com如果ping不通&#xff0c;则找一台可以连接外网的电脑&#xff0c;ping一下mirrors.aliyun.com&#xff0c;找到mirrors.aliyun.com对应的ip。 二、 手动配置 #删除原yum源 rm -…

微信小程序免费《短视频去水印》

分享一个uniapp开发的微信小程序免费《短视频去水印》小程序 <template><view class"content"><view class"area-wrap"><textarea name"" v-model"state.content" maxlength"800" id"" cols…

接口自动化测试怎么做?该怎么学习

一. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…

《黑神话:悟空》媒体评分解禁 M站均分82

《黑神话&#xff1a;悟空》媒体评分现已解禁&#xff0c;截止发稿时&#xff0c;M站共有43家媒体评测&#xff0c;均分为82分。 部分媒体评测&#xff1a; God is a Geek 100&#xff1a; 毫无疑问&#xff0c;《黑神话&#xff1a;悟空》是今年最好的动作游戏之一&#xff…

linux系统安装mysql服务

linux系统安装mysql服务 1.下载安装包2.下载压缩文件解压安装3. 安装完启动服务4.查看安装密码5.使用上述密码登录6.修改密码7.创建一个root可以在任意主机远程连接数据库8.远程登录成功 1.下载安装包 https://downloads.mysql.com/archives/community/ mysql下载地址 2.下载…

【AI安防】YOLOv8 + OpenVINO2023 + QT5 电子围栏预警系统

引言 电子围栏是一种利用无线通信技术和地理信息系统实现的虚拟边界&#xff0c;用于监控和控制被监控对象的位置。它可以帮助我们实现对特定区域内的自定义对象进行实时检测、定位与跟踪。本文介绍了一种基于YOLOv8 OpenVINO2023 QT5 联合打造的实时高效、多线程、自定义对…