示例:
mysqldump -uroot -p123456 db7 > D:\a.sql
第一步:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-07J0iytr-1681261770809)(imgs\Dingtalk_20230404151124.jpg)]
第二步:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCkFixau-1681261770810)(imgs\企业微信截图_20230404151347.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URHLwJck-1681261770811)(imgs\Dingtalk_20230404151513.jpg)]
事务:transaction,一系列要发生的连续的操作。
事务安全:一种保护连续操作的机制。
事务安全的意义:保证数据操作的完整性。
用 BEGIN,ROLLBACK,COMMIT来实现:
python中使用pymysql实现事务:
import pymysql
con = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456',
db='db6'
)
cur = con.cursor()
try:
sql1 = 'INSERT INTO USER VALUE (NULL, "小明", 30);'
sql2 = 'INSERT INTO USER VALUE (NULL, "小红", 40);'
sql3 = 'INSERT INTO USER VALUE (NULL, "小刚", 50);'
cur.execute(sql1)
cur.execute(sql2)
cur.execute(sql3)
con.commit()
print("完成")
except Exception as e:
print('出现异常')
con.rollback()
sql4 = "SELECT * FROM USER;"
cur.execute(sql4)
aaa = cur.fetchall()
for i in aaa:
print(i)
cur.close() #关闭游标
con.close() #关闭连接
MySQL中的函数主要分为以下四类:字符串函数、数值函数、日期函数、流程函数。
mysql中内置了很多字符串函数,常用的几个如下:
函数 | 功能 |
---|---|
CONCAT(S1,S2,…Sn) | 字符串拼接,将S1,S2,… Sn拼接成一个字符串 |
LOWER(str) | 将字符串str全部转为小写 |
UPPER(str) | 将字符串str全部转为大写 |
LPAD(str,n,pad) | 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 |
RPAD(str,n,pad) | 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 |
TRIM(str) | 去掉字符串头部和尾部的空格 |
SUBSTRING(str,start,len) | 返回从字符串str从start位置起的len个长度的字符串 |
演示如下:
concat:字符串拼接
select concat('Hello' , ' MySQL');
lower : 全部转小写
select lower('Hello');
upper : 全部转大写
select upper('Hello');
lpad : 左填充
select lpad('01', 5, '-');
rpad : 右填充
select rpad('01', 5, '-');
trim : 去除空格
select trim(' Hello MySQL ');
substring : 截取子字符串
select substring('Hello MySQL',1,5);
案例:
由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员
工的工号应该为00001。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HIqy14Wq-1681261770812)(imgs\企业微信截图_20230404171408.png)]
update emp set workno = lpad(workno, 5, '0');
处理完毕之后,具体的数据为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lK46FEg-1681261770813)(imgs\企业微信截图_20230404171618.png)]
常见的函数如下:
函数 | 功能 |
---|---|
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x,y) | 返回x/y的模 |
RAND() | 返回0~1内的随机数 |
ROUND(x,y) | 求参数x的四舍五入的值,保留y位小数 |
演示如下:
ceil:向上取整
select ceil(1.1);
floor:向下取整
select floor(1.9);
mod:取模
select mod(7,4);
rand:获取随机数
select rand();
round:四舍五入
select round(2.344,2);
案例:
通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础
上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0
select lpad(round(rand()*1000000 , 0), 6, '0');
常见的日期函数如下:
函数 | 功能 |
---|---|
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前日期和时间 |
YEAR(date) | 获取指定date的年份 |
MONTH(date) | 获取指定date的月份 |
DAY(date) | 获取指定date的日期 |
DATE_ADD(date, INTERVAL exprtype) | 返回一个日期/时间值加上一个时间间隔expr后的时间值 |
DATEDIFF(date1,date2) | 返回起始时间date1 和 结束时间date2之间的天数 |
演示如下:
curdate:当前日期
select curdate();
curtime:当前时间
select curtime();
now:当前日期和时间
select now();
YEAR , MONTH , DAY:当前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());
date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );
datediff:获取两个日期相差的天数
aselect datediff('2021-10-01', '2021-12-01');a
案例:
查询所有员工的入职天数,并根据入职天数倒序排序。
思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。
# 数据库准备
CREATE TABLE t_emp(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(22) NOT NULL,
age INT(10) NOT NULL,
entrydate DATE NOT NULL
)
INSERT INTO t_emp VALUE (NULL, "张三", 20, "2023-01-03");
INSERT INTO t_emp VALUE (NULL, "李四", 30, "2023-01-05");
INSERT INTO t_emp VALUE (NULL, "王五", 40, "2023-01-07");
INSERT INTO t_emp VALUE (NULL, "赵六", 50, "2023-01-09");
# 查询语句
select
name, datediff(curdate(), entrydate) as 'entrydays'
from
emp
order by
entrydays desc;
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
函数 | 功能 |
---|---|
IF(value , t , f) | 如果value为true,则返回t,否则返回f |
IFNULL(value1 , value2) | 如果value1不为空,返回value1,否则返回value2 |
CASE WHEN [ val1 ] THEN [res1] …ELSE [ default ] END | 如果val1为true,返回res1,… 否则返回default默认值 |
CASE [ expr ] WHEN [ val1 ] THEN [res1] … ELSE [ default ] END | 如果expr的值等于val1,返回res1,… 否则返回default默认值 |
if
select if(false, 'Ok', 'Error');
ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
案例:
判断学员的成绩是否合格
CREATE TABLE score(
id INT COMMENT 'ID',
NAME VARCHAR(20) COMMENT '姓名',
math INT COMMENT '数学',
english INT COMMENT '英语',
chinese INT COMMENT '语文'
)
INSERT INTO
score (id, NAME, math, english, chinese)
VALUES
(1, 'Tom', 67, 88, 95),
(2, 'Rose' , 23, 66, 90),
(3, 'Jack', 56, 98, 76);
SELECT
id,
NAME,
(CASE WHEN math >= 85 THEN '优秀' WHEN math >=60 THEN '及格' ELSE '不及格' END )
'数学',
(CASE WHEN english >= 85 THEN '优秀' WHEN english >=60 THEN '及格' ELSE '不及格' END )
'英语',
(CASE WHEN chinese >= 85 THEN '优秀' WHEN chinese >=60 THEN '及格' ELSE '不及格' END )
'语文'
FROM score;
到此mysql的常见函数我们就学完了。
e’ , 23, 66, 90),
(3, ‘Jack’, 56, 98, 76);
SELECT
id,
NAME,
(CASE WHEN math >= 85 THEN ‘优秀’ WHEN math >=60 THEN ‘及格’ ELSE ‘不及格’ END )
‘数学’,
(CASE WHEN english >= 85 THEN ‘优秀’ WHEN english >=60 THEN ‘及格’ ELSE ‘不及格’ END )
‘英语’,
(CASE WHEN chinese >= 85 THEN ‘优秀’ WHEN chinese >=60 THEN ‘及格’ ELSE ‘不及格’ END )
‘语文’
FROM score;
到此mysql的常见函数我们就学完了。