SQL 数据库基础知识点

Mysql的知识点

第三范式:

范式 解释

  1. 第三范式是进行业务设计,数据拆分时产生的,使用数据库范式,遵循范式
  2. 范式是一种规定:第三范式后面还有第四范式,第五范式
  3. 前面还有第一范式和第二范式,满足第三范式,就代表同时满足第一范式和第三范式

范式具体规范

  1. 第一范式:每个字段都是不可再分割的属性

     class:高三12班
    
     不满足第一范式,需要变成 grade:高三 class :3班     
    
  2. 第二范式:通俗理解是任意一个字段都只依赖表中的同一个字段, 所有的字段都要和主键有直接关系

     student:张三 , age:13, 学校:武汉大学  校园人数:1320
    
     校园人数与学校有关,学校与张三有关,不满足第二范式
     
     不允许由两个主键
    
  3. 第三范式: 表中只有一个主键字段,且非主键之间与非主键之间不能有联系

     student: 张三 (primary key), age:13,借书证id: 32456
    
     借书日期:2018/06/29
    
     其中:张三是主键,虽然借书日期与张三有关系,但是也跟借书证id有关系,不满足第三范式
    

聚焦索引

  1. 聚焦索引:将数据 按照索引的顺序排列,使得存储进去的数据是非逻辑性的排列,类似于字典

  2. 非聚焦索引:将数据中的字段建立索引,另外开辟空间,将索引和字段名建立索引表,类似于,将列表中的数据与索引,建立一个索引字典

     当查找数据时,先查看字典,然后返回字段,再进行查找
    
  3. 聚焦索引特点: 查找快,增删改比较复杂

     适用于查找性表,不适用经常修改的表,经常修改有可能导致数丢失
    
  4. 非聚焦索引特点:查找慢,但增删改比较轻松

     适用于修改性表
    
  5. 聚焦索引内还有相当多内容,大家可以自行查看

复合主键和联合主键

联合主键

  1. 假如有这样的情况,学生,年龄,成绩,课程,老师,老师信息

      将学生的信息作为一张表,学生,年龄,课程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;
  1. 满足索引是key index (a,b,c). a| a,b| a,b,c 3种组合进行查找时,复合索引才起作用
    select *from test where b>10;
  2. 这样查找并没有使用复合索引,所以效率与不建立索引时差不多

小提示:在语句末尾将;改为\G可以修改表的显示方式

视图,存储过程,函数

本质上,是为了执行效率更高,执行起来更方便

  1. 三种方式都是将语句封装起来,给它加上一个名字,当调用它时,就能执行那一连串的语句,就像python的函数一样,具有面向对象的特点

    def func():
    
             print(“abc”)
    
  2. 视图主要使用于查询语句(select *from 视图;)

  3. 存储过程,函数,视图

    1.  定义
      
    2.  使用
      
    3.  修改
      
    4.  删除
      
  4. 存储过程和函数

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4)存储过程一般是作为一个独立的部分来执行(EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

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

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

用户权限

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

1. 可以限制用户访问哪些库、哪些表 
2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 
3. 可以限制用户登录的IP或域名 
4. 可以限制用户自己的权限是否可以授权给别的用户
  1. 查看详情 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语言共分为三大类,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。

  1. 数据定义语言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

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

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

  3. 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注入和非严格输入的第一道防线

<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?df3fad48f451b4397e22994598084709";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
 

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

S01.contoso.com:数据库
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值