1.数据库的基本操作:
1)备份还原:备份后的文件后缀为.bak 2) 还原时,当前的management中不能有同名的数据库 3)数据文件和日志文件必须在一起
4).标识列必须为int类型,并且标识列一般作为主键
5).不提倡两列以上的复合主键
6).建库—>建表—>建约束—>建数据
7).数字类型的可以不加' ',其余的都加' ' (字符,日期)
8)一个表可以定义多check约束,但是一个字段只能定义一个约束
9)主键
a.很难保证业务主键不会重复(如身份证)
b.逻辑主键(流水号) 完全是给程序看的
10)一个服务器上可以装多个SQL server实例
2.表的增删改查
1)delete时是整行删除
2)truncated比delete删除整个表的速度快
3)update 客户信息 set email=’....‘ where 客户编号=.. //update一般是对table中数据进行更新
alter table 客户信息 //alter一般是对表的结构进行更改
4) delete from t-person //只是清空
drop Table //连表本身都销毁了
5)select destinct fdepartment from t-employee //destinct消除重复(多个检索字段时,消除完全重复的行)
3.函数
1)time,datename,datepart基本相同
2)SQL中 ' (单引号)的表示, ‘ ’ ‘ ’--->用四个单引号
3)int可以隐式的转换为nchar
4)不能隐式转换的,就要强制转换
5)select convert (varchar(30),getdate(),102) //102是style类型
6)全角状态下的输入时,任何字符(包括标点符号)都占有与中文字符一样长的字节(2个字节)
7)select round(1485.55,-3,2) // 先用2截断,再用-3舍入
8) nvarchar(非ascii码) //例如中文...
varchar(纯英文名)
4.查询
1)select 查询的结果是放在内存中的,先筛选行,在筛选列
2)判断空字符串方法: a. 使用=' ' b. len(X)=0
判断null的时候,不能使用 =, 要使用 is not null 或者 not....is null
3)len函数不管是否为半角输入都标记为一个字符长度,datalengt函数如果为半角输入的算一个长度,如果为全角为2个长度
5.模糊查询
1)%等同于*
2)精确查询的效率高于模糊查询
3)like和通配符要同时出现
4)exists(....) 返回行,如果一条记录都没有则为true,否则为false
一般写在if后面
5)count( )--->中写什么列名都行,甚至可以些微count(*)来计算,
6)select.....where(a.先对这个表的行进行筛选,并放在内存中).......group by(b.然后再进行分组)
7) select...(d.最后根据select 的列名还有计算列得到最终的虚拟表)...where(a.先对这个表进行筛选)...group by(b.然后进行分组)....having(c.然后根据having的expressing进行过滤组)
8)能写在where中的不要写在having中,having中要放入聚合函数和列表达式才合理
9)内联:两张表的地位相等 外联:right left
10)交叉联:相当于排列组合的所有情况,A表航速*B表行数
11)Union查询:不是列上的扩张,而是行的扩展 (不同于inner)
12) select name, country where group by name,country (如果想在group by后面显示该列,则无论是否country能否合并,都要加载group by 的后面,才能显示该列)
13)where ...;group by ...order by 是在group by的分组完成后执行的,所以order by应该是一个表合并后的列
14)union不支持order by ,所以要对结果进行封装
15)计算列没有列名
16)select * from orderA, orderB where
a. from 先一行行将orderA和orderB的行联接 b.在where之前先乱联orderA和orderB,然后再使用where进行过滤
17)select * form orderA inner join orderB ...on order...=order..
a.inner join 在乱联时就进悉尼港过滤,这样执行效率高
6.子查询
1)表联接:不能拿唯一列作为group by 的合并列
2)子查询可以代替:变量,结果集,值列表
3)子查询能及早过滤(where),就可以提高程序的效率
4)子查询适合最终结果来自于单表的查询
5)先用子查询,再用表连接,这样效率高
6) select ...from.....where...
select是所有操作的最后执行的,首先执行from后面的语句
7.视图
7)视图:相当于对不同权限的用户对数据库中的表进行映射(不是表的本身)
8)可以让用户只看到表的映射(视图),而不用将原表进行copy
9)视图等同于表
10)视图看到用户想看的,阻止不能看的
8.索引
1)索引index =目录 (方便查询,加快查询的速度)
2)非聚集索唯一索引-->也比无索引的快
3)一般情况只用主键索引
4)用图形化的建立就可
9.事物
5)四大特性,三个关键字
6)
begin transaction
begin
commit //成功放入数据库
end
rollback //否则回滚到transaction处
7)四大特性 ACID
8)双表做关联 inner join,最常见的情况是主外键,其次是同一个键的两个外键,其次常见的是引用关系
20.存储过程
1)存储过程相当用户C#中的方法,包容一切
2)事物可以放入存储过程中
3)存储过程类似于视图
4)过程可以相互调用
5)动态SQL相当于表达式