MySql学习笔记——进阶(三)

常用函数


1 字符串函数

  • concat函数
    concat(s1,s2…sn)将传入的字符连接成一个字符串;
    任何字符串与null进行连接结果都是null。
select concat('a','b','c');

  在这里插入图片描述

select concat('a','b',null);

  在这里插入图片描述

  • insert函数
    insert(str,x,y,instr) 将字符串str从x位置开始,y个字符长的子串替换为指定的字符。
select insert('abcdefg',3,2,'**');

  在这里插入图片描述

  • lower和upper函数
    lower(str)和upper(str)将字符串转成小写或大写。
select lower('ABCD');
slect upper('ahdbSFsnuj');

  在这里插入图片描述在这里插入图片描述

  • left和right函数
    left(str,x)和right(str,x)分别返回字符串最左边的x个字符和最右边的x个字符;如果第二个参数为null,那么不返回任何字符。
SELECT LEFT('1234567890',3)

  在这里插入图片描述

SELECT RIGHT('1234567890',3);

  在这里插入图片描述

  • lpad和rpad函数
    lpad(str,n,pad)和rpad(str,n,pad)用字符串pad对str最左边或最右边进行填充,直到长度为n个字符长度。
select lpad('my',5,123456);

  在这里插入图片描述

select rpad('my',6,123456);

  在这里插入图片描述

  • ltrim、rtrim和trim函数
    ltrim(str)和rtrim(str) 去掉字符串当中最左侧和最右侧的空格;
    trim(str) 去掉字符串左右的空格。
SELECT LTRIM('   12345   ');
SELECT RTRIM('   12345   ');

  在这里插入图片描述在这里插入图片描述

SELECT TRIM('   12345   ');

  在这里插入图片描述

  • repeat函数
    repeat(str,x)重复字符串x次
select repeat('123',4);

  --结果是 123123123123

  • replace函数
    replace(str,a,b) 用b替换a
select replace('abcdefg','c','**');

  在这里插入图片描述

  • substring函数
    substring(str,x,y) 返回字符串str中第x位置起y个字符长度的字符。
select substr('abcdefg',3,2);

  在这里插入图片描述

2 数值函数

  • abs函数
    abs(x) 返回x的绝对值
SELECT ABS(-1);

  在这里插入图片描述

  • ceil函数
    ceil(x) 小数不为零部分上取整,即向上取最近的整数
SELECT CEIL(1.2);

  在这里插入图片描述

  • floor函数
    floor(x) 向下取整
SELECT FLOOR(1.9);

  在这里插入图片描述

  • mod函数
    mod(x,y) 返回x/y的模
SELECT MOD(5,3);

  在这里插入图片描述在这里插入图片描述
  在这里插入图片描述在这里插入图片描述
  【区分取模mod、取余rem】
  a mod b = c, a rem b = d
  取模运算和取余运算在第一步不同:
  取余运算在取d的值时,向0方向舍入;
  而取模运算在计算c的值时,向负无穷大方向舍入。
  因此,当a和b符号一致时,取模运算和取余运算所得的值一致,因此结果一致。但是当符号不一致的时候,结果不一样。取模运算结果的符号和b一致,取余运算结果的符号和a一致。(在上面的mod运算实际上是取余,并非真正的取模)

  • rand函数
    rand() 返回0-1内容的随机值
SELECT RAND();

  在这里插入图片描述
  返回0-10内容的随机值

select ceil(rand()*10); 

  在这里插入图片描述

3 日期和时间函数

  • curdate
    curdate() 返回当前日期,年月日
SELECT CURDATE();
  • curtime
    curtime() 返回当前时间,时分秒
SELECT CURTIME();
  • now
    now() 返回当前日期和时间,年月日时分秒
SELECT NOW();
  • unix_timestamp
    unix_timestamp 返回当前日期的时间戳
SELECT UNIX_TIMESTAMP();
  • from_unixtime
    from_unixtime(unixtime) 将一个时间戳转换成日期
SELECT FROM_UNIXTIME(1565273819);
  • week
    week(date) 返回当前是一年中的第几周
SELECT WEEK(NOW());
或
SELECT WEEK(CURDATE());
或
SELECT WEEK('2019-08-08');
或
SELECT WEEK('20190808');
或
SELECT WEEK(20190808);
  • year
    year(date) 返回所给日期是那一年
SELECT YEAR(now());
其他写法,格式同week
  • hour
    hour(time) 返回当前时间的小时
SELECT HOUR(now());
  • minute
    minute(time) 返回当前时间的分钟
SELECT MINUTE(now());
  • date_format
    date_format(date,fmt) 按字符串格式化日期date值
select date_format(now(),'%M,%D,%Y');

  在这里插入图片描述

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位
  • date_add
    date_add(date,interval expr type) 加减日期
select date_add(now(),interval 3 year);
select date_add(now(),interval -3 year);

在这里插入图片描述在这里插入图片描述

  • datediff
    datediff(date1,date2) 计算两个日期相差的天数
select datediff(now(),'2019-01-01');

  在这里插入图片描述

4 流程函数

  • if
    if(value,t,f) 如果value是真,返回t,否则返回f
select if(2>3,'true','false');

  在这里插入图片描述

select if((select salary from emp where ename = 'zx')>5000,'经理','员工');

在这里插入图片描述

  • ifnull
    ifnull(value1,value2) 如果value1不为空,返回value1,否则返回value2
SELECT sname, IFNULL(score,0) score from students ;

  在这里插入图片描述

  • case when then end
select case when 2>3 then '对' else '错' end;

  在这里插入图片描述

5 其他常用函数

  • database
    database() 返回当前数据库名
select database();
  • version
    version() 返回当前数据库版本
select version();
  • user
    user() 返回当前登录用户名
select user();
  • password
    password(str) 对str进行加密
SELECT PASSWORD('abc');
-- mysql8.0版本移除了password()
  • MD5
    MD5() 加密返回str的MD5值
SELECT MD5('abc');

在这里插入图片描述

  

事务


  一组不可分割的操作,每条sql语句都是一个事务,只对DML语句有效,对DQL无效。

1 事务的ACID:

  • 原子性(Atomicity)
    整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
  • 一致性(Consistency)
    指事务必须使数据库从一个一致性状态变换到另一个一致性的状态。
  • 隔离性(Isolation)
    隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。
  • 持久性(Durability)
    在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

2 事务的使用:

  start transaction[mysql默认开启事务]——提交事务——回滚事务

  • 开启事务
start transaction;

  在这里插入图片描述

  • 查看表
      在这里插入图片描述
  • 进行操作
update students set score = score + 12
where sname = 'zs';
update students set score = score - 5
where sname = 'ls';

  在这里插入图片描述
  在这里插入图片描述

  • 刷新再看表,发现没变
      在这里插入图片描述
  • 提交事务,刷新看表
commit;

  在这里插入图片描述

  • 回滚事务 rollback
-- 开启事务
start transaction;
-- 添加操作
update students set score = score + 12
where sname = 'zs';
update students set score = score - 5
where sname = 'ls';
-- 回滚事务
rollback;

  回滚以后添加的操作取消

3 事务的并发问题

  • 脏读:看到还没提交事务时的数据
  • 不可重复读:一个事务范围内两个相同的查询却返回了不同数据
  • 重复读:开启事务后,不允许其他事务的修改操作
  • 幻读:查看数据后,其他事务进行修改操作,提交事务后数据出错。

4 事务隔离级别:

名称特征导致
读未提交 read uncommitted一个事务可以读取另一个未提交的事务的数据【脏读】【不可重复读】【幻读】
不可重复读 read commmitte一个事务要等另一个事务提交后才能读取数据【不可重复读】【幻读】
可重复读 repeatable read当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行【幻读】【默认】
串行化 serializable【效率低下】
  • 查看隔离级别
show variables like '%isolation%';

  在这里插入图片描述

  • 设置隔离级别
-- 全局
set global transaction isolation level read committed;

  在这里插入图片描述
  

权限


  限制一个用户能够做什么事情,在mysql中,可以设置全局权限,指定数据库权限,指定表权限,指定字段权限。

1 权限分类

名称操作
create创建数据库、表或索引权限
drop删除数据库或表权限
alter更改表,比如添加字段、索引等
delete删除数据权限
index索引权限
insert插入权限
select查询权限
update更新权限
create view创建视图权限
execute执行存储过程权限

2 权限操作

  • 创建用户
create user '用户名'@'localhost' identified by '密码';
  • 删除用户
drop user 'myxq'@'localhost';
  • 分配权限
grant 权限(columns) on 数据库对象 to 用户 identified by "密码" with grant option
  • 创建超级管理员,拥有所有权限,并能继续授予权限
grant ALL PRIVILEGES on *.* TO mylk@localhost IDENTIFIED BY '1234' WITH GRANT OPTION;
-- *.* 指所有数据库中的所有表

flush privileges;<br>
  • 创建对指定数据库的所有权限
grant ALL PRIVILEGES on 数据库名.* TO zhangsan@localhost IDENTIFIED BY '1234' WITH GRANT OPTION;

flush privileges;
  • 创建一个gxq用户只能对stu表进行crud操作
grant insert,uodate,select,delete on my_test.stu TO privuser@localhost IDENTIFIED BY '1234' WITH GRANT OPTION;
flush privileges;
  • 查看权限
show grants
  • 查看指定用户权限
show grants for root@localhost
  • 删除权限
revoke 权限 on 数据库对象 from 用户;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值