摘要
主要关于mysql相关的一些知识
一、配置
mysql://127.0.0.1:3306/ftp_server?connectTimeout=1000&useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
二、SQL相关
(1)单表相关
1、将所有数据按时间段进行分组统计条数,例:
求出1-3年以及3-5年数据注册的用户总数
SELECT create_time_temp,count(*) as total from (
SELECT create_time,
CASE
WHEN create_time > DATE_SUB(NOW(), INTERVAL 1 YEAR) THEN '1年以内'
WHEN create_time > DATE_SUB(NOW(), INTERVAL 3 YEAR) AND create_time <= DATE_SUB(NOW(), INTERVAL 1 YEAR) THEN '1-3年'
WHEN create_time > DATE_SUB(NOW(), INTERVAL 5 YEAR) AND create_time <= DATE_SUB(NOW(), INTERVAL 3 YEAR) THEN '3-5年'
ELSE '8年以上'
END as create_time_temp
from `test`
)t_test GROUP BY create_time_temp;
2、排序
order by asc : 正序(默认) 从小到大
order by desc : 逆序 从大到小
例:以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
搜索结果如下:
Company | OrderNumber |
---|---|
deepwise | 2356 |
deepwise | 6953 |
alibaba | 3532 |
注意
:在以上的结果中有两个相等的公司名称 (deepwise)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
3、关于字符匹配
LIKE '_eorge' : 匹配查找第一个任意字符,后面为eorge
LIKE '[ALN]%' : 匹配以字符 A 或 L 或 N 开头的
LIKE '[!ALN]%' : 匹配不以字符 A 或 L 或 N 开头的
4、关于范围匹配
(1)between and
where id between 1 and 7 : 表示id存在于该区间情况, 不同数据库对于该操作支持是不一样的,闭合区间可能不一致,[1,7],(1,7],[1,7),(1,7)都有可能,注意区分。
where id not between in 1 and 7 :表示id不在这区间,范围闭合情况同上。
(2)使用 <(小于)、 >(大于)、 <>(不等于)
由于每个数据库对于 `between and` 支持不一致,所以最好还是使用 >、<、<> 用于区间判断比较合适。
5、关于null
查找name为空数据
SELECT name
FROM user
WHERE name IS NULL;
6、关于时间
(1)Date函数
函数 | 描述 |
---|---|
now() | 返回当前时间 |
curdate() | 返回当前日期 |
curtime() | 返回当前时间 |
date() | 提取日期或者日期/时间表达式的日期部分 |
extract() | 返回日期/时间的单独部分 |
date_add() | 向日期添加指定的时间间隔 |
date_sub() | 向日期减去指定的时间间隔 |
datediff() | 返回两个日期之间的天数 |
date_format() | 用不同的格式显示日期/时间 |
(2)Date数据类型
DATE - 格式:YYYY-MM-DD
DATETIME - 格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
YEAR - 格式:YYYY 或 YY
7、sql约束
(1)创建约束,可以在建表的时候创建字段相关约束。
(2)删除约束,任何现有约束都可以通过在 ALTER TABLE 命令中指定 DROP CONSTRAINT 选项的方法删除掉。
例:要去除 EMPLOYEES 表中的主键约束,可以使用下述命令:
ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;
说明
:某些数据库实现允许禁用约束。这样与其从数据库中永久删除约束,你可以只是临时禁用掉它,过一段时间后再重新启用。
(2)多表相关
1、连接
内部连接:inner join、join
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
注释
:如果表中至少有一个匹配项,INNER JOIN 关键字将返回一行。如果 “Customers” 表中的行与"Orders" 不匹配,则不会列出行。
左连接:left join、left outer join
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
注释
:LEFT JOIN 关键字返回左表(Customers)中的所有行,即使在右边表(Orders)中没有匹配。
右连接:right join、right outer join
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
注释
:RIGHT JOIN 关键字返回右表(Employees)的所有行,即使在左表(Orders)中没有匹配。
完整外部连接:full outer join
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
注意
: FULL OUTER JOIN关键字返回左表(Customers)中的所有行,以及右表(Orders)中的所有行。如果 "Customers"中的行中没有"Orders"中的匹配项,或者"Orders"中的行中没有 "Customers"中的匹配项,那么这些行也会列出。 FULL OUTER JOIN可能会返回非常大的结果集!
自然连接
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
连接总结:
inner join:如果表中有至少一个匹配,则返回行
left join:即使右表中没有匹配,也从左表返回所有的行
right join:即使左表中没有匹配,也从右表返回所有的行
full join:只要其中一个表中存在匹配,则返回行
(3)事务
事务具有四个标准特性,通常使用ACID来表示
- 原子性:保证任务中的所有操作都执行完毕;否则,事务会在出现错误时终止,并回滚之前所有操作到原始状态。
- 致性:如果事务成功执行,则数据库的状态得到了进行了正确的转变。
- 隔离性:保证不同的事务相互独立、透明地执行。
- 持久性:即使出现系统故障,之前成功执行的事务的结果也会持久存在。
三、alibaba连接池相关
相关配置参数解释 : https://blog.youkuaiyun.com/shenzhennba/article/details/20855149