我的三个月实习——PB运维

SQL基本语句和原理

第一阶段(基本语法)

任务
编程(写程序):做一些窗口,提供一些资料的输入或输出的功能,来达到与数据库中各个表的数据的互动行为(也叫“交互”)。
基础SQL语句
Select语句: SELECT <栏位列> FROM <表> WHERE <检索条件>;
Insert语句: INSERT INTO <表> VALUES(<各栏位赋值,用逗号隔开>);
Update语句:UPDATE <表> SET <各栏位赋值,用逗号隔开> WHERE <检索条件>;
Delete语句:DELETE FROM <表> WHERE <检索条件>;

SELECT BH,XM,XB,NL,JJ FROM BRXXB;
INSERT INTO BRXXB VALUES(‘0001’,’张三’,’1’,25,’应届毕业生’);
UPDATE BRXXB SET NL = 23 WHERE BH = ‘0001’;
DELETE FROM BRXXB WHERE BH = ‘0001’;

注意:
1)SQL语句中要输入英文状态下的符号;
2)多条语句之间用分号(;)隔开;
3)输入字符型数据要用一对单引号(’’)或双引号(“”)隔开,不可以一个单一个双;
4)数值型数据不需要加引号,如果加了引号会变成字符型;

主键字段在一个表中,可以指定一个字段为主键字段,也可以指定多个字段为主键字段;
被指定为主键的字段组合在一起,可以使表格中不会出现一模一样的两笔资料;

(1)关联两个表
FROM TJ_TJDJB,HYDWDMB FROM:所有要关联的表放在这里;
表名.字段名
(2)优化(给关联的表取别名)
FROM TJ_TJDJB A,HYDWDMB B (取别名-空格)
(3)优化(给字段取别名)
A.TJBH AS ‘体检编号’

SELECT A.TJBH,A.TJCS,B.MC,A.XM,
A.XB,A.NL,A.TJLB,A.DJLSH
FROM TJ_TJDJB A,HYDWDMB B
WHERE A.DWBH = B.BH;

MySQL自定义(0为女,1为男)

SQL查询性别字段为0显示男,1显示女,并输出对应数量
SELECT
CASE
WHEN(Sex=0)
THEN ‘男’
WHEN(Sex=1)
THEN ‘女’
ELSE ‘X’
END AS Gender,
COUNT(1) AS CNT
FROM student
GROUP BY Sex

第一阶段(原理)

简述SQL SERVER查询过程
SQL请求1– 查询缓存2 – SQL语法检查3 – SQL语义检查 4 – 对象锁 5 – 权限验证6 – SQL优化7- 查询缓存 8 - (物理查询9) - 输出至缓存区10
若查询缓存区,有对应执行计划,那么跳过编译过程(3 - 7)
事务并发时,会产生哪些问题
(重在理解各个情况,问题名字说出来是得分点)
丢失更新:每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失
脏读:一个事务读取到了另外一个事务没有提交的数据
不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的
幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

SQLserver 数据库,事务属性,分别是什么作用
原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中的操作要么做要么不做;
一致性(Consistency):事务必须是数据库从一个一致性状态变到另一个一致性状态;
隔离性(Isolation):一个事务内部的操作及使用的数据对并发的其他事务的隔离的,并发执行的各个事务之间不能相互干扰;
持久性(Durability):一个事务一旦提交,它对数据库中数据的改变是永久性的。

多表连接有哪几种?有什么区别?
内连接: inner jion
外连接: left join right join full join
交叉连接: 笛卡尔乘积(列相加、行相乘)

什么是聚集索引?主键、聚集索引、唯一索引有什么共同点?有什么区别?
聚集索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引
主键:主键是唯一的,所以创建了一个主键的同时,也就这个字段创建了一个唯一的索引
唯一索引:实际上就是要求指定的列中所有的数据必须不同

区别:
一个表的主键只能有一个,而唯一索引可以建多个
主键不可为null,唯一索引可以为null
一个表中的聚焦索引只有一个
SQLServer默认主键就是聚焦索引,但主键就是聚焦索引是错误的

当某个客户端的体检程序,连接服务器SQL Server数据库的很慢,如何查找定位问题(10分)

1)打开当前电脑任务管理器,找到PID
2)根据PID,采用SQL SERVERR的性能工具PROFILER.EXE,进行跟踪
3)将跟踪到的SQL 语句,在查询分析器中执行,分析CPU及IO的销耗情况
4)

什么是死锁、什么是阻塞?检索二者区别?
原因:
事务A在持有资源(锁)a的同时,请求获取资源(锁)b;而事务B又在持有资源(b)的同时,请求获取资源(锁)a。这时A,B事务一直处于阻塞状态,资源a,b也一直得不到释放,这样的情况,我们称之为死锁。
区别:
死锁和阻塞的区别在于我们不允许出现死锁,但可以容忍阻塞。正常情况下,阻塞是可以恢复的,而死锁就是一个死循环。

系统出现卡死现象,有什么方法可以明确断定是死锁而不是阻塞?有哪些尽量避免死锁的方法?
判断方法
首先数据库执行:sp_who (sp_who2) 检查是否有 BLK <> 0 的 记录
避免方法:
1、多个表操作时,必须保持顺序一致
2、不要在事务中,进行大量的计算操作及交互操作,特别是人机交互操作
3、对开启明显的事务的错误处理中,必须要回滚事务
4、必面保证,只有在多表操作时,才显示的开启事务。否则采用系统默认即可

当所有客户端的程序查询SQL SERVER 普遍变慢,此时如何查询排队问题
1)没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2)I/O吞吐量小,形成了瓶颈效应。
3)没有创建计算列导致查询不优化。
4)内存不足
5)网络速度慢
6)查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7)锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8)sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
9)返回了不必要的行和列
10)查询语句不好,没有优化
以上所说无外乎如下几个方面:
1、服务器性能(2、4)、网络环境(5)、
2、数据库本身(1、3、参数设置)
3、程序本身(查询语句、代码逻辑)

为了提高数据库查询速度,一般在表上建立索引,不过不合理的写法导致无法利用索引,甚至出现表扫描的情况,大大降低查询的速度,请写出有哪些写法无法合理利用索引?

Like 、 not like 、in 、 not in 、 !=、!>、!< 、<> 、exists 、not exists、union 、函数及表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值