3.数据的完整性
作⽤:保证⽤户输⼊的数据保存到数据库中是正确的。确保数据的完整性 = 在创建表 时给表中添加约束
完整性的分类:实体完整性,域完整性,引⽤完整性.
3.1实体完整性
-
实体定义
即表中的⼀⾏(⼀条记录)代表⼀个实体(entity)实体完整性的作⽤:标识每⼀⾏数据不重复。
-
约束类型
主键约束(primary key)
特点:每个表中要有⼀个主键。特点:数据唯⼀,且不能为null
唯⼀约束(unique)
特点:数据不能重复。(可⻅null不算重复)
自动增长列(auto_increment)
sqlserver数据库 (identity) oracle数据库( sequence)
特点:默认从最⼤值开始+1操作
给主键添加⾃动增⻓的数值,列只能是整数类型
3.2域完整性
-
域完整性的作⽤:
限制此单元格的数据正确,不对照此列的其它单元格⽐较,域代表当前单元格
-
域完整性约束分类:
数据类型 ⾮空约束(not null)
默认值约束(default)
check约束(mysql不支持)check(sex='男' or sex='⼥')
-
数据类型:
数值类型、⽇期类型、字符串类型
-
⾮空约束:not null
-
默认值约束 default
3.3引用完整性(参照完整性)
外键约束:FOREIGN KEY
-- 撤销外键 先选中外键所在的表,在右下⻆找到info选项,拉到最后,找到创建score表的信息,我 们可以发现主外键关联的标识score_ibfk_1 ALTER TABLE score DROP FOREIGN KEY score_ibfk_1 第⼆种添加外键⽅式。 ALTER TABLE score ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(sid);
3.4表与表之间的关系
-
⼀对⼀
-
⼀对多(多对⼀)
-
多对多
4.多表查询
4.1多表查询分类
合并结果集 UNION 、UNION ALL
了解连接查询内连接 [INNER] JOIN ON
外连接 OUTER JOIN ON
左外连接 LEFT [OUTER] JOIN
右外连接 RIGHT [OUTER] JOIN
全外连接(MySQL不⽀持)FULL JOIN
⾃然连接 NATURAL JOIN
4.2合并结果集
-
作用
合并结果集就是把两个select语句的查询结果合并到⼀起!
要求:被合并的两个结果:列数、列类型必须相同。
5.子查询
-
定义
⼀个select语句中包含另⼀个完整的select语句。
⼦查询就是嵌套查询,即SELECT中包含SELECT,如果⼀条语句中存在两个,或两个 以上SELECT,那么就是⼦查询语句了。
-
子查询出现的位置:
where后,作为被查询条件的⼀部分;
from后,作表;
注意:当⼦查询出现在where后作为条件时,还可以使⽤如下关键字:(很少⽤)any all
-
子查询结果集的形式:
单⾏单列(⽤于条件)
单⾏多列(⽤于条件)
多⾏单列(⽤于条件)
多⾏多列(⽤于表)
5.自连接
-
⾃⼰连接⾃⼰,起别名
6. MySQL中的函数
6.1常用系统函数
6.1.1日期函数
ADDTIME (date2 ,time_interval ) | 将time_interval加到date2 |
---|---|
CURRENT_DATE ( ) | 当前⽇期 |
CURRENT_TIME ( ) | 当前时间 |
CURRENT_TIMESTAMP ( ) | 当前时间戳 |
DATE (datetime ) | 返回datetime的⽇期部分 |
DATE_ADD (date2 , INTERVAL d_value d_type ) | 在date2中加上⽇期或时间 |
DATE_SUB (date2 , INTERVAL d_value d_type ) | 在date2上减去⼀个时间 |
DATEDIFF (date1 ,date2 | 两个⽇期差 |
NOW () | 当前时间 |
YEAR|Month|Day(datetime ) | 年⽉⽇ |
6.1.2字符串函数
CHARSET(str) | 返回字串字符集 |
---|---|
CONCAT (string2 [... ]) | 连接字串 |
INSTR (string ,substring ) | 返回substring在string中出现的位置,没 有返0 |
UCASE (string2 ) | 转换成⼤写 |
LCASE (string2 ) | 转换成⼩写 |
LEFT (string2 ,length ) | 从string2中的左边起取length个字符 |
LENGTH (string) | string⻓度 |
REPLACE (str ,search_str ,replace_str ) | 在str中⽤replace_str替换search_str |
STRCMP (string1 ,string2 ) | 逐字符⽐较两字串⼤⼩ |
SUBSTRING (str , position [,length ]) | 从str的position开始,取length个字符 |
LTRIM (string2 ) RTRIM (string2 ) trim | 去除前端空格或后端空格 |
6.1.3 常规函数
ABS (number2 ) | 绝对值 |
---|---|
BIN (decimal_number ) | ⼗进制转⼆进制 |
CEILING (number2 ) | 向上取整 |
CONV(number2,from_base,to_base) | 进制转换 |
FLOOR (number2 | 向下取整 |
FORMAT (number,decimal_places ) | 保留⼩数位数 |
HEX (DecimalNumber ) | 转⼗六进制 |
LEAST (number , number2 [...]) | 求最⼩值 |
MOD (numerator ,denominator ) | 求余 |
RAND([seed]) | RAND([seed]) |
7.自定义函数
7.1什么是函数
mysql中的函数与存储过程类似,都是⼀组SQL集;
7.2与存储过程的区别
函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回 值;
函数可以嵌⼊到sql语句中使⽤,⽽存储过程不能;
函数⼀般⽤于实现较简单的有针对性的功能(如求绝对值、返回当前时间等),存储过程⽤于实现复杂的功能(如复杂的业务逻辑功能);
函数的关键字是function 存储过程是:procedure