Mysql的知识点
第三范式:
范式 解释
- 第三范式是进行业务设计,数据拆分时产生的,使用数据库范式,遵循范式
- 范式是一种规定:第三范式后面还有第四范式,第五范式
- 前面还有第一范式和第二范式,满足第三范式,就代表同时满足第一范式和第三范式
范式具体规范
第一范式:每个字段都是不可再分割的属性
class:高三12班 不满足第一范式,需要变成 grade:高三 class :3班
第二范式:通俗理解是任意一个字段都只依赖表中的同一个字段, 所有的字段都要和主键有直接关系
student:张三 , age:13, 学校:武汉大学 校园人数:1320 校园人数与学校有关,学校与张三有关,不满足第二范式 不允许由两个主键
第三范式: 表中只有一个主键字段,且非主键之间与非主键之间不能有联系
student: 张三 (primary key), age:13,借书证id: 32456 借书日期:2018/06/29 其中:张三是主键,虽然借书日期与张三有关系,但是也跟借书证id有关系,不满足第三范式
聚焦索引
聚焦索引:将数据 按照索引的顺序排列,使得存储进去的数据是非逻辑性的排列,类似于字典
非聚焦索引:将数据中的字段建立索引,另外开辟空间,将索引和字段名建立索引表,类似于,将列表中的数据与索引,建立一个索引字典
当查找数据时,先查看字典,然后返回字段,再进行查找
聚焦索引特点: 查找快,增删改比较复杂
适用于查找性表,不适用经常修改的表,经常修改有可能导致数丢失
非聚焦索引特点:查找慢,但增删改比较轻松
适用于修改性表
聚焦索引内还有相当多内容,大家可以自行查看
复合主键和联合主键
联合主键
假如有这样的情况,学生,年龄,成绩,课程,老师,老师信息
将学生的信息作为一张表,学生,年龄,课程id 将课程作为一张表,课程id,课程,成绩,老师id 将老师作为一张表,老师id,老师信息
假如我想找张三的成绩是多少,信息量太少,并且容易重复,
查找 李四教的数学班的张三的成绩 信息比较完全,不会出现重复的信息
再建一张表,字段位学生id和课程id和老师id和主键id,这样就叫做联合主键,联合主键顾名思义就是多个主键联合形成一个主键组合(主键原则上是唯一的,别被唯一值所困扰。)
联合主键的意义:
- 用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。
复合主键
在一张表中,有 学生,年龄,成绩
将学生和年龄共同作为主键,查找时
- 对于复合索引:MySQL从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。.当最左侧字段是常量引用时,索引就十分有效。
createtable test(
a int,
b int,
c int,
primary KEY (a,b,c)
);
- 类似于以下的语句
select *from test where a>10 ;
select *from test where a>10 and b >10;
select *from test where a>10 and b >10 and c>10;
- 满足索引是key index (a,b,c). a| a,b| a,b,c 3种组合进行查找时,复合索引才起作用
select *from test where b>10;
- 这样查找并没有使用复合索引,所以效率与不建立索引时差不多
小提示:在语句末尾将;改为\G可以修改表的显示方式
视图,存储过程,函数
本质上,是为了执行效率更高,执行起来更方便
三种方式都是将语句封装起来,给它加上一个名字,当调用它时,就能执行那一连串的语句,就像python的函数一样,具有面向对象的特点
def func(): print(“abc”)
视图主要使用于查询语句(select *from 视图;)
存储过程,函数,视图
定义
使用
修改
删除
存储过程和函数
1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4)存储过程一般是作为一个独立的部分来执行(EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
这三种,比较复杂,内容也很多,还需要大家自己研究,
就像我们的函数和类一样,内容多,理解也比较困难
用户权限
用户权限管理主要有以下作用:
1. 可以限制用户访问哪些库、哪些表
2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作
3. 可以限制用户登录的IP或域名
4. 可以限制用户自己的权限是否可以授权给别的用户
public
sysadmin–在 SQL Server 中进行任何活动。该角色的权限跨越所有其它固定服务器角色。
serveradmin –配置服务器范围的设置。
setupadmin –添加和删除链接服务器,并执行某些系统存储过程(如sp_serveroption)。
securityadmin –管理服务器登录。
processadmin –管理在 SQL Server 实例中运行的进程。
dbcreator –创建和改变数据库。
diskadmin –管理磁盘文件。
bulkadmin –执行 BULK INSERT 语句。
SQL_server面向的是集合
所以具有交 并 差 补 笛卡尔积的性质
交 intersect
并 union
差 difference
补 complement
笛卡尔积 就是将两张表以所有可能的方式进行组合,形成一张表,
假设 a表有4行,b表有3行,那么他们形成的笛卡儿积就有12行
语言分类
DAL 和DQL 都是数据访问(查询)语言
https://blog.csdn.net/zqj188/article/details/78418236
SQL语言共分为三大类,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
- 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象—–表、视图、
索引、同义词、聚簇等如:
ALTER 语句 (Transact-SQL)
CREATE 语句 (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
DROP 语句 (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
2.下表列出了 SQL Server 使用的 DML 语句。
BULK INSERT (Transact-SQL)
SELECT (Transact-SQL)
DELETE (Transact-SQL)
UPDATE (Transact-SQL)
INSERT (Transact-SQL)
UPDATETEXT (Transact-SQL)
MERGE (Transact-SQL)
WRITETEXT (Transact-SQL)
READTEXT (Transact-SQL)
下表列出了在多个 DML 语句或子句中使用的子句。
子句
可用于的语句
FROM (Transact-SQL)
DELETE、SELECT、UPDATE
提示 (Transact-SQL)
DELETE、INSERT、SELECT、UPDATE
OPTION 子句 (Transact-SQL)
DELETE、SELECT、UPDATE
OUTPUT 子句 (Transact-SQL)
DELETE、INSERT、MERGE、UPDATE
搜索条件 (Transact-SQL)
DELETE、MERGE、SELECT、UPDATE
表值构造函数 (Transact-SQL)
FROM、INSERT、MERGE
TOP (Transact-SQL)
DELETE、INSERT、MERGE、SELECT、UPDATE
WHERE (Transact-SQL)
DELETE、SELECT、UPDATE
WITH common_table_expression (Transact-SQL)
DELETE、INSERT、MERGE、SELECT、UPDATE
DDL操作是隐性提交的!不能rollback
- 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
GRANT:授权。
ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚—ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK;COMMIT [WORK]:提交。
在数据库的插入、删除和修改操作时,只有当事务在提交到数据
库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
别说明这三种类型。
(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;
(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON;
SQL_server 应用程序组成部分 客户端,服务器,数据库
client :抵御SQL注入和非严格输入的第一道防线
www.contoso.com: 应该设置为NTFS格式以保护程序、数据库、日志文件免遭未授权访问
S01.contoso.com:数据库