mysql-1

sql

查阅资料的时候看到一段话,挺有趣的

早年,QQ叫OICQ,windows本来绑定的MSN ,但是当时中国法律也不太明确,微软那边的人就提议,要不要封掉QQ,对于他们来说非常简单,操作系统层面,只需要让QQ安装不成功即可。但是微软想了想,没这么去做,毕竟不好,所以说QQ能起来也是有一定的机遇的,但是QQ起来之后,明白了这个问题,所以说腾讯现在很多行业都是垄断式的,对不对。

较常用的

sql分页limit

第一页 : limit 0,5

第二页 : limit 5,5

第三页 : limit 10,5

第N页 : limit (pageNo-1)*pageSzie,pageSzie

[pageNo:页码,pageSize:单页面显示条数]

order by

定义排序字段

asc、desc

排序字段,分别对应升序和降序

select distinct

用于返回唯一不同的值

其他函数

数据函数

SELECT ABS(-8); /*绝对值*/
SELECT CEILING(9.4); /*向上取整*/ 
SELECT FLOOR(9.4); /*向下取整*/
SELECT RAND(); /*随机数,返回一个0-1之间的随机数*/ 
SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/

字符串函数

SELECT CHAR_LENGTH('坚持就能成功'); /*返回字符串包含的字符数*/
SELECT CONCAT('我','爱','程序'); /*合并字符串,参数可以有多个*/ 
SELECT INSERT('我爱编程helloworld',1,2,'超级热爱'); /*替换字符串,从某个位置开始替 换某个长度*/ 
SELECT LOWER('li'); /*小写*/ 
SELECT UPPER('li'); /*大写*/
SELECT LEFT('hello,world',5); /*从左边截取*/
SELECT RIGHT('hello,world',5); /*从右边截取*/ 
SELECT REPLACE('坚持就能成功','坚持','努力'); /*替换字符串*/ 
SELECT SUBSTR('坚持就能成功',4,6); /*截取字符串,开始和长度*/ 
SELECT REVERSE('坚持就能成功'); /*反转

日期时间函数

SELECT CURRENT_DATE(); /*获取当前日期*/ 
SELECT CURDATE(); /*获取当前日期*/ 
SELECT NOW(); /*获取当前日期和时间*/ 
SELECT LOCALTIME(); /*获取当前日期和时间*/ 
SELECT SYSDATE(); /*获取当前日期和时间*/ 
-- 获取年月日,时分秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());

系统信息函数

SELECT VERSION(); /*版本*/ 
SELECT USER(); /*用户*/

聚合函数

/*COUNT:非空的*/ 
SELECT COUNT(studentname) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student; /*推荐*/

-- 从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询。
-- count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
-- count(*) 包括了所有的列,相当于行数,在统计结果的时候,包含字段为null 的记录;
-- count(1) 用1代表代码行,在统计结果的时候,包含字段为null 的记录 。

/*很多人认为count(1)执行的效率会比count(*)高,原因是count(*)会存在全表扫描,而count(1) 可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的 条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不 同,它会统计该字段不为null的记录条数。
下面它们之间的一些对比:
1)在表没有主键时,count(1)比count(*)快 
2)有主键时,主键作为计算条件,count(主键)效率最高; 
3)若表格只有一个字段,则count(*)效率较高。 */
SELECT SUM(StudentResult) AS 总和 FROM result;
SELECT AVG(StudentResult) AS 平均分 FROM result;
SELECT MAX(StudentResult) AS 最高分 FROM result; 
SELECT MIN(StudentResult) AS 最低分 FROM result;
/*where写在group by前面. 要是放在分组后面的筛选 要使用HAVING.. 因为having是从前面筛选的字段再筛选,而where是从数据表中的>字段直接进行的筛选的*/

md5加密

创建一个testmd5表

CREATE TABLE `testmd5` (
    `id` INT(4) NOT NULL,
    `name` VARCHAR(20) NOT NULL,
    `pwd` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`id`) 
) ENGINE=INNODB DEFAULT CHARSET=utf8

插入些数据

INSERT INTO testmd5 VALUES(1,'li','123456'),(2,'wei','456789')

单列加密语法是

update testmd5 set pwd = md5(pwd);

对某个用户单独加密只需往后面加where条件就好

设置密码在插入是字段加密

INSERT INTO testmd5 VALUES(3,'zhangs',md5('123456'));

查询登录用户信息(md5对比使用,查看用户输入加密后的密码进行比对)

SELECT * FROM testmd5 WHERE `name`='li' AND pwd=MD5('123456');

小结

abs(x) -- 绝对值 abs(-10.9) = 10
format(x, d) -- 格式化千分位数值 
format(1234567.456, 2) = 1,234,567.46 ceil(x) -- 向上取整 ceil(10.1) = 11 
floor(x) -- 向下取整 
floor (10.1) = 10 round(x) -- 四舍五入去整
mod(m, n) -- m%n m mod n 求余 10%3=1 
pi() -- 获得圆周率
pow(m, n) -- m^n
sqrt(x) -- 算术平方根 
rand() -- 随机数 
truncate(x, d) -- 截取d位小数 

-- 时间日期函数 
now(), current_timestamp(); -- 当前日期时间
current_date(); -- 当前日期
current_time(); -- 当前时间 
date('yyyy-mm-dd hh:ii:ss'); -- 获取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 获取时间部分 
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化时间 
unix_timestamp(); -- 获得unix时间戳 
from_unixtime(); -- 从时间戳获得时间 

-- 字符串函数 
length(string) -- string长度,字节 
char_length(string) -- string的字符个数
substring(str, position [,length]) -- 从str的position开始,取length个字符 
replace(str ,search_str ,replace_str) -- 在str中用replace_str替换
search_str instr(string ,substring) -- 返回substring首次在string中出现的位置 
concat(string [,...]) -- 连接字串 
charset(str) -- 返回字串字符集 
lcase(string) -- 转换成小写 
left(string, length) -- 从string2中的左边起取length个字符 
load_file(file_name) -- 从文件读取内容 
locate(substring, string [,start_position]) -- 同instr,但可指定开始位置 
lpad(string, length, pad) -- 重复用pad加在string开头,直到字串长度为length 
ltrim(string) -- 去除前端空格 
repeat(string, count) -- 重复count次 
rpad(string, length, pad) -- 在str后用pad补充,直到长度为length
rtrim(string) -- 去除后端空格 
strcmp(string1 ,string2) -- 逐字符比较两字串大小 

-- 聚合函数 
count();
sum(); 
max();
min();
avg(); 
group_concat()

-- 其他常用函数 
md5();
default();

事务

事务实现
-- 使用set语句来改变自动提交模式 
SET autocommit = 0; /*关闭*/ 
SET autocommit = 1; /*开启*/
-- 注意:
-- 1.MySQL中默认是自动提交 
-- 2.使用事务时应先关闭自动提交 

-- 开始一个事务,标记事务的起始点
START TRANSACTION

-- 提交一个事务给数据库
COMMIT

-- 将事务回滚,数据回到本次事务的初始状态
ROLLBACK

-- 还原MySQL数据库的自动提交 
SET autocommit =1;

-- 保存点
SAVEPOINT 保存点名称 -- 设置一个事务保存点
ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点 
RELEASE SAVEPOINT 保存点名称 -- 删除保存点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值