MySQL命令笔记+Python案例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL命令笔记+Python案例

MySQL数据库


1. 概要


  • MySQL安装 & 配置
  • MySQL的启动和关闭
  • 指令
  • Python第三方模块,发送指令并获取MySQL返回的结果。


2. 安装MySQL


MySQL,本质上就是一个软件。


  • 8.x
  • 5.x,在这里安装5.7.31版本


2.1 下载


https://downloads.mysql.com/archives/community/


2.2 安装


解压安装包放在自己知道的目录


2.3 创建配置文件


2.4 初始化


管理员终端cmd输入:

>>> "D:\mysql-5.7.31-winx64\bin\mysqld.exe" --initialize-insecure



安装完成后在mysql目录下会生成一个data目录


3. 启动MySQL


启动MySQL一般有两种方式:


  • 临时启动(不建议)


回车后无保存即启动成功,关闭cmd窗口则关闭MySQL

>>> D:\mysql-5.7.31-winx64\bin\mysqld.exe


制作成Windows服务,服务来进行关闭和开启


  • 制作服务
    57为命名
>>> "D:\mysql-5.7.31-winx64\bin\mysqld.exe" --install mysql57



命令模式启动和关闭服务

>>> net start mysql57 // 开启服务
>>> net stop mysql57  // 关闭服务


图形化模式启动和关闭服务


4. 连接测试


发送MySQL指令分类:


  • 代码类:Python/Java
  • 工具类:Navicat Premium
  • MySQL自带工具


MySQL自带工具(命令行):


规范操作:-h 连接地址 、-P 连接端口、-u 用户名、-p 密码

>>> "D:\mysql-5.7.31-winx64\bin\mysql.exe" -h 127.0.0.1 -P 3306 -u root -p 


简化操作1:如果是在本机上进行连接可不用-h、-P 命令为:

>>> "D:\mysql-5.7.31-winx64\bin\mysql.exe" -u root -p


简化操作2:如果将D:\mysql-5.7.31-winx64\bin添加到环境变量,命令为:

>>> mysql -u root -p



4.1 设置密码

>>> set password = password("root");



4.2 查看已有的文件夹(数据库)

>>> show databases;



4.3 退出(关闭连接)

>>> exit;



4.4 再连接MySQL(输入密码)


5. 忘记密码(解决:重置密码)


Step1:关闭mysql服务


Step2:在my.ini中添加一行

skip-grant-tables=1



Step3:重新启动MySQL服务


Step4:此时进入MySQL命令行无需密码


Step5:设置新密码(执行两步命令)

>>> use mysql;
>>> update user set authentication_string = password('新密码'),password_last_changed=now() where user='root';



Step6:在my.ini配置文件中删除 skip-grant-tables=1


Step7:登录测试


6. MySQL指令


MySQL与平时认知比较

MySQL 认知
数据库 文件夹
数据表 文件


6.1 数据库管理(文件夹)


  • 查看已有的数据库(文件夹)
show databases;


  • 创建数据库(文件夹)
create database 数据库名字;


加编码 & 排序

create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;


  • 删除数据库(文件夹)
drop database 数据库名字;


  • 进入数据库(文件夹)
use 数据库名字;


  • 查看文件夹下所有的数据表(文件)
show tables;


6.2 数据表的管理(文件)


  • 进入数据库(进入文件夹)
use 数据库;


  • 查看当前数据库下的所有表(文件)
show tables;


  • 创建表(文件)
create table tb1(
  id int,
  name varchar(16),
  age int
) default charset=utf8;
create table tb1(
  id int,
  name varchar(16) not null,  -- 不允许为空
  age int null        -- 允许为空(默认)
) default charset=utf8;
create table tb1(
  id int,
  name varchar(16),
  age int default 3   -- 插入数据时,age列的值默认为3
) default charset=utf8;
create table tb1(
  id int primary key,   -- 主键(不允许为空,不允许重复)
  name varchar(16),
  age int
) default charset=utf8;
create table tb1(
  id int auto_increament primary key,   -- 主键(不允许为空,不允许重复)、自递增
  name varchar(16),
  age int
) default charset=utf8;
  • 删除表
drop table 表名称;


  • 查看表属性
desc 表名称;


常用数据类型:


  • tinyint
有符号,取值范围:-128 ~ 127 (有正有负)
无符号,取值范围:0 ~ 255 (只有正)


  • int
int         表示有符号,取值范围:-2147483648 ~ 2147483647
int unsigned    表示无符号,取值范围:0 ~ 4294967295


  • bigint
有符号,取值范围:-9223372036854775808 ~ 9223372036854775807
无符号,取值范围:0 ~ 18446744073709551615


练习:

# 创建表
create table tb1(
  id bigint not null auto_increment primary key,    
  salary int,
  age tinyint
)default charset=utf8;
# 插入数据
insert into tb1(salary,age) values(10000,19); # 单行插入
insert into tb1(salary,age) values(10000,19),(50000,20);  #批量插入
# 查看表中的数据
select * from tb1;


  • float
  • double
  • decimal


准确的小数值,m是数字总个数(负号不算),d是小数点后个数。m最大值为65,d最大值为30。
例如:
create table tb2(
  id bigint not null auto_increment primary key,    
  salary decimal(8,2)
)default charset=utf8;
insert into tb2(salary) values(1.28);
insert into tb2(salary) values(122115.11);


  • char,速度快
定长字符串。最多容纳255个字符。
char(11),固定用11个字符串进行存储,若没有11个字符,也会按照11个字符存储。
create table tb3(
  id bigint not null auto_increment primary key,    
  mobile char(11)
)default charset=utf8;
insert into tb3(mobile) values("aaa");


  • varchar,节省空间
变长字符串。
varchar(11),真实数据有多长就按照多长存储。
create table tb4(
  id bigint not null auto_increment primary key,    
  mobile varchar(11)
)default charset=utf8;
insert into tb3(mobile) values("aaa");


  • text
text数据类型用于保存大字符串,最多可到65535个字符
一般情况下,用于文章、新闻等。
create table tb5(
  id bigint not null auto_increment primary key,    
  title varchar(128),
  content text
)default charset=utf8;


  • mediumtext
范围:16777215


  • longtext
范围:4GB


  • datetime
YYYY-MM-DD HH:MM:SS


  • date
YYYY-MM-DD


练习:

create table tb6(
  id bigint not null auto_increment primary key,    
  name varchar(64) not null,
    password char(64) not null,
    email varchar(64) not null,
    age tinyint,
    salary decimal(10,2),
  ctime datetime
)default charset=utf8;
insert into tb7(name,password,email,age,salary,ctime) values("刘备","123","xx@qq.com",50,1000.11,"2023-1-1 11:11:10");



6.3 数据行操作


1. 新增数据

insert into 表名(列名,列名) values(值,值);
insert into 表名(列名,列名) values(值,值),(值,值),(值,值);


2. 删除数据

delete from 表名;
delete from 表名 where 条件;
delete from tb6
delete from tb6 where id = 3;
delete from tb6 where id = 4 and name="刘备";
delete from tb6 where id > 4;


3. 修改数据

update 表名 set 列=值;
update 表名 set 列=值,列=值;
update 表名 set 列=值 where 条件;
update tb6 set password="aaa";
update tb6 set email="aaa" where id > 5;


4. 查询数据

select * from 表名称;
select * 列名称,列名称 from 表名称;
select 列名称,列名称 from 表名称 where 条件;
select * from tb6;
select id,name from tb6;
select id,name from tb6 where id > 10;
select id,name from tb6 where name="xx" and password="xx";


7.案例:员工管理


7.1 创建表结构


  • 使用MySQL内置工具(命令)


  • 创建数据库:unicom
  • 数据一张表:admin
表名:admin
列:
id,整形,自增,主键。
username 字符串 不为空
password 字符串 不为空
mobile 字符串 不为空


  • Python代码实现:


  • 添加用户
  • 删除用户
  • 查看用户
  • 更新用户信息
# 创建数据库
create database unicom;
# 创建表
create table admin(
 id bigint not null auto_increment primary key,
 username char(30) not null,
 password char(30) not null,
 mobile char(30) not null
 )default charset=utf8;


7.2 Python操作MySQL


1. 写入数据


使用Python写入数据

import pymysql
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='abc123.', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
cursor.execute("insert into admin(username,password,mobile) values('liubei','123456','12345678900')")
conn.commit()
# 3.关闭连接
cursor.close()
conn.close()


占位符写法:

import pymysql
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='abc123.', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.发送指令
sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
cursor.execute(sql, ["zhangfei", "456789", "12222222222"])
conn.commit()
# 3.关闭连接
cursor.close()
conn.close()


动态写入数据:

import pymysql
while True:
    user = input('请输入用户名:')
    if user.upper() == 'Q':         # upper小写字母转换为大写
        break
    pwd = input('请输入密码:')
    mobile = input('手机号:')
    # 1.连接MySQL
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='abc123.', charset='utf8', db='unicom')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 2.发送指令
    sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
    cursor.execute(sql, [user, pwd, mobile])
    conn.commit()
    # 3.关闭连接
    cursor.close()
    conn.close()


2. 查询数据

import pymysql
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='abc123.', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.执行查询的指令
cursor.execute("select * from admin where id > %s", [1])
data_list = cursor.fetchall()       # fetchall获取数据,fetchone获取符合条件的第一条数据
# 循环按照每行显示
for row_dict in data_list:
    print(row_dict)
# 3.关闭连接
cursor.close()
conn.close()


3. 删除数据

import pymysql
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='abc123.', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.执行删除的指令
cursor.execute("delete from admin where id=%s", [3])
conn.commit()
# 3.关闭连接
cursor.close()
conn.close()


4. 修改数据

import pymysql
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='abc123.', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 2.执行删除的指令
cursor.execute("update admin set password=%s where id=%s", ["15555555555", 2])
conn.commit()
# 3.关闭连接
cursor.close()
conn.close()


注意:


  • 在进行 新增、删除、修改时,一定要记得commit,不然没有数据。
  • 在查询时,不需要commit,但需要使用fetchall、fetchone获取数据
  • 不用用Python的字符串格式化进行拼接(会被SQL注入),一定要用execute+参数
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
55 1
思科设备巡检命令Python脚本大集合
|
27天前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
46 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
14天前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
19 3
|
17天前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
20天前
|
Python
Python PDB命令介绍
【10月更文挑战第15天】 使用PDB的方式有两种,其中一种是在脚本中添加代码,不觉得这种方式比print好在哪里,所以这种方式此文不表。这里我们只学习PDB的命令行使用方式
33 4
|
27天前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
18 3
|
26天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
302 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
25天前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
48 0
|
27天前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
15 0
|
27天前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
12 0