Skip to content

Commit 5f50334

Browse files
committed
add some db and cpp notes
1 parent ec28756 commit 5f50334

2 files changed

Lines changed: 126 additions & 4 deletions

File tree

docs/C++/cpp.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,3 +342,9 @@ stl 中的所有容器都支持迭代器,但并不完全相同
342342
stl 迭代器:
343343

344344
![img/stl-it.png](img/stl-it.png)
345+
346+
## 防止重复 include
347+
348+
```cpp
349+
#programa once
350+
```

docs/数据库系统/dbsys.md

Lines changed: 120 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ SELECT <[DISTINCT] c1,c2,…> FROM <r1,…>
112112
ORDER BY <c1[DESC][,c2[DESC|ASC],…]>
113113
```
114114

115-
执行顺序:From → where → group (aggregate) → having → select → order by
116-
**因此 where 后的条件先于 having 后的条件进行筛选**
117-
118-
当出现嵌套时,在同一SQL语句内,除非外层查询的元组变量引入内层查询,否则内层查询只进行一次。
115+
- GROUP BY子句应该在HAVING子句之前
116+
- 执行顺序:From → where → group (aggregate) → having → select → order by
117+
**因此 where 后的条件先于 having 后的条件进行筛选**
118+
- 当出现嵌套时,在同一SQL语句内,除非外层查询的元组变量引入内层查询,否则内层查询只进行一次。
119119

120120
#### Null
121121

@@ -215,3 +215,119 @@ set salary = case
215215

216216
- View 是虚表,对其进行的所有操作都转化为对基表的操作。
217217
- Most SQL implementations allow updates only on simple views defined on a single relation and without aggregates.
218+
219+
### Transaction
220+
221+
事务是一系列数据库操作序列,这些操作要么**全部完成**,要么**全部不完成**,是一个不可分割的工作单位。
222+
223+
- commit
224+
- rollback
225+
226+
### Join
227+
228+
#### 语法
229+
230+
- **自然连接**:R natural {inner join, left join, right join, full join} S
231+
- **非自然连接**:R {inner join, left join, right join, full join} S
232+
on <连接条件判别式>
233+
using (<同名的等值连接属性名>)
234+
235+
#### tip
236+
237+
- 由于不会引起歧义,`inner``outer` 可省略。
238+
-`natural` 不能省略,不然就变成笛卡尔积了。
239+
- 非自然连接,容许不同名属性的比较;且结果关系中不消去重名属性
240+
- 使用 using 的连接类似于 natural 连接。但仅以 using 列出的公共属性为连接条件。
241+
242+
## Intermidiate
243+
244+
### Integrity Constraints
245+
246+
对数据库中数据的某种限制,比如
247+
248+
#### Single Relation
249+
250+
- primary key
251+
- not null
252+
- unique
253+
254+
**CHECK**语句可以限定某个属性必须满足某个条件,在 create table 时使用。
255+
256+
```sql
257+
create domain hourly-wage numeric(5,2)
258+
constraint value-test check(value > = 4.00);
259+
```
260+
261+
给 constraint 命名可以用于 debug。
262+
263+
#### Referential Integrity
264+
265+
**foreign key**,需进行以下检查:
266+
267+
- Insert 确保新插入的元组在参照关系中存在
268+
- Delete 要么 reject,要么 cascading delete
269+
270+
**SQL 中的写法**
271+
272+
```sql
273+
foreign key (dept_name) references department -- 在最后指定
274+
dept_name varchar (20) references department -- 在定义时指定
275+
```
276+
277+
**foreign key** 默认引用主键,也可以指定引用其他属性,但必须是唯一的
278+
279+
```sql
280+
foreign key (dept_name) references department (building)
281+
```
282+
283+
**冲突处理方法**
284+
285+
```sql
286+
create table course(
287+
. . .
288+
foreign key(dept_name) references department
289+
[on delete cascade]
290+
[on update cascade]
291+
. . . );
292+
```
293+
294+
- NULL 是视作符合外键要求的值
295+
296+
#### Assertions
297+
298+
```sql
299+
CREATE ASSERTION <assertion-name>
300+
CHECK <predicate>;
301+
```
302+
303+
每当系统更新时都运行检查,开销很大
304+
305+
#### Trigger
306+
307+
**Example**
308+
309+
```sql
310+
create trigger timeslot_check1 after insert [of <attr>] on section
311+
referencing new row as nrow
312+
for each row
313+
when (nrow.time_slot_id not in (
314+
select time_slot_id
315+
from time_slot)) /* time_slot_id not present
316+
in time_slot */
317+
begin
318+
rollback
319+
end;
320+
```
321+
322+
或者直接检查整个表:
323+
324+
```sql
325+
referencing new table as ntable
326+
for each statement
327+
...
328+
```
329+
330+
删除触发器:drop trigger <触发器名>;
331+
332+
### Authorization
333+

0 commit comments

Comments
 (0)