主键(PrimaryKey)
- 主键就是数据行的唯一标识。不会重复的列才能当主键。一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键
- 主键有两种选用策略:业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号、银行账号等;逻辑主键是使用没有任何业务意义的字段做主键,完全给程序看的,业务人员不会看的数据。因为很难保证业务主键不会重复(身份证号重复)、不会变化(帐号升位),因此推荐用逻辑主键。
表间关联、外键(ForeignKey)
SQLServer的管理
- 需要安装SQLServer2005或者SQLServer2008,若要使用SQLServer管理工具进行开发还要安装SQLServer Management Studio,还可以使用VisualStudio进行管理
- 使用免费的SQLServerExpress版本,Express版本的服务器名称.\SQLEXPRESS,对于开发人员来讲和其他版本没有区别。
- SQLServer的两种验证方式:用户名验证和Windows验证,开发时用Windows验证就行。
- 开发人员关注点在开发上,而不是配置、备份等之上,那是DBA做的事情。
- 创建数据库,创建表,设置主键
- SQLServer2008_ManagementStudio中:编辑200行。SQLServer2005_ManagementStudio中:打开表。
- 常用字段类型:bit(可选值0、1)、datetime、int、varchar、nvarchar(可能含有中文用nvarchar)
- Nvarchar(50)、Nvarchar(MAX)
- varchar、nvarchar 和char(n)的区别:char(n)不足长度n的部分用空格填充。Var:Variable,可变的。
- SQL主要分DDL(数据定义语言)和DML(数据操作语言)两类。
- Create Table、Drop Table、Alter Table等属于DDL,
- Select、Insert、Update、Delete等属于DML
主键选择
SQLServer中两种常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)
(用标识列实现字段自增可以避免并发等问题,不要开发人员控制自增。用标识列的字段在Insert的时候不用指定主键的值。将字段的“是标识列”设置为“是”,一个表只能有一个标识列。)
(Guid算法是一种可以产生唯一标识的高效算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同的计算机。在公元3400年以前产生的GUID与任何其他产生过的GUID都不相同。SQLServer中生成GUID的函数newid(),.Net中生成Guid的方法:Guid.NewGuid(),返回是Guid类型。)
- Int自增字段的优点:占用空间小、无需开发人员干预、易读;缺点:效率低;数据导入导出的时候很痛苦。
- Guid的优点:效率高、数据导入导出方便;缺点占用空间大、不易读。(Guid类型主键的默认值设定为newid()就会自动生成)
- 业界主流倾向于使用Guid。
数据排序
ORDER BY子句(升序, ASC)(降序, DESC)。通配符过滤
- 单字符匹配的通配符为半角下划线“_”,它匹配单个出现的字符。
- 多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的任意字符。
空值处理
SQL中使用is null、is not null来进行空值判断。
SQL常用函数
数字函数
- ABS() :求绝对值。
- CEILING():舍入到最大整数。3.33将被舍入为4、2.89将被舍入为3、-3.61将被舍入为-3。 Ceiling→天花板
- FLOOR():舍入到最小整数。3.33将被舍入为3、2.89将被舍入为2、-3.61将被舍入为-4。Floor→地板。
- ROUND():四舍五入。舍入到“离我半径最近的数”。Round→“半径”。Round(3.1425,2)。
字符串函数
- LEN() :计算字符串长度
- LOWER() 、UPPER ():转小写、大写
- LTRIM():字符串左侧的空格去掉
- RTRIM ():字符串右侧的空格去掉
- LTRIM(RTRIM('
bb ')) - SUBSTRING(string,start_position,length)
- 参数string为主字符串,start_position为子字符串在主字符串中的起始位置,length为子字符串的最大长度。
空值处理函数
- 执行备注中的代码
- ISNULL(expression,value):如果expression不为空则返回expression,否则返回value。