黑马程序员—学习笔记之SQL数据库概述、SQLServer的使用

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

一、数据库概述

(一)平时谈到“数据库”的两种含义

1.MYSQL、MSSQLServer、Oracle等某种DBMS(DateBase Management System,数据库管理系统)

2.存放一堆数据表的个分类(Catalog)

(二)不同品牌DBMS特点:

1.MYSQL:运行速度快,数据存储完整性不高

2.MSSQLServer:与.net结合的非常好

3.DB2、Oracle:大型数据库,安全性、处理速度、处理变化量非常大的程序

4.Access:可以当文件来用,不需要安装服务器

(三)MSSQLServer

1.SQLServer包括两种

a)MSSQLServer:MicroSoft SQL Server,由微软公司开发的

b)Sybase:与微软一同合作的开发的DBMS

c)两者是在同一个基础上开发出来的两个分支

(四)数据库运行

绝大部分的数据库都需要数据库服务器才能运行,Access、SQLServerCE除外。学习和开发是连接本机数据库,上线运行时数据库运行在单独的服务器上。

二、数据库中的概念

(一)Catalog(分类)(又叫数据库DateBase<MSSQLServer中说法>、表空间TableSpace<Oracle中的说法>),将不同的数据放在不同的数据库里

1.作用

a)便于对各个Catalog进行个性化管理

b)避免命名冲突

c)安全性更高

(二)Table(表)

不同类型的数据放在不同的表中。不同的表根据放的数据的不同进行空间的优化。

(三)Column(列)或Field(字段)

(四)PrimaryKey(主键)

主键是数据行的唯一标识。不会重复的列才能当主键。表可以没有主键,但会变得非常难处理。因此没有特殊理由都要设定主键

1.主键的两种选用策略:

a)业务主键:使用有业务意义的字段做主键。如身份证号、工号。

b)逻辑主键:使用没有任何业务意义的字段做主键。完全给程序看的,业务人员不会看的。如流水号。很难保证业务主键不会重复、不会变化(如账号升位),因此,推荐使用逻辑主键。逻辑主键通常要隐藏。

(五)ForeignKey(外键)

外键是该表是另一个表之间联接的字段(外键必须为另一个表中的主键),其用途是保证数据的完整性。

三、SQLServer的管理

(一)常用字段类型:bit(可选值0、1)、datetime、int、varchar(按字节存储)、nvarchar(按字符存储、汉字用nvarchar)

1.char和varchar区别:char为定长,不足部分用空格补足

2.varchar和nvarchar的区别:varchar按字节存储,nvarchar按字符存储。如varchar(20)可以存储10个汉字,而nvarchar(20)可以存储20个汉字(一个汉字两个字节)。

二、SQL语句入门

(一)SQL语句

SQL语句是和DBMS“交谈”专用的语句,不同的DBMS都认SQL语法

1.特点

a)SQL语句中表示字符串用单引号

b)SQL语句是大小写不敏感的。不敏感是指SQL关键字,字符串指还是大小写敏感

c)创建表、删除表可以手工完成,也用SQL语句完成

2.分类

1.DDL(数据库定义语言,Data Definition Language):对表进行定义

CREATE TABLE                --创建表

DROP TABLE                  --删除表

ALTER TABLE                 --修改表

2.DML(数据库操作语言,Data Manipulation Language):对数据进行操作,不影响表结构

SELECT                      --检索数据

DELETE                      --删除数据

INSERT                      --插入数据

UPDATE                      --更新数据

3.DCL(数据库控制语言,Data Control Language):用于设置或修改数据库用户权限

GRANT                       --授予权限

REMOVE                      --撤销权限

DENY                        --拒绝权限

(二)主键选择

1.SQLServer中常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)

a)标识列:用标识列实现自增可以避免并发等问题。将字段的“是标识列”设置为“是”,一个表只能有一个标识列。

b)Guid算法:一种可以产生唯一标识的高效算法。使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证无论是同一台计算机还是不同计算机每次产生的GUID不会重复。 SQLServer中生成Guid的函数newid(),.Net中生成Guid的方法:Guid.NewGuid(),返回是Guid类型。

2.两种类型对比

a)int自增字段优点:占用空间小、无需开发人员干预、易读;缺点:效率低、数据导入导出很痛苦

b)Guid优点:效率高、数据导入导出方便;缺点:占用空间大、不易读

c)业界主流倾向于使用Guid

(三)数据插入(Insert)

1.Insert语句可以省略表名后的列名,如insert into Person1(Number,Name,Age,NickName) values(011,"张三",20,"小二")

可以省略为insert into Person1 values(011,"张三",20,"小二"),但不推荐

2.如果插入的行中有些字段不确定,那么Insert的时候不指定这些列即可

3.可以给字段默认值,如果Guid类型主键的默认值设定为newid(),就会自动生成。(一般不这样做)

4.可以只执行选中的SQL语句

(四)数据更新(Update)

1.更新一个列:UPDATE T_Person set Age=30;

2.更新多个列:UPDATE T_Person set Age=Age+1,Name='Lucy';

3.更新一部分数据:用Where语句。

4.Where中可以使用的其他逻辑运算符:or、and、not、<、>、<=、>=、!=(或<>)等

(五)数据删除(Delete)

1.删除表中全部数据:DELETE FROM T_Person。Delete只删除数据,表还在,和Drop Table不同

2.删除表中部分数据:使用Where语句。如DELETE FROM T_Person WHERE Age>20

(六)数据检索(Select)

1.检索表中全部数据:SELECT * FROM T_Employee

2.只检索需要的列:SELECT FNumber,FAge FROM T_Employee

3.按条件检索:使用Where语句。如SELECT FNumber,FAge FROM T_Employee WHERE FAge>20

4.列别名:SELECT FName as 姓名,FAge as 年龄 FROM T_Employee

5.检索不与任何表关联的数据:SELECT 1+1;SELECT Newid();SELECT getdate()

(七)聚合函数:MAX()、MIN()、AVG()、SUM()、COUNT()

大于20岁年龄的平均工资:SELECT AVG(FSalary) WHERE FAge>20;最高和最低工资:SELECT MAX(FSalary),MIN(FSalary)

(八)数据排序(ORDER BY)

1.升序:ASC(可省略,但不推荐。程序不是越少越好,而是越好读越好

2.降序:DESC

3.先按年龄升序排列,再按工资降序排列:SELECT * FROM T_Employee ORDER BY Fage ASC,FSalary DESC

4.ORDER BY子句位于SELECT语句的末尾,放到WHERE子句之后。

(九)通配符过滤

1.通配符过滤使用LIKE

2.单字符通配符:半角下划线“_”,如SELECT * FROM T_Employee WHERE FName LIKE ‘_eery’

3.多字符通配符:半角百分号“%”

(十)空值处理

1.数据库中,一个列如果没有指定值,那么其值为null,数据库中null表示不知道是什么值,而不是表示没有。因此,SELECT NULL+1返回值为NULL。而C#中给变量赋值为null表示不指向任何字段。

a)SELECT * FROM T_Employee WHERE FName = null;没有返回数据,应该用SELECT * FROM T_Employee WHERE FNameis null;

b)SELECT * FROM T_Employee WHERE FName != null;没有返回数据,应该用SELECT * FROM T_Employee WHERE FName is not null;

2.SQL中使用is null、is not null进行空值判断:如SELECT * FROM T_Employee WHERE FName is null;SELECT * FROM T_Employee WHERE FName is not null;

(十一)多值匹配

1.关键字IN:SELECT * FROM T_Employee WHERE FAge in (20,23,25)

2.关键字BETWEEN ...AND...

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页