MySQL
配置 mysql.cnf
配置远程访问
修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
,将 bind-address
改为 0.0.0.0
:
授权:
配置忽略数据库大小写敏感
在 [mysqld]
节点底部增加如下配置
配置密码口令
查看和设置密码安全级别:
查看和设置密码长度限制:
解决 docker mysql 不能输入中文
实用 SQL
聚合函数
函数 | 说明 |
---|---|
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
注意:MAX()
和 MIN()
函数并不限于数值类型。如果是字符类型,MAX()
和 MIN()
会返回排序最后和排序最前的字符。
使用聚合查询计算男生平均成绩:
分组聚合
将全部学生按 class_id 分组并统计总数:
class_id | num |
---|---|
1 | 4 |
2 | 3 |
3 | 3 |
也可以使用多个列进行分组,例如,我们想统计各班的男生和女生人数:
class_id | gender | num |
---|---|---|
1 | M | 2 |
1 | F | 2 |
2 | F | 1 |
2 | M | 2 |
3 | F | 2 |
3 | M | 1 |
连接查询
INNER JOIN
只返回同时存在于两张表的行数据,由于students
表的class_id
包含 1,2,3,classes
表的 id 包含 1,2,3,4,所以,INNER JOIN
根据条件s.class_id = c.id
返回的结果集仅包含 1,2,3;RIGHT OUTER JOIN
返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以NULL
填充剩下的字段;LEFT OUTER JOIN
则返回左表都存在的行。如果我们给students
表增加一行,并添加class_id=5
,由于classes
表并不存在 id=5 的行,所以,LEFT OUTER JOIN
的结果会增加一行,对应的class_name
是NULL
;FULL OUTER JOIN
会把两张表的所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL
。
注意三种外连接的 OUTER
可以省略。
插入或替换
如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。此时,可以使用 REPLACE
语句,这样就不必先查询,再决定是否先删除再插入:
若 id=1 的记录不存在,REPLACE
语句将插入新记录,否则,当前 id=1 的记录将被删除,然后再插入新记录。
插入或更新
如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就更新该记录,此时,可以使用 INSERT INTO ... ON DUPLICATE KEY UPDATE ...
语句:
若 id=1 的记录不存在,INSERT
语句将插入新记录,否则,当前 id=1 的记录将被更新,更新的字段由 UPDATE
指定。
插入或忽略
如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就啥事也不干直接忽略,此时,可以使用 INSERT IGNORE INTO ...
语句:
若 id=1 的记录不存在,INSERT
语句将插入新记录,否则,不执行任何操作。
快照
如果想要对一个表进行快照,即复制一份当前表的数据到一个新表,可以结合 CREATE TABLE
和 SELECT
:
新创建的表结构和 SELECT
使用的表结构完全一致。
写入查询结果集
例如,创建一个统计成绩的表 statistics
,记录各班的平均成绩:
然后,我们就可以用一条语句写入各班的平均成绩:
金点网络-全网资源,一网打尽 » MySQL
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
- 是否提供免费更新服务?
- 持续更新,永久免费
- 是否经过安全检测?
- 安全无毒,放心食用