数据库总结(三)

引言

数据库非常重要,本篇为总结第三篇

MySql常用函数

SELECT ABS(-8);//绝对值
SELECT CEILING(9.4);//向上取整
SELECT FLOOR(9.4);//向下取整
SELECT RAND();//返回一个0到1的随机数
SELECT SIGN(10);//判断一个数的符号,0-0 <0--1 >0-1
---字符串函数-----
SELECT CHAR_LENGTH('阿三大苏打  ');//字符串长度
SELECT CONCAT('1','0');//拼接字符串
SELECT INSERT('我爱编程',1,2,'超级热爱');//查询从某个位置开始替换某个长度
SELECT LOWER('SDA');//小写字母
SELECT UPPER('sda');//大写字母
SELECT INSTR('asdas','d');//返回第一次出现字母的索引
SELECT REPLACE('坚持就能成功''坚持','努力');//替换字符串
SELECT SUBSTR('坚持就能成功',4,2);//第几个位置截几个字符
SELECT REVERSE('坚持就能');//反转字符串
SELECT REPLACE(name,'周','州') FROM STUDENT where name like '周%';
//时间日期函数(记住)
SELECT CURRENT_DATE();//获取当前日期
SELECT CURDATE();//当前日期
SELECT LOCALTIME();//本地时间
SELECT NOW();//当前时间
SELECT SYSDATE();//系统时间
SELECT YEAR(NOW());

聚合函数

COUNT()  //计数
SUM()   //求和
AVG()  //平均值
MAX()  //最大值
MIN()  //最小值
===================
SELECT COUNT(name) FROM student; //指定字段忽略null值
SELECT COUNT(*) FROM student; //不忽略null值 计算行数
SELECT COUNT(1) FROM student; //忽略null值  计算行数
//用法大致相同
SELECT SUM(grade) FROM student;//求总和
===查询不同课程的平均分,最高分,最低分
核心:根据不同课程的课程分组
select name,AVG(grade),MIN(grade)
FROM result r
INNER JOIN 'subject' sub
ON r.rno=sub.rno
GROUP BY r.rno    //通过什么分组
----加一个平均分大于80分  用where报错
#### HAVING
select name,AVG(grade) AS '平均分',MIN(grade)
FROM result r
INNER JOIN 'subject' sub
ON r.rno=sub.rno
GROUP BY r.rno 
HAVING '平均分'>80

MD5加密

UDATE 表名 SET pwd=MD5(pwd);
INSERT into Values(4,'小明',MD5('12345'));
//如何校验
将用户传进来的值进行MD5加密然后再进行对比
SELECT * FROM user where name='xi' and pwd=MD5('12345');

事务

ACID 
A原子性:一起成功一起失败,不单独一方成功和失败,
C一致性:事务完成符合逻辑,
I隔离性:每个事务执行不应相互影响 ,
D持久性:没有提交就恢复原状,如果提交不可逆了就持久化到数据库了


脏读:如果隔离失败就读取错误的数据了,2人相互转账,如果脏读就出现了错误
不可重复读: 在一个事务内多次读取结果不同,不一定错可能场合问题,查询的时候可能刚好有人转账过来
幻读(虚读): 读取到了别的事务插入的数据,前后不一致

//手动事务代码
//mysql默认开启
set autocommit=1 |开启
START TRANSACTION//开始事务
//两个人互相转账
COMMIT //提交
ROLLBACK //回滚
set autocommit=0  关闭

索引

//能够更快的查询数据,提高查询效率
主键索引 primary key  一个表一个主键,不可重复
唯一索引 unique key 避免重复的列,可多个唯一 
常规索引 key         默认的,index,key 关键字修饰
全文索引 FullText   特定数据库引擎才有,快速定位数据
//显示所有索引
SHOW INDEX FROM STUDENT;
//增加一个全文索引
ALTER TABLE SCHOOL.STUDENT ADD FULLTEXT INDEX sname(sname);
//EXPLAIN 分析sql执行情况
EXPLAIN SELECT * FROM student;--非全文索引
SELECT * FROM student where MATCH(sname)AGAINST('刘');

插入100万条数据

DELIMITER $$ --写函数之前必须写
Create FUNCTION mock_data()
RETURN INT
BEGIN 
  DECLARE num INT DEFAULT 100000
  WHILE I<num Do
    SET i=i+1;
INSERT INTO app_user(name,sex)Values(Concat('用户',i),FLOOR(RAND()*2);
  END WHILE
  RETURN i;
END;

SELECT mock_data();
//创建索引,查数据1秒就完成了
create INDEX id_app_user_name ON app_user(name);

索引原则

  1. 不是越多越好
  2. 不要对经常变动的数据加索引
  3. 一般加在常用的字段上

反思:

  1. 虽然学习完了,但是仍然要多去读sql多练习
  2. 其次,发现基本知识非常重要,嗯去看看JVM下次写笔记
发布了53 篇原创文章 · 获赞 10 · 访问量 1689

猜你喜欢

转载自blog.csdn.net/jiohfgj/article/details/104399268