Skip to content

Commit

Permalink
SQL basics
Browse files Browse the repository at this point in the history
  • Loading branch information
wolverinn committed Dec 7, 2019
1 parent 3924e1b commit 1ab74bd
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions Database.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,55 @@ delete;
- 插入异常:无法插入(插入一个还没有课程信息的学生)
</details>

### 列举几种表连接方式?

![SQL连接](_v_images/20191207081711185_20242.png)

- 内连接(Inner Join):仅将两个表中满足连接条件的行组合起来作为结果集
- 自然连接:只考虑属性相同的元组对;
- 等值连接:给定条件进行查询
- 外连接(Outer Join)
- 左连接:左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分补NULL;
- 右连接:和左连接相反;
- 全外连接(Full Outer Join):查询出左表和右表所有数据,但是去除两表的重复数据
- 交叉连接(Cross Join):返回两表的笛卡尔积(对于所含数据分别为m、n的表,返回m*n的结果)

### 什么是存储过程?有哪些优缺点?
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。想要实现相应的功能时,只需要调用这个存储过程就行了(类似于函数,输入具有输出参数)。

优点:
- 预先编译,而不需要每次运行时编译,提高了数据库执行**效率**
- 封装了一系列操作,对于一些数据交互比较多的操作,相比于单独执行SQL语句,可以**减少网络通信量**
- 具有**可复用性**,减少了数据库开发的工作量;
- **安全性高**,可以让没有权限的用户通过存储过程间接操作数据库;
-**易于维护**

缺点:
- **可移植性差**,存储过程将应用程序绑定到了数据库上;
- **开发调试复杂**:没有好的IDE;
- **修改复杂**,需要重新编译,有时还需要更新程序中的代码以更新调用

### Drop/Delete/Truncate的区别?
- **Delete**用来删除表的全部或者**部分数据**,执行delete之后,用户**需要提交**之后才会执行,会触发表上的DELETE**触发器**(包含一个OLD的虚拟表,可以只读访问被删除的数据),DELETE之后表结构还在,删除很慢,一行一行地删,因为会记录日志,可以利用日志还原数据;
- **Truncate**删除表中的所有数据,这个操作**不能回滚**,也不会触发这个表上的触发器。操作比DELETE快很多(直接把表drop掉,再创建一个新表,删除的数据不能找回)。如果表中有自增列,则重置为1;
- **Drop**命令从数据库中**删除表**,所有的数据行,索引和约束都会被删除;不能回滚,不会触发触发器;

<details>
<summary>什么是触发器?</summary>

触发器(TRIGGER)是由事件(比如INSERT/UPDATE/DELETE)来触发运行的操作(不能被直接调用,不能接收参数)。在数据库里以独立的对象存储,用于**保证数据完整性**(比如可以检验或转换数据)。
</details>

### 什么是视图?什么是游标?
- 视图:从数据库的基本表中通过查询选取出来的数据组成的**虚拟表**(数据库中存放视图的定义)。可以对其进行增/删/改/查等操作。特别地,对视图的修改不影响基本表。好处:
- 通过只给用户访问视图的权限,保证数据的**安全性**
- **简化**复杂的SQL操作,隐藏数据的复杂性(比如复杂的连接);
- 游标(Cursor):用于定位在查询返回的**结果集的特定行**,以对特定行进行操作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动或对浏览/修改任意行中的数据。主要用于交互式应用。

### 参考

- [数据库六大范式详解 -- CSDN博客](https://blog.csdn.net/weixin_43433032/article/details/89293663)
- [delete,truncate 和 delete之间的区别 -- 博客园](https://www.cnblogs.com/alice-cj/p/10354737.html)

### 待完成
- [ ] E-R 模型
Binary file added _v_images/20191207081711185_20242.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 1ab74bd

Please sign in to comment.