MySQL数据库基础知识点
导入外部文件:
1 | -- 为Monthly_Indicator表导入外部txt文件 |
修改数据表:
修改表指的是修改数据库中已经存在的数据表的结构
1 | – MySQL使用alter table语句修改数据表结构,包括: 修改表名,修改字段数据类型或字段名,增加和删除 字段,修改字段的排列位置等 |
连接方式:
内连接: 按照连接条件合并两个表,返回满足条件的行。
INNER JOIN 两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
RIGHT JOIN 会读取右边数据表的全部数据,即便左边表无对应数据。
联合查询:
union: 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
例: 用union合并t1与t2表
1 | select t1.* from t1 |
union all:用于合并两个或多个 SELECT 语句的结果集,保留重复行。
例: 用union all合并t1与t2表
1 | select t1.* from t1 |
子查询
子查询:写在()中,把内层查询结果当做外层查询参照的数据表来用
例: 用in操作符与子查询语句来查询所有f_id对应的f_price在10元到20元之间的水果记录
1 | select * from fruits where f_id in |
例: 用any操作符与子查询语句来查询所有f_id对应的f_price在10元到20元之间的水果记录
1 | select * from fruits where f_id = any |
例: 用all操作符与子查询语句来查询所有f_price大于20元的水果记录
1 | select * from fruits where f_price > all |
例: 用exists操作符与子查询语句来查询是否存在f_price大于30元的水果记录
1 | select * from fruits where exists |
更新字段
update…set:为字段赋值,语法为update 表名 set 字段名 = 值;
例: 使用concat函数在f_name字段值前添加’fruit_’信息
update fruits set f_name = concat('fruit_',f_name);
删除记录
delete: 删除数据表中的数据,语法为DELETE FROM 表名 [WHERE Clause],如果省略where的话则删除表中所有数据记录
例: 删除f_id为’b5’的数据记录
delete from fruits where f_id = 'b5';
常用的数学函数
常用的字符串函数
常用的日期及时间函数
总结
外键
数据库范式(1NF、2NF、3NF、BCNF)详解
第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
不符合第一范式的:
字段1 | 字段2 | 字段3 | 字段4 | |
---|---|---|---|---|
字段3.1 | 字段3.2 |
第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]
部分依赖:假设 AB为候选码; 若 Bㅡ> C ,因为 C 依赖于 B,而 B 是候选码的一部分,所以 C 部分依赖于 AB;
如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键, 则称为第二范式模式。简而言之,第二范式(2NF)就是非主属性完全依赖于主关键字。所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。
第一范式、第二范式案例:
第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]
判断是否是传递依赖的条件:① 满足B——>A,A——C 其中B为候选键,C为非键属性,② 但是A不能推出B
如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R为第三范式模式。满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
第三范式(3NF)实例:
鲍依斯-科得范式(BCNF是3NF的改进形式)
若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。这种关系模式就是BCNF模式。即在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合鲍依斯-科得范式。
四种范式之间存在如下关系:
其他
- distinct: 用来消除重复记录。
例: 查询fruits表中所有不重复的s_id
select distinct s_id from fruits;
- as重命名与limit限制查询结果行数
as:可以将表名重新命名为别的名称使用,只在查询中有效
例: 用as将fruits表名重命名为f后使用
select f.* from fruits as f;
limit:查询后只显示limit指定数字的行数结果
例: 显示f_price金额最大的前三名水果记录
1 | order by f_price desc |
- GROUP_CONCAT()函数:常与关键字 GROUP BY 一起使用,能够将分组后指定的字段值都显示出来。
例: 使用group_concat函数查询不同s_id下对应的所有f_name信息
SELECT s_id, GROUP_CONCAT(f_name) FROM fruits GROUP BY s_id;