当前位置:网站首页>mysql全解 Ubuntu/win10
mysql全解 Ubuntu/win10
2022-06-28 19:03:00 【落子无悔!】
文章目录
一. 知识链接
优秀的读者会给优秀的文章进行点赞的_…_
二. 数据库的核心命令
2.1 安装数据库
a.docker安装
docker安装和docker win10下mysql安装教程
在win10上面安装完毕docker后docker pull mysql:5.7 # 得到mysql镜像
加载为容器, 这里相当于创建了一个mysql服务器
然后在Ubuntu子系统上面安装mysql客户端sudo apt install mysql-client
此时可以通过远程访问mysql进行访问本地docker里面的mysqlmysql -h 主机IP -u root -p 密码
b. win10安装
c. Ubuntu安装
d. 更换mysql文件存储位置
# 修改文件存储路径为这个/home/nisl/system/mysql_data
sudo cp -ar /var/lib/mysql/* /home/nisl/system/mysql_data/
# 修改配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# datadir = /var/lib/mysql/
datadir = /home/nisl/system/mysql_data
# 安全保护
sudo vi /etc/apparmor.d/usr.sbin.mysqld
# Allow data dir access
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
# 修改成 -----------------------------
# Allow data dir access
# /var/lib/mysql/ r,
/home/nisl/system/ r,
# /var/lib/mysql/** rwk,
/home/nisl/system/** rwk,
# 访问控制
sudo vim /etc/apparmor.d/abstractions/mysql
#/var/lib/mysql{,d}/mysql{,d}.sock rw,
/home/nisl/system/mysql_data{
,d}/mysql{
,d}.sock rw,
# 重启服务
sudo service apparmor restart
sudo service mysql start
2.2 用户 增删改查
增加删除用户zhao,并修改权限,名称和密码
mysql> select user,host from mysql.user# 显示用户
mysql -u root -p # 登陆root用户
#开始创建用户zhao.by后面是密码 返回Query OK
mysql> create user [email protected] identified by 'zhao';
mysql> flush privileges;# 刷新
mysql> quit #退出
mysql -u zhao -p # 登陆新建用户
# 删除用户,在root用户下
mysql> drop user "gerrit"@"localhost" #删除用户gerrit
# 用户权限修改
root用户权限最高,拥有所有权限,首先在root用户下创建zhao,在修改zhao的权限
# 创建用户zhao,但是此时zhao权限为最低
mysql> create user [email protected] identified by 'zhao';
授权格式:grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';
# all privileges是所有权限
mysql> grant all privileges on `zhao`.* to 'zhao'@'localhost';
mysql> grant select on zhao.* to 'zhao'@'localhost'; /*给予查询权限*/
mysql> grant insert on zhao.* to 'zhao'@'localhost'; /*添加插入权限*/
mysql> grant delete on zhao.* to 'zhao'@'localhost'; /*添加删除权限*/
mysql> grant update on zhao.* to 'zhao'@'localhost'; /*添加权限*/
mysql> flush privileges; /*刷新权限*/
mysql> show grants; #查看当前用户权限
mysql> show grants for 'zhao'@'localhost'; # 查看zhao的权限
mysql> revoke delete on zhao.* from 'zhao'@'localhost'; # 删除权限
#更改用户名字
mysql> rename user 'zhao'@'localhost' to 'zjq'@'localhost';
# 修改用户密码
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
mysqladmin -uroot -p123456 password 1234abcd
格式:mysqladmin -u用户名 -p旧密码 password 新密码
2.3 数据库 增删改查
创建删除数据库,给新用户授权数据库权限
转自博客
mysql -u root -p # 登录用户
mysql> create database testDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # 创建数据库testDB
mysql> show databases # 显示数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| runoob |
| runoob_db |
| sys |
| testdb |
+--------------------+
# 授权用户zhao对testDB数据库的所有管理权限
mysql> grant all privileges on testDB.* to 'zhao'@'localhost';
# 数据库创建和删除
mysqladmin -u root -p create RUNOOB# 使用root用户创建RUNOOB数据库
mysql> create DATABASE RUNOOB;
mysqladmin -u root -p drop RUNOOB
mysql> drop database RUNOOB;
# 选择数据库
use mysql
mysql> show variables like 'character_set_database'; # 显示当前数据库中的字符集
mysql> alter database submission character set 'utf8'; # 修改数据库的字符集为utf8
2.4 表 增查改删
create table t1(age int, name varchar(10)) default charset=utf8; # 创建表
insert into t1(age,name) values(10,"丁丁"),(11,"泥泞"); # 插入数据
alter table t1 add column addr varchar(50); # 给上表增加列
drop table t1; # 删除表
select * from t1; # 显示数据表的全部内容
select age,name from t1; # 显示数据表的全部年龄和姓名
desc t1; # 显示数据表的表头和数据类型
update t1 set age=12 where name="丁丁"; # 修改name为丁丁的年龄
delete from t1 where name="丁丁"; # 删除name为丁丁的行
# Cannot delete or update a parent row: a foreign key constraint fails
SET foreign_key_checks = 0; // 先设置外键约束检查关闭
delete from t1 where name="丁丁"; // 删除数据,表或者视图
SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性
alter table t1 convert to character set utf8; # 设置News_news这张表为utf-8的格式
FLUSH PRIVILEGES;
# 创建两张表
create table boy(name varchar(10), age int, addr varchar(50));
create table girl(name varchar(10), age int, addr varchar(50));
# 插入并显示数据
insert into boy(name, age, addr)
values
("张飞",32,"北京"),
("谢霆锋",30,"南京"),
("李四",25,"天井"),
("甲流",33,"酒精"),
("鲁北",24,"南海");
select * from boy;
insert into girl(name, age, addr)
values
("泻立停",32,"北京"),
("佳美",30,"府东"),
("盼盼",23,"背黑锅"),
("欣欣",34,"安防"),
("玲玲",24,"安慰人");
select * from boy;
select * from girl;
select distinct age from boy; # 去重查询
# 查询age在25-30之间的
insert into boy values("彪子",28,"韩国");
insert into boy values("鬼小四",26,"几盆");
select * from boy where age between 25 and 30;
# 查询age 25和30的数据 固定范围
select * from boy where age in (25,30);
# 查询name中, 有四的列出来, %通配符,
select * from boy where name like "%四%";
select * from boy where name like "%四";
select * from boy where name like "彪%";
# 排序输出
select * from boy order by age;
# 降序
select * from boy order by age desc;
# 显示前两个
select * from boy limit 2;
# 查看表中字段
desc t1;
# 统计age数量, age,count(1)是表头
insert into boy values("王八那",26,"as");
insert into boy values("阿斯钢",26, "阿三哥");
select
age,count(1)
from boy
group by age;
# 多表查询
# 内连接 as后面跟的是查询出来的表头, on 后面是查询的条件
# 两张表的交集
select
a.`name` as "男名字", b.`name`as "女名字"
from
d1.boy a
inner join d1.girl b on a.age=b.age;
# 左连接, 以左边的a.age查询为主,
# 这里就不得不说下我们玩的DNF了, 创建一个账号,但是里面有很多角色,
# 左表为基础, 右表有就好了
insert into girl values("阿美美",32, "阿哥");
insert into girl values("慧海",24, "笔记");
select
a.`name` as "男名字",a.age as "男年龄", b.`name`as "女名字", b.age as "女年龄"
from
d1.boy a
left join d1.girl b on a.age=b.age;
# 右连接
insert into girl values("阿美美",32, "阿哥");
insert into girl values("慧海",24, "笔记");
select
a.`name` as "男名字",a.age as "男年龄", b.`name`as "女名字", b.age as "女年龄"
from
d1.boy a
right join d1.girl b on a.age=b.age;
# 系统函数
# 聚合函数
# 求表的sum, max min avg
select
sum(age), max(age),min(age),avg(age)
from boy;
# 字符串汇合
select
name, CONCAT("角色名",name,age,addr) as concat
from boy;
-- 将name字段的四换成一
select
name, replace(name,'四', '一')
from boy;
# 日期函数
select
now();
# 加两天
select
DATE_ADD("2019-1-26",interval 2 DAY);
select
DATE_SUB("2019-1-26",interval 2 DAY);
2.5 导出导入数据库和数据表
# 数据库导出
# mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
mysqldump -u root -p mydatabase > save.sql
# 导出表
#mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名.sql
mysqldump -u root -p mydatabase t1> mydatabase_t1.sql
# 导入数据库
# mysql -u用户名 -p密码 数据库名 < 数据库名.sql
# 第二种方法, 先常见数据库,然后在导入 source 数据库名.sql
# 导入表
# mysql -u用户名 -p密码 -d 数据库名 表名 < 导出的文件名.sql
转自博客
三、Python-mysql
3.1 安装插件包
python -m pip install mysql-connector -i https://pypi.mirrors.ustc.edu.cn/simple/
3.2 python与mysql建立连接
import mysql.connector
mydb = mysql.connector.connect(
host="localhost", # 数据库主机地址
user="root", # 数据库用户名
passwd="yourpassword" # 数据库密码
)
print(mydb)
问题1 ‘calling_sha2_password’ is not supported.
解决方式 摘自菜鸟教程
- 修改myini
[client]
# 设置mysql客户端默认字符集
# 修改为utf8mb4
# default-character-set=utf8
default-character-set=utf8mb4
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录 D:\\ProgramFiles
basedir=D:\\ProgramFiles\\mysql-8.0.17-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\ProgramFiles\\mysql-8.0.17-winx64
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
# character-set-server=utf8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
- 修改密码格式
# 修改加密规则为永不过期
#注意:password 改为你的密码,别老老实实照抄,之前本人便以为 password 指代密码不用改变,结果一通指令下去,mysql 登不上了,只好重新初始化数据库
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新一下用户的密码加密方式为之前版本的方式
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
#刷新权限
mysql> FLUSH PRIVILEGES;
- 重启,这是再看,已经修改了身份验证插件。
import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="root",
passwd="123456",
# auth_plugin='mysql_native_password'
)
print(mydb)
输出: <mysql.connector.connection.MySQLConnection object at 0x00000211F73DB9E8>
3.3 python操作数据库
# 创建数据库
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
# database="runoob_db" # 也可以直接打开用户下数据库
)
mycursor = mydb.cursor() # 创建游标
print("当前用户下的数据库包含如下:")
mycursor.execute("SHOW DATABASES")
for x in mycursor:print(x)
try:
mycursor.execute("CREATE DATABASE runoob_db") # 创建名为runoob_db的数据库
print("创建数据库runoob_db")
mycursor.execute("SHOW DATABASES")
for x in mycursor:print(x)
except Exception as e:
print("数据库已经存在runoob_db")
print(e)
# 删除数据库
# mycursor.execute("drop DATABASE runoob_db")
当前用户下的数据库包含如下:
('information_schema',)
('mysql',)
('performance_schema',)
('sys',)
创建数据库runoob_db
('information_schema',)
('mysql',)
('performance_schema',)
('runoob_db',)
('sys',)
3.4 python操作数据表
# 创建数据表
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 第一种方式,先建表,在添加主键值
try:
# 创建表 sites,字段为 name 和 url
mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")
print("创建表,并增加主键 id")
mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
mycursor.execute("SHOW TABLES")
for x in mycursor:print(x)
except Exception as e:
print(e)
# 给sites添加主键
mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
mycursor.execute("SHOW TABLES")
for x in mycursor:print(x)
# 第二种方式,直接建表,包括主键值和两个参数
# mycursor.execute("CREATE TABLE sites2 (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
# 删除数据表 sites)
mycursor.execute("DROP TABLE IF EXISTS sites")
- 表的插入,创建
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 第一种方法 插入一条数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount == 1, "记录插入成功。")
print("1 条记录已插入, ID:", mycursor.lastrowid)
# 第二种方法 插入批量数据
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = [
('Google', 'https://www.google.com'),
('Github', 'https://www.github.com'),
('Taobao', 'https://www.taobao.com'),
('stackoverflow', 'https://www.stackoverflow.com/')
]
mycursor.executemany(sql, val)
mydb.commit() # 数据表内容有更新,必须使用到该语句
print(mycursor.rowcount, "记录插入成功。")
- 表的查询
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 新建table删除table
# mycursor.execute("DROP TABLE IF EXISTS sites2")
# mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
''' # 插入部分 sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = ("RUNOOB", "https://www.runoob.com") mycursor.execute(sql, val) mydb.commit() # 数据表内容有更新,必须使用到该语句 print(mycursor.rowcount == 1, "记录插入成功。") print("1 条记录已插入, ID:", mycursor.lastrowid) # 第二种方法 插入批量数据 sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = [ ('Google', 'https://www.google.com'), ('Github', 'https://www.github.com'), ('Taobao', 'https://www.taobao.com'), ('stackoverflow', 'https://www.stackoverflow.com/') ] mycursor.executemany(sql, val) mydb.commit() # 数据表内容有更新,必须使用到该语句 print(mycursor.rowcount, "记录插入成功。") '''
# 第一种查询方法
mycursor.execute("SELECT * FROM sites")
myresult = mycursor.fetchall() # fetchall() 获取所有记录
for x in myresult:print(x)
# 第二种 读取特定字段
print("读取特定字段")
mycursor.execute("SELECT name, url FROM sites")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 第三种 如果我们要读取指定条件的数据,可以使用 where 语句:
print("name = RUNOOB关键字的")
mycursor.execute("SELECT * FROM sites WHERE name ='RUNOOB'")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 第四种 指定函数 不能放到查询的前面,不知道为啥
# print("读取特定字段 第一个")
# mycursor.execute("SELECT * FROM sites")
# myresult = mycursor.fetchone()
# print(myresult)
# 第五种 通配符%xx%
print("读取特定字段 url中包含oo的")
mycursor.execute("SELECT * FROM sites where url like '%oo%'")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 第五种加一 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义查询的条件:
print("使用%s占位")
sql = "SELECT * FROM sites WHERE name = %s"
na = ("RUNOOB", )
mycursor.execute(sql, na)
myresult = mycursor.fetchall()
for x in myresult:print(x)
print("id = 2")
mycursor.execute("SELECT * FROM sites where id like 2")
myresult = mycursor.fetchall()
for x in myresult:print(x)
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
读取特定字段
('RUNOOB', 'https://www.runoob.com')
('Google', 'https://www.google.com')
('Github', 'https://www.github.com')
('Taobao', 'https://www.taobao.com')
('stackoverflow', 'https://www.stackoverflow.com/')
name = RUNOOB关键字的
(1, 'RUNOOB', 'https://www.runoob.com')
读取特定字段 url中包含oo的
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
使用%s占位
(1, 'RUNOOB', 'https://www.runoob.com')
id = 2
(2, 'Google', 'https://www.google.com')
- 表的排序
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 新建table删除table
# mycursor.execute("DROP TABLE IF EXISTS sites2")
# mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
''' # 插入部分 sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = ("RUNOOB", "https://www.runoob.com") mycursor.execute(sql, val) mydb.commit() # 数据表内容有更新,必须使用到该语句 print(mycursor.rowcount == 1, "记录插入成功。") print("1 条记录已插入, ID:", mycursor.lastrowid) # 第二种方法 插入批量数据 sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = [ ('Google', 'https://www.google.com'), ('Github', 'https://www.github.com'), ('Taobao', 'https://www.taobao.com'), ('stackoverflow', 'https://www.stackoverflow.com/') ] mycursor.executemany(sql, val) mydb.commit() # 数据表内容有更新,必须使用到该语句 print(mycursor.rowcount, "记录插入成功。") '''
# 查询结构排序,仅仅是输出的时候进行了排序,不改变源表
# 使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
# # 对name排序
print("对name升序排序")
mycursor.execute("SELECT * FROM sites ORDER BY name")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# # 对url排序 降序
print("对url排序 降序")
mycursor.execute("SELECT * FROM sites ORDER BY url desc")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 设置查询数量 "LIMIT" 语句来指定
print("LIMIT 设置查询数量")
mycursor.execute("SELECT * FROM sites LIMIT 3")
myresult = mycursor.fetchall()
for x in myresult:print(x)
# 也可以指定起始位置,使用的关键字是 OFFSET:
print("LIMIT 设置查询数量,指定起始位置")
mycursor.execute("SELECT * FROM sites LIMIT 3 OFFSET 1")
myresult = mycursor.fetchall()
for x in myresult:print(x)
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
对name升序排序
(3, 'Github', 'https://www.github.com')
(2, 'Google', 'https://www.google.com')
(1, 'RUNOOB', 'https://www.runoob.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(4, 'Taobao', 'https://www.taobao.com')
对url排序 降序
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
LIMIT 设置查询数量
(1, 'RUNOOB', 'https://www.runoob.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
LIMIT 设置查询数量,指定起始位置
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
- 删除数据mycursor.execute(“DELETE from sites where name = ‘Google’”)
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 新建table删除table
# mycursor.execute("DROP TABLE IF EXISTS sites2")
# mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
''' # 插入部分 sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = ("RUNOOB", "https://www.runoob.com") mycursor.execute(sql, val) mydb.commit() # 数据表内容有更新,必须使用到该语句 print(mycursor.rowcount == 1, "记录插入成功。") print("1 条记录已插入, ID:", mycursor.lastrowid) # 第二种方法 插入批量数据 sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = [ ('Google', 'https://www.google.com'), ('Github', 'https://www.github.com'), ('Taobao', 'https://www.taobao.com'), ('stackoverflow', 'https://www.stackoverflow.com/') ] mycursor.executemany(sql, val) mydb.commit() # 数据表内容有更新,必须使用到该语句 print(mycursor.rowcount, "记录插入成功。") '''
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
# 删除记录使用 "DELETE FROM" 语句:,
# 注意一定要指定where,不然整表删除
# mycursor.execute("DELETE from sites where name = 'Google'")
# 为了防止SQL注入攻击,使用%s占位符转义删除语句条件
sql = "DELETE FROM sites WHERE name = %s"
na = ("Google", )
mycursor.execute(sql, na) # 与上一个一致
mydb.commit()
print(mycursor.rowcount, " 条记录删除")
# print("删除后")
# mycursor.execute("SELECT * from sites")
# for i in mycursor.fetchall():print(i)
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
- 更新表数据 mycursor.execute(“UPDATE sites SET name = ‘guge’ WHERE name = ‘Google’”)
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd=password_my,
database="runoob_db"
)
mycursor = mydb.cursor()
# 注意一定要确定where条件语句,不然整个表格都会改变
print("当前表中数据")
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
mycursor.execute("UPDATE sites SET name = 'guge' WHERE name = 'Google'")
mydb.commit() # 只要是修改表,这条命令就要用到
print(mycursor.rowcount, " 条记录被修改")
print("修改后的,将Google修改为guge表中数据")
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
mycursor.execute("UPDATE sites SET name = 'Google' WHERE name = 'guge'")
mydb.commit() # 只要是修改表,这条命令就要用到
print(mycursor.rowcount, " 条记录被修改")
print("修改回来的")
mycursor.execute("SELECT * from sites")
for i in mycursor.fetchall():print(i)
当前表中数据
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'Google', 'https://www.google.com')
1 条记录被修改
修改后的,将Google修改为guge表中数据
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'guge', 'https://www.google.com')
1 条记录被修改
修改回来的
(1, 'RUNOOB', 'https://www.runoob.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'Google', 'https://www.google.com')
3.5 正则表达式
mycursor.execute("select name from employee_tbl where name regexp '^小'") # 所有字段中以小开头的
for res in mycursor.fetchall(): print(res)
mycursor.execute("select * from employee_tbl where name regexp '明$'") # 所有字段中以明为结尾的
for res in mycursor.fetchall(): print(res)
mycursor.execute("select * from employee_tbl where name regexp '丽'") # 所有字段中含有丽的
for res in mycursor.fetchall(): print(res)
mycursor.execute("select * from employee_tbl where name regexp '^[aeiou]|ok$'") # 所有字段中以aeiou开头的,或者以ok结尾的
for res in mycursor.fetchall(): print(res)
四. MySQL具体应用
4.1 设置每天自动备份mysql数据库
04 16 * * * cd /home/nisl/ && ./save_mysql.py /mnt/e/mysql_save/
配置定时任务见7.32节
#!/usr/bin/env python3
# save_mysql.py
import os,sys
import time
# 功能: 运行脚本能够自动保存mysql数据库的内容, 并进行压缩, 按照时间进行保存
# 参数: 运行时传入的第一个参数是需要保存到的路径文件夹
save_path = sys.argv[1]
if not os.path.exists(save_path):
os.makedirs(save_path)
''' mysqldump Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --help '''
db_host="主机ip地址"
db_user="用户"
db_passwd="密码"
db_name="数据库名称"
db_charset="utf8"
db_backup_name=os.path.join(save_path, r"dailyreport-%s.sql" % (time.strftime("%Y-%m-%d-%H-%M")))
if __name__ == "__main__":
print(f"begin to dump mysql database crm...save to {
db_backup_name}");
# 其实主要就是执行下面这句话, 如果是本地的mysql, 可以去掉-h{db_host}
os.system(f"mysqldump -h{
db_host} -u{
db_user} -p{
db_passwd} {
db_name} \
--default_character-set={
db_charset} > {
db_backup_name} && gzip {
db_backup_name}")
4.2 修改服务器上面MySQL整个列的数据
功能:
将整个数据库中file_path字段里面的~/system改成/home/nisl/syste
pip install mysql-connector # 安装
import mysql.connector
mydb = mysql.connector.connect(
host="ip",
user="user",
passwd="passwd",
)
mycursor = mydb.cursor()
mycursor.execute("use 数据库")
# 第二种 读取特定字段
print("读取特定字段")
mycursor.execute("SELECT * FROM file")
myresult = mycursor.fetchall()
for i, x in enumerate(myresult):
path = x[6].replace("~/system", "/home/nisl/system") # /home/nisl/system
mycursor.execute(f"UPDATE file SET file_path = '{path}' WHERE file_path = '{x[6]}'")
print(mycursor.rowcount, " 条记录被修改")
mydb.commit()
边栏推荐
- Oom out of memory memory overflow
- 微博评论的高性能高可用计算架构方案
- There are thousands of roads. Why did this innovative storage company choose this one?
- 华为云OneMeeting告诉你全场景会议这么开!
- MongoDB系列之MongoDB工作原理简单介绍
- Installing the nodejs environment
- 闭包的理解
- High performance and high availability computing architecture scheme commented by Weibo
- PY SQL可以获取到表结构吗?
- Memory leak
猜你喜欢

POI excel conversion tool

C# 41. int与string互转

Anonymous function this pointing and variable promotion

618 activity season - the arrival of special discounts for hundreds of low code platforms

Cross cluster deployment of helm applications using karmada

道路千万条,为什么这家创新存储公司会选这条?

小白创业做电商,选对商城系统很重要!

How does the computer check whether the driver is normal

C# 41. Int to string

微信小程序接入百度统计报错 Cannot read property ‘mtj‘ of undefined
随机推荐
Memory leak
月环比sql实现
async-validator. JS data verifier
Grafana draws the trend chart
Oom out of memory memory overflow
3D rotatable particle matrix
找出连续7天登陆,连续30天登陆的用户
Live app system source code, automatically playing when encountering video dynamically
Windows 64位下载安装My SQL
数据库学习笔记(SQL04)
try except 添加辅助新列
《数字经济全景白皮书》消费金融数字化篇 重磅发布
Try except add auxiliary new column
华为云OneMeeting告诉你全场景会议这么开!
How to resolve kernel errors? Solution to kernel error of win11 system
Shell脚本批量修改文件目录权限
我是刚购买的adb mysql服务,我每做一个操作,比如建表,都会弹出这个问题,请问这是什么问题?
About Significance Tests
In which industries did the fire virtual human start to make efforts?
High performance and high availability computing architecture scheme commented by Weibo