select concat('a','b','c');
select concat('a','b',null);
select insert('abcdefg',3,2,'**');
select lower('ABCD');
slect upper('ahdbSFsnuj');
SELECT LEFT('1234567890',3)
SELECT RIGHT('1234567890',3);
select lpad('my',5,123456);
select rpad('my',6,123456);
SELECT LTRIM(' 12345 ');
SELECT RTRIM(' 12345 ');
SELECT TRIM(' 12345 ');
select repeat('123',4);
select replace('abcdefg','c','**');
select substr('abcdefg',3,2);
SELECT ABS(-1);
SELECT CEIL(1.2);
SELECT FLOOR(1.9);
SELECT MOD(5,3);
【区分取模mod、取余rem】
a mod b = c, a rem b = d
取模运算和取余运算在第一步不同:
取余运算在取d的值时,向0方向舍入;
而取模运算在计算c的值时,向负无穷大方向舍入。
因此,当a和b符号一致时,取模运算和取余运算所得的值一致,因此结果一致。但是当符号不一致的时候,结果不一样。取模运算结果的符号和b一致,取余运算结果的符号和a一致。(在上面的mod运算实际上是取余,并非真正的取模)
SELECT RAND();
select ceil(rand()*10);
SELECT CURDATE();
SELECT CURTIME();
SELECT NOW();
SELECT UNIX_TIMESTAMP();
SELECT FROM_UNIXTIME(1565273819);
SELECT WEEK(NOW());
或
SELECT WEEK(CURDATE());
或
SELECT WEEK('2019-08-08');
或
SELECT WEEK('20190808');
或
SELECT WEEK(20190808);
SELECT YEAR(now());
其他写法,格式同week
SELECT HOUR(now());
SELECT MINUTE(now());
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) |
%p | AM 或 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 位 |
select date_add(now(),interval 3 year);
select date_add(now(),interval -3 year);
select datediff(now(),'2019-01-01');
select if(2>3,'true','false');
select if((select salary from emp where ename = 'zx')>5000,'经理','员工');
SELECT sname, IFNULL(score,0) score from students ;
select case when 2>3 then '对' else '错' end;
select database();
select version();
select user();
SELECT PASSWORD('abc');
-- mysql8.0版本移除了password()
SELECT MD5('abc');
start transaction[mysql默认开启事务]——提交事务——回滚事务
start transaction;
update students set score = score + 12
where sname = 'zs';
update students set score = score - 5
where sname = 'ls';
commit;
-- 开启事务
start transaction;
-- 添加操作
update students set score = score + 12
where sname = 'zs';
update students set score = score - 5
where sname = 'ls';
-- 回滚事务
rollback;
回滚以后添加的操作取消
名称 | 特征 | 导致 |
---|---|---|
读未提交 read uncommitted | 一个事务可以读取另一个未提交的事务的数据 | 【脏读】【不可重复读】【幻读】 |
不可重复读 read commmitte | 一个事务要等另一个事务提交后才能读取数据 | 【不可重复读】【幻读】 |
可重复读 repeatable read | 当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行 | 【幻读】【默认】 |
串行化 serializable | 【效率低下】 |
show variables like '%isolation%';
-- 全局
set global transaction isolation level read committed;
名称 | 操作 |
---|---|
create | 创建数据库、表或索引权限 |
drop | 删除数据库或表权限 |
alter | 更改表,比如添加字段、索引等 |
delete | 删除数据权限 |
index | 索引权限 |
insert | 插入权限 |
select | 查询权限 |
update | 更新权限 |
create view | 创建视图权限 |
execute | 执行存储过程权限 |
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;
grant ALL PRIVILEGES on 数据库名.* TO zhangsan@localhost IDENTIFIED BY '1234' WITH GRANT OPTION;
flush privileges;
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 用户;