数据库
作者:互联网
大家好 今天给大家带来一些我自己总结的关于数据库的知识,希望有所帮助!!
关系型数据库源于关系模型. 关系模型认为,世界由实体和实体之间的联系组成,关系型数据库是一种以表作为实体,以主键和外键关系做联系的一种数据库结构
主键:
在关系型数据库表中,用一个唯一的标识符来标识每一行,这个标识符就是主键
主键有两个特点: 不可以重复 不能为空
外键:
在关系型数据库中,外键是用来表达表和表之间的关联关系的列
1对1: 一条主表记录对应一条从表记录 同时一条从表记录对应一条主表记录
1对多: 一条主表记录对应多条从表记录 同时一条从表记录对应一条主表记录
多对多: 一条主表记录对应多条从表记录 同时一条从表记录对应多条主表记录
我们通常把一对多关系中,"多边"的表称为从表,把"一边"的表成为主表.从表利用外键,引用主表的主键. 外键加在从表当中
关系型数据库只是一个保存数据的容器,大多数数据依靠一个称为数据库管理系统DBMS(Database Management System)的软件来管理数据库中数据.
结构化查询语言SQL
SQL是结构化查询语言(Structured Query language)得英文缩写,是一种用于管理关系型数据库,并与数据库中的数据进行通讯的计算机语言
SQL语言一共分为四类:
数据定义语言: DDL 创建,修改 删除数据库的内容数据结构 definition
数据查询语言: DQL 用于数据库中的数据查询
数据操作语言: DML 用于数据库中数据的修改 包括添加删除修改
数据控制语言: DCL 控制数据库访问权限
Limit 只用MYSQL当中 这是他的方言
在数据库判断某列是否为空不能用null 而应该用is null 或者 is not null
count() 统计行的数量
sum() 获取单个列的合计值
avg() 获取单个列的平均值
max() 获取单个列的最大值
min() 获取单个列的最小值
分组可以实现多列分组,比如按部门和学历分组,那么只有当部门和学历一样时才分一组
分组语句中投影列的限制:
在有分组的SQL语句中,投影的列就会有限制,要求SELECT中的列必须满足以下两个条件之一,否则就是无效的投影.
1.分组列,也就是出现在Group by中的列.
2.使用聚合函数的列.
1. where运行在分组前,因此不能执行任何聚合函数.
2. having是运行在分组后,只能用作聚合函数的过滤.
要学好查询SQL就必须掌握SQL的执行顺序,后执行的子句,可以使用前执行自居的计算结构,定义的别名等.
基本查询SQL的执行顺序为:
第一步: 执行from
第二步: where条件过滤
第三步: Group by分组
第四步: 执行select 投影列
第五步:Having条件过滤
第六步:执行order by排序
第七步: 执行limit语句,返回限定行
条件判断语句:
双分支条件判断采用if语句实现,if语句类似于三目运算符,当条件为真时,返回第一个,否则返回第二个.
select s.*, if(条件,结果1.结果2)appraise from 表
多分支判断语句:
多分支条件判断采用case when 语句实现. case when 语句类似于if -else if语句
select s*.,(case when 条件 then 结果 when 条件 then 结果 else 条件 end) 别名(单独新列的名字) from 表格
table doesn't exist表格不存在
unknown conlum 表格 in field list
子查询返回的是单行单列,外查询才能使用 > ,<, >=, <=, =, !=,
如果子查询返回的是多行单列 外查询只能使用in, not in,
from 里的子查询可以是任意查询语句 然后将其结果作为外部查询的表
select*from (select 学号,姓名 FROM t_student)s
嵌套在from自剧中的子查询 必须给一个表别名
from中嵌套的SQL不受任何限制 子查询结果可以为多行多列
相关子查询
在主查询中,每查询一条记录,需要重新做一次子查询,这种称为相关子查询.相关子查询的执行,依赖于外部查询的数据,外部查询返回一行,子查询就执行一次.
非相关子查询
在主查询中,子查询只需要执行一次,子查询结果不再变化,子查询结果供主查询使用,这种查询方式称为非相关子查询
数据完整性:
数据完整的= 可靠性 +准确性
为什么要保证数据库完整性?
为了防止垃圾数据的产生,从而影响数据库的执行效率!!!
数据库完整性的分类:
实体完整性:保证每一行代表的实体能互相区别,不能存在两条一模一样的记录
主键约束:主键是表中的一到多个列,主键列不能为空,也不能重复.一个表中只能有一个主键
唯一约束: 唯一约束是指给定列的所有值必须唯一,该列在表中每一行的值必须唯一.他和主键约束的区别在于该列可以为空,并且可以在一张表中给多格列设置唯一对象.
适合做主键的列必须满足四个条件:
1.值不能为空
2.值必须唯一
3.不能有业务含义
4.值不能发生变动
身份证不适合做主键
号码可能会变动并且属于业务属性
外键与外键约束的区别:
外键是用来表示表与表之间联系的, 是表中的一个列
外键约束是指在外键列上加一个约束,该外键列的值必须是主表列中出现的值.强制外键列引用的数据是正确的.如果违反该约束,则不允许该条数据的修改
域完整性:
保证指定列的数据的有效性
实现方式:
非空约束 : 指定列的值不能插入null
默认约束: 添加记录时,如果该列的值不做插入,那么以默认值插入
检查约束: 检查插入列数据的有效值
引用完整性
从表外键中出现的数据,必须在主表的主键中出现.
自定义完整性
删除主表记录:
当两个表之间建立了关联关系,并且从表中的外键添加了外键约束时,如果主表记录有从表记录引用,那么主表记录无法删除.
1.级联删除: 先删除主表记录对应的从表记录 然后再删除主表记录
2.外键置空 : 先将主表记录对应的从表记录,外键设置为null,然后再删除主表记录.
内连接和外连接的区别
内连接查询时,只能查询两个表之间有对应记录的数据,所以可能会损失一部分
外连接查询时,可以包含一个表之中所有符合条件的数据,无论该数据是否有对应的记录.
sql注入: 在执行SQL语句时,如果通过拼接字符串方式插入SQL语句的值,当值中有非法字符,或者SQL语句关键字时,会导致SQL语句语法错误,或执行结果不正确的情况,这称为SQL注入.
数据库的三范式:
范式1: 行不重复 列不可再分
范式2: 1,符合1范式 2.非主依主 非主键列必须依赖主键列
范式3: 非主独立 非主键列之间不能有依赖关系
标签:从表,记录,数据库,查询,主表,主键 来源: https://www.cnblogs.com/lyslyslyslyslys/p/12117182.html