五、运算符和函数
5.1、字符函数
名称 | 描述 | 说明 |
CONCAT() | 字符连接 | CONCAT(str1,str2,...);SELECT CONCAT(first,second) AS name FROM user |
CONCAT_WS() | 使用指定的分隔符进行连接 | CONCAT_WS(str1,str2,...);SELECT CONCAT(‘-’,'imooc','MYSQL') |
FORMAT() | 数字格式化 | FORMAT(NUMBER,n);保留n为小数,返回字符型数字 |
LOWER() | 转换成小写字母 | |
UPPER() | 转换成大写字母 | |
LEFT() | 获取左侧字符 | LEFT(str,n) |
RIGHT() | 获取右侧字符 | |
LENGTH() | 获取字符串长度 | |
LIRIM() | 删除前导空格 | |
RTRIM() | 删除后续空格 | |
TRIM() | 删除前导和后续空格 | |
SUBSTRING() | 字符串截取 | 位置可以为负值,但是长度不能为负值 |
[NOT]LIKE | 模式匹配 | like+通配符进行过滤,“%”任意字符出现任意次数,"_"匹配单个字符, "[JM]"以J或M开头的,"[^JM]"不易J或M开头的,[]指定范围的单个字符 |
REPLACE() | 字符串替换 |
5.2、数值运算符及函数
名称 | 描述 | 说明 |
CEIL() | 进一取整 | 向上取整,ceil(2.99)=3 |
DIV | 整数除法 | |
FLOOR() | 舍一取整 | |
MOD | 取余数(取模) | |
POWER() | 幂运算 | |
ROUND() | 四舍五入 | ROUND(NUM,n),n为保留几位小数 |
TRUNCATE() | 数字截取 | TRUNCATE(NUM,n),注意TRUNCATE(125.89,0)=125,TRUNCATE(125.89,-1)=120, TRUNCATE(125.89,-2)=100,TRUNCATE(125.89,-3)=0 |
5.3、比较远算符及函数
名称 | 描述 | 说明 |
[NOT]BETWEEN...AND... | [不]在范围之内 | |
[NOT]IN() | [不]在列出值范围内 | |
IS [NOT] NULL | [不]为空 |
5.4、日期时间函数
名称 | 描述 | 说明 |
NOW() | 当前日期和时间 | |
CURDATE() | 当前日期 | |
CURTIME() | 当前时间 | |
DATE_ADD() | 日期变化 | SELECT DATE_ADD('2014-3-12',INTERVAL 1 YEAR),这个输出为2015-03-12 |
DATEDIFF() | 日期差值 | |
DATE_FORMAT() | 日期格式化 |
5.5、信息函数
名称 | 描述 |
COUNECTION_ID() | 连接ID |
DATABASE() | 当前数据库 |
LAST_INSERT_ID() | 最后插入记录的ID号。注意:不管一次插入几条记录,返回的都是最后一条的ID号 |
USER() | 当前用户 |
VERSION() | 版本信息 |
5.6、聚合函数
名称 | 描述 | 说明 |
AVG() | 平均数,NULL 值不包括在计算中 | SELECT customers FROM Orders WHERE orderPrice>(SELECT AVG(orderPrice) FROM Orders) |
COUNT() | 计数,NULL值不计入 | SELECT COUNT(*) FROM tbl_name//返回表中的记录数 SELECT COUNT(DISTINCT column_name) FROM tbl_name;//返回指定列不通知的数目 |
MAX() | 最大值 | |
MIN() | 最小值 | |
SUM() | 求和 |
5.7、加密函数
名称 | 描述 | 说明 |
MD5() | 信息摘要算法 | SELECT MD5('KCY') |
PASSWORD() | 密码算法 | SET PASSWORD = PASSWORD('root);将用户的密码修改成root |
5.8、自定义函数
创建自定义函数:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} rountine_body
例如:1)编写一个无参函数,改写日期的格式
CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURNS DATE_FORMAT(NOW(),%Y年%m月%d日 %H点%i分%s秒");
调用:SELECT f1();
2)编写一个有参函数来计算均值
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS float(10,2)unsigned return (num1+num2)/2;
调用:SELECT f2(10,15);
六、MYSQL中的存储引擎
6.1、存储引擎就是以不同的存储机制、索引、锁方式等技术将数据存储在文件或者内存中;
常见的存储引擎有MyISAM、InnoDB、Menory、Archive等
6.2、并发控制,多个连接对数据库进行修改时保证数据的一致性和完整性,MySQL提供两个级别的并发控制分别为服务器级和存储引擎级。
6.3、锁,实现并发控制的一种方法。
1)、锁分为共享锁(读个用户可同时进行读操作)和排他锁(只有一个用户进行写操作)
2)、锁的粒度表级锁(开销较小)和行级索(开销较大)。
6.4、事务,是恢复和并发控制的基本单位;
1)、数据库事务的四特性ACID如下:
Atomic 原子性,整个数据库事务是不可分割的工作单位
Consistency 一致性,数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性
Isolation 隔离性,在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间
Durability 持久性,指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来
2)、事务的隔离级别
Serializable:可避免脏读、不可重复读、虚读情况的发生。
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读,是 mysql 默认的事务隔离级别)
Read committed:可避免脏读情况发生。(读取已提交的数据)
Read uncommitted:最低级别,以上情况均无法保证。(读取到了未提交的数据)
3)、实际的开发过程用到事务开启、回滚、关闭等操作,保证数据的正确性。
6.5、索引,在存储引擎级别实现的,对一行或者多行记录进行排序的结构,包含普通索引、唯一索引、主键索引、组合索引等,索引的创建同表的创建
create [unique]index on t_name(字段);
6.6、不同存储引擎之间的对比
1)、MyISAM:存储限制为256TB,支持索引,表锁,可进行数据压缩
2)、InnoDB: 存储限制为64TB, 支持事务,支持索引,行锁,支持外键
3)、Memory: 存在内存中,支持索引,表锁
4)、Archive:无存储限制,行锁,支持数据压缩