chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

数据库复盘笔记

笔记大杂烩

对于表数据量少,插入,更新操作多的表,添加索引可能会使查询速度变慢。索引并适合表频繁的update,insert,delete操作,这样会频繁的修改索引,造成性能低下
索引类似于指针访问,又类似数组的下标访问,所以可以快速定位,避免全局扫描

自然联接是关系的横向结合,是将两个关系拼接成一个更宽的新关系,要求两个关系含有一个或多个共有的属性,生成的新关系中包含满足联接条件的元组。

元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
表中的一行也称为一条记录。

自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列

共享锁【S锁】
又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S 锁之前不能对A做任何修改。

排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

数据库系统在三级模式之间提供了两级映像:模式/内模式的映像、外模式/模式的映像。这两级映射保证了数据库中的数据具有较高的物理独立性和逻辑独立性。
•模式/内模式的映像:实现概念模式到内模式之间的相互转换。
•外模式/模式的映像:实现外模式到概念模式之间的相互转换。
数据的独立性是指数据与程序独立,将数据的定义从程序中分离出去,由DBMS负责数据的存储,从而简化应用程序,大大减少应用程序编制的工作量。数据的独立性是由DBMS的二级映像功能来保证的。数据的独立性包括数据的物理独立性和数据的逻辑独立性。
数据的物理独立性是指当数据库的内模式发生改变时,数据的的逻辑结构不变。由于应用程序处理的只是数据的逻辑结构,这样物理独立性可以保证,当数据的物理结构改变了,应用程序不用改变。但是,为了保证应用程序能够正确执行,需要修改概念模式/内模式之间的映像。
数据的逻辑独立性是指用户的应用程序与数据库结构是相互独立的。数据的逻辑结构发生变化后,用户程序也可以不修改。但是,为了保证应用程序能够正确执行,需要修改外模式/概念模式之间的映像。

把对关系SC的属性GRADE的修改权授予用户ZHAO的T-SQL语句是 GRANT UPDATE (GRADE) ON SC TO ZHAO

数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括: 日志文件、数据库后备副本

思考

数据库存储引擎说下吧:

mark

on 与 where 有什么区别?having呢?

mark

group by 只是做一个聚合嘛?

mark
mark

like 通配符,能匹配所有嘛,有不可的嘛?

mark

inner join、left join、right join、full join有什么区别?

注释:INNER JOIN 与 JOIN 是相同的。



Union 联合什么玩意?

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

就是从两个表里面抽格式一样的数据拼在一起。

having 是个什么鬼,到底怎么用的?

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。

怎么用的?

在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。

ORDER BY 与 LIMIT

是不是去重是关键?

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
使用 ORDER BY 可以将查询结果根据列名排序,默认时升序,使用DESC改成降序,DESC只对前面一个列名起作用。

ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC。

limit关键字用来在查询结果集中,选择指定的行返回,常常用来实现翻页功能。

1
2
3
select * from table limit 10;	// limit n;		返回查询结果的前n条数据
select * from table limit 0,10; //limit offset, n; 返回从offset + 1开始的n条数据
select top 10 * from table order by id;

mark
mark

SQL中的rank(),dense_rank(),row_number()

rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。
简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加一,可以理解为根据当前的记录数生成序号,后面的记录依此类推。

dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。在各个分组内,rank()是跳跃排序,有两个第一名时接下来就是第三名,dense_rank()是连续排序,有两个第一名时仍然跟着第二名。

row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。

–rank() 跳跃排序,如果有两个第一级别时,接下来是第三级别
select name,course,rank() over(partition by course order by score desc) rank from student;

–dense_rank() 连续排序,如果有两个第一级别时,接下来是第二级别
select name,course,dense_rank() over(partition by course order by score desc) rank from student;

–row_number() 顺序排序
select name,course,row_number() over(partition by course order by score desc) rank from student;

数据库中的@符号是个什么鬼?

||” “|| 是个什么符号?

什么叫子查询方法,还有其他方法嘛?

insert or ignore into 什么鬼?

创建一张新表,从老表中抽取数据怎么整?

怎么创建索引?唯一索引?普通索引?强制索引?

本题要用两条语句完成,先用 CREATE
UNIQUE INDEX … ON … 对first_name创建唯一索引值,再用 CREATE INDEX … ON …
对last_name创建普通索引值

SQLite中,使用 INDEXED BY 语句进行强制索引查询.
MySQL中,使用 FORCE INDEX 语句进行强制索引查询.

创建视图?包含的列重命名?

视图(View)只不过是通过相关的名称存储在数据库中的一个 SQLite 语句。视图(View)实际上是一个以预定义的 SQLite 查询形式存在的表的组合。

视图(View)可以包含一个表的所有行或从一个或多个表选定行。视图(View)可以从一个或多个表创建,这取决于要创建视图的 SQLite 查询。

视图(View)是一种虚表,允许用户实现以下几点:

1
2
3
4
5
用户或用户组查找结构数据的方式更自然或直观。

限制数据访问,用户只能看到有限的数据,而不是完整的表。

汇总各种表中的数据,用于生成报告。

SQLite 视图是只读的,因此可能无法在视图上执行 DELETE、INSERT 或 UPDATE 语句。但是可以在视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图时触发,需要做的动作在触发器内容中定义。

表更新

用 ALTER TABLE … ADD …
语句可以向已存在的表插入新字段,并且能够与创建表时一样,在字段名和数据类型后加入NOT NULL、DEFAULT等限定,可参考:

以及哪个replace的作用:

触发器更新

1
2
3
4
构造触发器时注意以下几点:
1、用 CREATE TRIGGER 语句构造触发器,用 BEFORE或AFTER 来指定在执行后面的SQL语句之前或之后来触发TRIGGER
2、触发器执行的内容写出 BEGIN与END 之间
3、可以使用 NEW与OLD 关键字访问触发后或触发前的employees_test表单记录
1
2
3
4
5
6
1.create trigger :创建触发器
2.触发器要说明是在after 还是before事务发生时触发
3.要指明是insert 、delete、update操作
4.on 表名
5.begin和end之间写触发的动作
6.new 关键字表示更新后的表的字段 ,old表示更新前的表的字段

修改表名

两种方式
1、传统
alter table 表名 change 原列名 新列名 类型; –修改表的列属性名
alter table 表名 modify 列名 类型 ; –修改表的类类型
alter table 表名 drop 列名; –删除表的某一列
alter table 表名 add 列名 类型;–添加某一列
alter table 表名 rename 新表名; –修改表名

2、先备份再删除

创建外键约束

划重点 1、先删后增 2、直接命令执行

外键约束是个什么鬼呢?

保证了数据的一致性合完整性

约束分类有哪几种?有几种分类方式?

mark

创建外键约束条件有哪些?

mark

表清空

清空表和截断表

性能调优

性能监控

1、show profiles

set profiling=1

show profile

2、链接器

喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道