数据库+计网记录

简介: 【6月更文挑战第5天】

create table  表名(字段名 字段类型 字段约束,.....);
#字段约束有  primary key(主键),not null(不为空),unique(唯一)
# 例如:
create table Student
(Sno CHAR(9) primary key, # 设为主键
 Sname CHAR(20) unique, #唯一
 ....
)
create table 表名(...... FOREIGN KEY (外码)references 参照列)
# 例如
create table Course
(Cno CHAR(4) primary key,# 设为主键
 Cname CHAR(40) NOT NULL,# 不为空
 Cnop CHAR(4).
 Ccredit SMALLINT,
 FOREIGN KEY (Cpno) REFERENCES Course(Cno)
 # 表示完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno
);
# 参照表和被参照表可以使同一个表,也可以不是.
# 修改基本表
ALTER TABLE 表名 ALTER  COLUMN 字段名 字段类型 
# 修改表中的字段名或者字段类型
ALTER TABLE 表名 ADD 字段名 字段类型
# 添加字段字段名 字段约束
ALTER TABLE 表名 DROP COLUMN 字段名 [CASCADE|RESTRICT]#删除表中的列
# 删除表
DROP TABLE 表名 [RESTRICT |CASCADE] ;

# 索引
CREATE [UNIQUE] [CLUSTER] INDEX < 索引名 > 
ON < 表名 > ( <列名> [ <次序>] [,<列名> [ < 次序> ] ]);

CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Student(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC);
# 创建索引
CREATE [UNIQUE] [CLUSTER] INDEX < 索引名 > 
ON < 表名 > ( <列名> [ <次序>] [,<列名> [ < 次序> ] ]);
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Student(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC);
# 修改索引
# 对索引名重命名
ALTER INDEX <就索引名> RENAME TO <新所银名> ;
ALTER INDEX SCno RENAME TO SCSno;
# 删除索引
DROP INDEX <索引名>
DROP INDEX Stusname;
SELECT [ ALL | DISTINCT ] < 目标列表达式 > [ ,< 目标列表达式 > ] ....
FROM < 表名或视图名 >  [ ,< 表名或视图名 >....]  |  ( < SELECT语句 > ) [AS] <别名> 
[ WHERE < 条件表达式 > ]

数据查询

SELECT [ ALL | DISTINCT ] < 目标列表达式 > [ ,< 目标列表达式 > ] ....
FROM < 表名或视图名 >  [ , < 表名或视图名 > ]   |  ( < SELECT 语句 > ) [ AS ] < 别名 > 
[ WHERE < 条件表达式 > ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ASC | DESC] ]
# 单表查询
SELECT Sno,Sname
FROM Student;
# 查询全体信息
# 查询全体信息
SELECT *
FROM Student;
# 字符串常量 为目标列表达式
SELECT Sname,'Year of Birth', 2014-Sage,LOWER(Sdept)
FROM Student;

# 取别名
SELECT Sname NAME ,'Year of Birth' BIRTH , 2014-Sage BIRTHDAY, LOWER(Sdept) DEPARTMENT
FROM Student;
# 就是将列头改个名字
# 清除取值重复的行 用DISTINCT 默认的是所有的ALL
SELECT DISTINCT Sno
FROM SC;
# 满足条件的元组
SELECT Sname
FROM Student
WHERE Sdept ='CS';# 找出表student 中的Sdept='CS'的Sname
# 范围内 年龄在20~23岁之间的学生的姓名,系别和年龄
SELECT Sname ,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
#LIKE 可以用来进行字符串的匹配,
[NOT] LIKE '<'

安全性

Grant <权限> on 表名[(列名)] to ⽤户 With grant option
授权命令是由数据库管理员使⽤的,若给⽤户分配权限时带
With grant option⼦句,则普通⽤户获权后,可把⾃⼰的权限授予其他⽤户。

grant select on table SC to public with grant option;

回收权限 revoke
REVOKE <权限> ON <数据对象> FROM <⽤户名> cascade 
revoke select on SC to public;

# 数据库角色:
create role  <角色名>
create role CEO;

角色授权
grant <权限> on < 对象类型> 对象名 to <角色名>,<角色名>
grant select on Student from CEO;

收回权限
revoke <权限> on <对象名> from 角色名
revoke select on Student from CEO;

把对数据库的所有操作都记录到审计⽇志中,然后就可以通过⽇志审查这个⾥⾯是否有⼀些⾮法的⾏
对 修改SC数据的操作进⾏审计
audit update on SC
取消对SC表的⼀切审计
noaudit update on SC;

完整性

1 实体完整性
主码唯⼀,且⾮空
create table course (id int not null ,time varchar(255),primary key (id));
create table course (id int not null primary key,time varchar(255));
-------------------------------------------------------------------------
2 参照完整性
外码的要么没有,要么只有⼀个
create table course (id int,time varchar(255),
title varchar(255),teacher_id int, primary key(id),
foreign key (id) references course_description(course_id);
-------------------------------------------------------------------------
3 ⽤户定义完整性
1 ⾮空
create table student(
no char(9) primary key,
age int not null
);
2 列值唯⼀
create table student(
no char(9) primary key,
age int unique
);
3 满⾜某⼀个条件表达式 check来写
create table student(
no char(9) primary key,
sex char(2) check (sex in ('男','⼥')),
age int not null
);

范式

候选码

  • 概念: 可以推出所有属性
    如何选出候选码?
    1)只出现在左边的⼀定是候选码
    2)只出现在右边的⼀定不是候选码
    3)左右都出现的不⼀定
    4)左右都不出现的⼀定是候选码
    5)再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码,
    否则 你要吧每⼀个可能的值 放进当前确定的候选码⾥⾯进⾏求 闭包
⽐如
R<U,F> ,U(A,B,C,D,E,G) , F={AB-->C,CD-->E,E-->A,A-->G) ,求候选码:
B⼀定是候选码 D⼀定是候选码
G⼀定不是候选码
A不⼀定 C不⼀定 E不⼀定
BD->啥也推不出来,所以要把每⼀个可能的求闭包
(BDA)+= 可退出C E A G 所以可以退出ABCDEG
(BDC)+= 可退出 E A G 所以可以退出ABCDEG
(BDE)+= A G C 可以退出ABCDEG
那么他的候选码最终是{ (BDA),(BDC),(BDE) };

超码

超码: 能表示出所有属性的集合, ⽐如 (BDA),(BDC),(BDE) BDCA BDEA ABCDE

三大范式

第一范式: 所有字段都是不能分割的原子值
第二范式: 不能有候选码的真子集决定
第三范式: 不存在传递关系: AB->C C->D 这就存在传递关系,就不是第三范式
AB->C CD->E

试题

# 后面的还没有挨个复习,太多了,太难了。
# 找了份试卷,做做SQL把

# 第一题:(1) 创建 Student 表,其中 Ssex 只能取‘男’或‘女’;(2 分)
create table Student (Sno char(7) Primary key,Sname varchar(255),Sage int,
Ssex  char(2)  constraint C1(别名) check(Ssex in('男', '女'),Sdept varchar(255)
                     );
# 注意的地方, constaint 是选择的作用。
# 第二题:(2) 查询选修了课程的学生学号, 要求去掉结果表中的重复行;(2 分)
select distinct(去重) Sno From SC;
# 注意 distinct 用于去重
# 第三题:(3) 查询信息工程系年龄在 20 岁以下的学生姓名(2 分)
select Sname from Student where Sdept='信息工程系' and Sage < 20;
# 第四题:(4) 查询所有姓王的学生的姓名、学号和性别;(2 分
select Sname,Sno,Ssex from Student  where Sname like '王%';
# 第五题:(5) 查询选修了课程的学生人数;(2 分)
select count(distince Sno) from SC;
# 第六题: (6) 查询‘操作系统’课程的平均分;(2 分)
select avg(grade) from SC Course where SC.Cno=Course.Cno and Course.Cname='操作系统';
# 第七题: (7) 查询选修了两门以上课程的学生学号;(3 分)
select Sno from SC group by Sno having count(*)>2;
# 注意 group by 能与where连用,但需要加count或者max,min,avg需要用having 替代
# 第八题: (8) 查询选修了操作系统且成绩在 80 分以上的所有学生学号和姓名;(3 分)
select  Sno,Sname from SC Course Student where SC.Grade>=80 and 
        SC.Cno =Course.Cno and Course.Cname='操作系统' and SC.Sno=Student.Sno;
# 第九题:(9) 查询间接先修课是“数据库系统原理”的课程名,即该课程先修课的先修课是“数据库系统原理”;(3 分) 
select A.Cname from Course A where A.Cpno in(
  select Cno from Course B where B.Cpno='数据库系统原理';
)
# 第十题: (10) 查询至少选修了学号为 2018001 学生选修的全部课程的学生学号;(3 分) 
select Sno from Student where not exists (select * from SC X where Sno = '2018001' and 
not exists (select * from SC Y where Y.Sno =X.Sno)
# 第十一题: (11) 插入一条选课记录(‘2018003,’3’);(3 分)
insert into SC(Sno,Cno) values('2018003','3');
# 第十二题: (12) 将所有学生的年龄加 1 岁;(3 分)
update Student set Sage=Sage+1;
# 第十三题: (13) 定义一个视图 Stu_CS(Sno,Sname,Avg_grade),它由计算机系学生的学号、姓名和平均成绩组成;(3 分)
create view Stu_CS(Sno,Sname,Avg_grade) AS select Sno,Sname,avg(grade) from Student,SC 
where Student.Sdept='计算机系' and SC.Sno=Student.Sno groupy by SC.Sno ,Sname;
# 第十四题: (14) 把对 Student、Course 和 SC 三个表查询的权力授予给所有用户;(3 分)
grant select on table Student,Course,SC to public;
# 扩限 格式 grant 权限 on table 表名,表名 to 开放还是关闭
# 第十五题: (15)删除课程号为 3 的学生的全部信息;(3 分) 
delete from Student where Sno in (select Sno from SC where SC.Cno=3);
# 第十六题: (16)为 Course 表增加一列 Ccredit(学分),数据类型为 int;(3 分)
alter table Course add Ccredit int; 

foreign key () references ()
Grant <权限> on 表名[(列名)] to ⽤户 With grant option
授权命令是由数据库管理员使⽤的,若给⽤户分配权限时带
With grant option⼦句,则普通⽤户获权后,可把⾃⼰的权限授予其他⽤户。

字节填充

十六进制中出现(7D 5E),将其转译成7E
出现(7D 5D),将其转译成7D
出现小于20的字符,要在前面加上(7D x).
例如:

一个PPP帧的数据部分(十六进制) 是 7D 5E FE 27 7D 5D 7D 5D 65 7D 5E.试问真正的数巨是什么(十六进制写出)
解: 找出7D 和他后面的.跟据上面说的,我们转化成
7E FE 27 7D 7D 65 7E

零比特填充

二进制中二进制中的原则是连续5个1之后在后面填一个0,所以我们反过来转原码,就是遇5个连续1,把它后面紧跟的0删掉.
例如:

0110111111111100
我们将其转化成011011111,011111,000
逗号后面那个零是加上去的
反过来给出0001110111110111110110我们转成源码
000111011111,11111,110
逗号代表我们在其位置删掉了一个0

CSMA/CD协议

无连接的工作方式

  • 不必先建立连接就可以直接发送数据
  • 对发送的数据帧不进行编号,也不要求对方发回确认
  • 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的
  • 以太网提供的服务是不可靠的交付,即尽最大努力的交付当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定
  • 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送

争用期

  • 送数据帧的站,在发送数据帧后至多经过时间 2τ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞
  • 的端到端往返时延 2τ 称为争用期,或碰撞窗口
  • 用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞

争用期的长度:

  • 以太网取 51.2 us 为争用期的长度
  • 对于 10 Mb/s 以太网,在争用期内可发送512 bit,即 64 字节
  • 以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突

    例:

使用CSMA/CD协议的10Mbit/s 以太网中,某个站发送数局势检测到碰撞,执行退避算法是选择了随机数为r=100.这个站需要等待多长时间才能再次发送数据?如果是100Mbit/s的以太网呢?


解:10Mbit/s的以太网,争用期是512比特时间,r=100 所以退避时间是51200比特时间.
等待时间就是51200/10=5120us=5.12ms
对于100Mbit/s的以太网,

最短有效帧长:

  • 如果发生冲突,就一定是在发送的前 64 字节之内
  • 由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节
  • 以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧

$$ 最短有效帧长=总传播时延(tao)数据传数速率*2 $$

例:

假定1km长的CSMA/CD网络的数据率为1Gbit/s.设信号在网络上的传播速率为200000km/s.求能够使用此协议的最短帧长.
解:传播时延t(tao)=(1km)/(200000km/s)=5us .2t=10us;
发送:(1Gbit/s)*(10us)=10000bit
最短是10000bit

信道利用率

发送时间T,回复时间t,;

$$ a=t/T_0 $$

$$ 利用率S_{max}=T_0/(T_0+t)=1/(1+a) $$

无效帧规定:

  1. 真的长度不是整数个字节
  2. ==用收到的帧检测序列FCS(使用CRC)查处有差错==
  3. 收到的帧的MAC客户数据字段的长度不在46~1500字节之间,考虑到MAC帧首部和尾部的长度共有18字节,可以得出有效的MAC帧长度为64~1518字节之间

第四章

三种类别的IP地址

| | | | | |
| --- | --- | --- | --- | --- |IP地址的指派范围| 网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中的最大主机数 |
| A | 126(27 - 2) | 1 | 126 | 16777214 |
| B | 16383(214-1) | 128.1 | 191.255 | 65534 |
| C | 2097151(221-1) | 192.0.1 | 223.255.255 | 254 |

目录
相关文章
|
30天前
|
关系型数据库 MySQL Go
数据库的事务操作 | 青训营
数据库的事务操作 | 青训营
|
30天前
|
存储 关系型数据库 MySQL
数据库期末考试基础——数据库系统概述
数据库期末考试基础——数据库系统概述
20 2
|
11月前
|
BI 数据库 数据安全/隐私保护
数据库—机房收费系统系列问题
解决办法:原来这里的User_Info 和 PWD 得与数据库中的对应,大小写也得对应
数据库—机房收费系统系列问题
|
6月前
|
数据库
数据库原理—数据、数据库(一)
数据库原理—数据、数据库(一)
|
11月前
|
SQL 数据库连接 数据库
数据库—初识机房收费系统
数据库视频终于快看完了,这几天有点想敲机房收费系统的冲动,一方面看着好多人都敲好几天了,心理有点压力吧;另一方面,对于机房收费系统的渴望却是占据了很大一部分!
|
存储 SQL 缓存
【机房重构】之数据库的操作
【机房重构】之数据库的操作
115 0
|
SQL 关系型数据库 MySQL
数据库错题
数据库错题
102 0
|
SQL Oracle 关系型数据库
科普数据库(一)
d 格式:alter table 表名 modify 列名 列的类 演示:alter table users modify mobile char(11)
148 0
|
存储 Java 数据库连接
科普数据库(二)
d 格式:alter table 表名 modify 列名 列的类 演示:alter table users modify mobile char(11)
157 0
|
Oracle 关系型数据库 Linux
科普数据库(三)
d 格式:alter table 表名 modify 列名 列的类 演示:alter table users modify mobile char(11)
230 0