<一>.linux—mariadb
1>.linux下mariadb的安装
1.查找与mariadb相关的安转包版本
yum search mariadb
2.安装mariadb的客户软件包和服务软件包
yum install mariadb mariadb-server.x86_64 -y
3.启动mariadb服务
systemctl start mariadb
systemctl enable mariadb
4.mariadb监听的端口
netstat -antlpe | grep mysql
ss -antlpe | grep mysql
vim /etc/services #所有服务与端口默认的对应关系
5.只允许本地连接,阻断所有来自网络的连接
vim /etc/my.cnf
skip-networking=1
systemctl restart mariadb
2>.mariadb的简单操作
1.mariadb的基本操作
1.设置mysql的登陆密码
mysql_secure_installation
2.进入mysql数据库
mysql -uroot -pyy
3.显示包含的所有数据库
show databases;
4.进入work数据库
use work;
5.显示work数据库中的所有表
show tables;
6.显示work数据库中home表中的所有数据结构
desc home;
7.显示work数据库中home表中的所有数据内容
select * from home;
8.显示work数据库中home表中的age列数据内容
select age from home;
2.mariadb的创建、插入、更新、删除
1.创建一个命名为py_stud的数据库
create database py_stud;
2.在py_stud数据库中创建一个命名为python1的表格结构,支持中文显示
create table python1(name varchar(20),age int) default charset=utf8;
3.在py_stud数据库中创建一个命名为python1的表格结构,支持中文显示,如果不存在,则创建,否则不创建
create table if not exists python1(name varchar(20),age int) default charset=utf8;
4.向py_stud数据库中的python1表格插入内容;按照指定表格结构顺序向表中插入数据
insert into python1 values("ming",23);
5.向py_stud数据库中的python1表格插入内容;按照指定顺序向表中插入数据
insert into python1 (age,name) values(18,"xiao");
6.更新py_stud数据库中的python1表格内容,如果名字等于“xiao”,则更新age=21
update python1 set age=21 where name="xiao";
7.向 py_stud数据库中的python1表格结构 增加一列结构【score int】
alter table python1 add score int;
8.删除 py_stud数据库中的python1表格内容中name=“ming”的所有行;
delete from python1 where name="ming";
9.删除数据库或者表
drop table python; # 删除数据表格
drop database work; # 删除数据库work
10.在py_stud数据库中创建一个命名为python的表格结构后,使用命令给python表格添加支持中文显示
create table python( name varchar(20) not null, passwd varchar(5));
alter table python default charset=utf8;
11.在py_stud数据库中创建一个命名为jave的表格结构,并且使表头id为唯一主健
create table jave(id int primary key,name varchar(20));
3>.mariadb的用户和访问权限的操作
1.在数据库中创建用户kai,可在本机登陆,密码为kai
create user [email protected] identified by "kai";
2.在数据库中查看可以登陆的用户
select * from mysql.user
3.在数据库中创建用户kai,可在远程登陆,密码为kai
create user [email protected]"%" identified by "kai";
4.在数据库中给用户本地用户kai授予数据库bank的所有权限
grant all on *.* to [email protected]; # *.*表示所有数据库,所有数据表
grant all on bank.* to [email protected];
5.在数据库中刷新,重载授权表
flush privileges;
6.查看本地用户kai的用户授权
show grants for [email protected];
7.删除本地用户kai的在数据库bank的删除权限
revoke delete on bank.* from [email protected];
8.在数据库中删除本地用户kai
drop user [email protected];
4>.忘记mysql用户密码时,找回mysql密码
1.关闭mariadb服务
systemctl stop mariadb.service
2.跳过授权表,并且程序在后台运行,使任何人都可以登陆mysql数据库
mysqld_safe --skip-grant-table &
3.进入mysql数据库,更新mysql用户,设置用户【root】的密码为【yu】,
mysql
update mysql.user set Password=password("yu") where User="root";
4.关闭跳过授权表的进程,启动mariadb服务,使用新密码即可
ps aux | grep mysql #查看mysql的后台进程
kill -9 pid # 关闭mysql有关系的后台进程
systemctl start mariadb.service # 开启mariadb服务
mysql -uroot -pyu # 使用密码进入mysql数据库
5>.mysql的备份与恢复
1.将bank数据库【包含数据库结构】备份到当前路径bank.dump中
mysqldump -uroot -pyu bank >bank.dump
2.先在数据库中创建一个bank1数据库;然后将备份的文件bank.dump恢复到bank1中;
mysqladmin -uroot -pyu create bank1
mysql -uroot -pyu bank1<bank.dump
3.将bank数据库【不包含数据库结构】备份到当前路径nobank.dump中;恢复方法和【包含数据库结构】的数据库恢复一样
mysqldump -uroot -pyu --no-data bank >nobank.dump
4.将数据库中所有数据库全部备份到当前路径alldatabases.dump中
mysqldump -uroot -pyu --all-databases >alldatabases.dump
5.将备份的文件alldatabases.dump恢复到数据库中
mysql -uroot -pyu < alldatabases.dump
<二>.python—mariadb
1>.使用python在数据库中创建一个数据表,并且插入数据表数据
import pymysql
# 1.连接数据库
conn=pymysql.connect(
host="localhost", # 连接主机名
user="root", # 连接用户
passwd="yu", # 用户密码
db="py_stud", # 连接数据库
charset="utf8", # 指定编码格式
autocommit=True, # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
# 2.创建游标对象;必须有一个游标对象, 用来给数据库发送sql语句, 并执行的
cur=conn.cursor()
try:
crea_sql1="create table if not exists " \
"php(name varchar(20),age int) default charset=utf8;"
crea_sql2="insert into php values('小明',13);"
cur.execute(crea_sql1)
cur.execute(crea_sql2)
except Exception as e1:
print("创建数据表失败:", e)
else:
print("创建数据表成功:")

2>.使用python在数据库中创建一个数据表,并且插入数据表数据
import pymysql
# 1.连接数据库
conn=pymysql.connect(
host="localhost", # 连接主机名
user="root", # 连接用户
passwd="yu", # 用户密码
db="py_stud", # 连接数据库
charset="utf8", # 指定编码格式
autocommit=True, # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
# 2.创建游标对象;必须有一个游标对象, 用来给数据库发送sql语句, 并执行的
cur=conn.cursor()
try:
info=[("kai%s" %(i) ,i) for i in range(4)]
##############方法一##################
# insert_sql1="insert into php values('%s',%s);"
# for item in info:
# print("insert语句:",insert_sql1 %item )
# cur.execute(insert_sql1 %item)
##############方法二##################
insert_sql1="insert into php values(%s,%s);"
cur.executemany(insert_sql1,info)
except Exception as e2:
print("插入多条数据失败:",e)
else:
print("插入多条数据成功:")

3>.使用python查询数据库内容和游标指针的移动
import pymysql
# 1.连接数据库
conn=pymysql.connect(
host="localhost", # 连接主机名
user="root", # 连接用户
passwd="yu", # 用户密码
db="py_stud", # 连接数据库
charset="utf8", # 指定编码格式
autocommit=True, # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
# 2.创建游标对象;必须有一个游标对象, 用来给数据库发送sql语句, 并执行的
cur=conn.cursor()
try:
sqli="select * from php;"
resu=cur.execute(sqli)
############### 1.数据库查询 ##################
print(resu) # 默认不返回查询结果集, 返回数据记录数
print(cur.fetchone()) # 获取下一个查询结果集
print(cur.fetchmany(3)) # 获取制定个数个查询结果集
print(cur.fetchall()) # 获取所有的查询结果
print(cur.rowcount) # 返回执行sql语句影响的行数
############### 2.数据库游标指针的移动#############
print("正在移动指针到最开始......")
print(cur.scroll(0,"absolute"))
print(cur.fetchmany(3))
print("正在移动指针到倒数第2个......")
# 2:表示当前位置向后移动2行;-2:表示当前位置向前移动2行
cur.scroll(2, mode='relative')
print(cur.fetchall())
except Exception as e2:
print("插入多条数据失败:",e)
else:
print("数据成功:")

4>.使用python获取数据库的数据表的字段名和信息
import time
import pymysql
# 1. 连接数据库,
conn = pymysql.connect(
host="localhost", # 连接主机名
user="root", # 连接用户
passwd="yu", # 用户密码
db="py_stud", # 连接数据库
charset="utf8", # 指定编码格式
autocommit=True, # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
# python, 必须有一个游标对象, 用来给数据库发送sql语句, 并执行的.
# with语句实现的效果是: with语句执行结束, 如果成功, 则提交改变的数据, 如果不成功, 则回滚.
with conn:
# 1.判断是否连接?
print(conn.open)
# 2. 创建游标对象,
cur = conn.cursor()
# 3).执行数据库语句
sqli = "select * from php;"
result = cur.execute(sqli) # 默认不返回查询结果集, 返回数据记录数。
# 显示每列的详细信息
des = cur.description
print("表的描述:", des)
# 获取表头
print("表头:", ",".join([item[0] for item in des]))
cur.close()
conn.close()
print("with语句之外:", conn.open)
