SQL 数据库基础知识点

MYSQL考试

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.      使用

3.      修改

4.      删除

存储过程和函数

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

4)存储过程一般是作为一个独立的部分来执行(EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

这三种,比较复杂,内容也很多,还需要大家自己研究,

                   就像我们的函数和类一样,内容多,理解也比较困难

用户权限

用户权限管理主要有以下作用:


1.
可以限制用户访问哪些库、哪些表 
2.
可以限制用户对哪些表执行SELECTCREATEDELETEDELETEALTER等操作 
3.
可以限制用户登录的IP或域名 
4.
可以限制用户自己的权限是否可以授权给别的用户

https://www.cnblogs.com/lxf1117/p/6762315.html

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语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL

1.
数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <
表或视图名>
WHERE <
查询条件>

2 .
数据操纵语言DML
数据操纵语言DML主要有三种形式:
1)
插入:INSERT
2)
更新:UPDATE
3)
删除:DELETE

3.
数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATETABLE/VIEW/INDEX/SYN/CLUSTER
| | | | |
视图索引同义词

DDL
操作是隐性提交的!不能rollback

4.
数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
1)
GRANT:授权。


2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚---ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK;


3)
COMMIT [WORK]:提交。


   
在数据库的插入、删除和修改操作时,只有当事务在提交到数据
库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
别说明这三种类型。


(1)
显式提交
COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT



(2)
隐式提交
SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER
AUDITCOMMENTCONNECTCREATEDISCONNECTDROP
EXIT
GRANTNOAUDITQUITREVOKERENAME


(3)
自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON

SQL_server 应用程序组成部分     客户端,服务器,数据库

    client :抵御SQL注入和非严格输入的第一道防线

    www.contoso.com: 应该设置为NTFS格式以保护程序、数据库、日志文件免遭未授权访问

    S01.contoso.com:不知道


猜你喜欢

转载自blog.csdn.net/weixin_42290927/article/details/80858401