sql数据库开发知识总结:基础篇posted on
1.数据库概述
(1) 用自定义文件格式保存数据的劣势。
(2) dbms(database management system,数据库管理系统)和数据库,平时谈到”数据库”可能有两种含义:mssql server,oracle等某种dbms;存放一堆数据库的一个分类(catelog)。
(3) 不同品牌的dbms有自己不同的特点:mysql,mssqlserver,db2,oracle,access,sybase等。对于开发人员来讲,大同小异。
(4) 除了access,sqlserverce等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习,开发时是连接本机的数据库,上线运行时是数据库运行在单独的服务器。
数据库中的概念(1) catalog(类)(又叫数据库database,表空间tablespace),不同类的数据因该放到不同的数据库中。
1) 便于对各个catalog进行个性化管理
2) 避免命名冲突
3) 安全性更高
(2) table(表);不同类型的资料放到不同的”格子”中,将这种区域叫做”表”,不同的表根据放的数据不同进行空间的优化,找起来也方便。
(3) 列(column),字段(field)。
主键(primarykey)(1) 主键就是数据行的唯一标示,不会重复的列才能当主键,一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都会设定主键。
(2) 主键有两种选用策略;业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号,银行账号等。逻辑主键是使用没有任何业务意义的字段做主键,因为很难保证业务主键不会重复(身份证号重复),不会变化(账号升位),因此推荐用逻辑主键。
(3) 逻辑主键:完全给程序看的,业务员不会看的数据。
sql server管理(1) sql server的两种验证方式:用户名验证和windows验证,开发时用windows验证就行了。
(2) 常用字段类型:bit(可选值0,1),datetime,int,varchar,nvarchar(可能含有中文用nvarchar)。
(3) varchar(),nvarchar().char(n)的区别:char(n)不足长度n的部分用空格填充。var: variable:可变的。
sql语句入门(1) sql语句是和dbms”交谈”专用的语句,不同dbms都认sql语法。
(2) sql语句中字符串用单引号。
(3) sql语句是大小写不敏感的,不敏感指的是sql关键字,字符串值还是大小写敏感。
(4) 创建表,删除表不仅可以手工完成,还可以执行sql语句来完成,在自动化部署,数据导入中用的很多。
创建表: create table t_person 删除表:drop table t_person
(
id int not null,
name nvarchar(50),
age int null
)
(5) 执行简单的insert语句: insert into t_person(id,name,age) values(1,’jim’,39)
(6) *(熟悉):sql主要分ddl(数据定义语言)和dml(数据操作语言)两类,create table,drop table,alter table等属于ddl,select,insert,update,delete等属于dml。
主键选择(1) sql server中两种常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称guid)。
(2) 用标识列实现字段自增可以避免并发等问题,不用开发人员控制自动增长,用标识列的字段在insert的时候不用指定主键的值,香港空间,将字段的”是标识列”设置为”是”,一个表只能有一个标识列。
(3) guid算法是一种可以产生唯一标示的高效算法,它使用网卡mac地址,纳秒级时间,芯片id码算出来的,这样保证每次生成的guid永远不会重复,无论 是同一个计算机上还是不同的计算机,sql server中生成guid的函数newid(),.net中生成guid的方法:guid.newguid(),返回值是guid类型。
例如:sql server:select newid()
c#代码中 :guid id=guid.newguid();
(4) (*)int自增字段的优点:占用空间少,无需开发人员干预,易读。缺点:效率低,数据导入导出的时候很痛苦。
(5) (*)guid的优点:效率高,数据导入导出方便,缺点:占用空间大,不易读。
数据插入(1) insert语句可以省略表名后的列名,但是不推荐。insert into person2 values(‘lucy’,’38’)
(2) 如果插入的行中有些字段的值不确定,那么insert的时候不指定那些列即可。
(3) 给字段可以设置默认值,如果guid类型主键的默认值设定为newid()就会自动生成,很少这样干: insert into person3(id,name,age) values(newid(),’tom’,30)
数据更新(1) 更新一个列:update t_person set age=30
(2) 更新多个列:update t_person set age=30,name=’tom’
(3) 更新一部分数据:update t_person set age=30 where name=’tom’,用where语句表示只更新name是’tom’的行,注意sql中等于判断用单个=,而不是==。
(4) where中还可以使用复杂的逻辑判断:
update t_person set age=30 where name=’tom’ or age
(5) where中可以使用的其他逻辑运算符是:or,and,not,,>=,)等。
数据删除(1) 删除表中的全部数据:delete from t_person。
(2) delete只是删除数据,表还在,和drop table不同。
(3) delete也可以带where子句来删除一部分数据:delete from t_person where fage>30。
数据检索(1) 简单的数据检索:select * from t_employee。
(2) 只检索需要的列:select fname from t_employee。
(3) 列别名:select fnumber as 编号,fname as 姓名 from t_employee。
(4) 还可以检索不与任何表关联的数据:select 1+1,select newid(),select getdate()。
数据汇总(1) sql聚合函数:max(最大值),min(最小值),avg(平均值),sum(和),count(数量)。
数据排序(1) order by子句位于select语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排序,asc)还是降序(从大到小排序,desc)。
(2) 按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序
select * from t_employee order by fage desc,fsalary desc
(3) order by子句要放到where子句之后:
select * from t_employee where fage>23 order by fage desc,fsalary desc
通配符过滤(模糊匹配)(1) 通配符过滤使用like。
(2) 单字符匹配的通配符为半角下划线”_”,它匹配单个出现的字符,以任意字符开头,剩余部分为”erry”:
select * from t_employee where fname like ‘_erry’
(3) 多字符匹配的通配符为半角百分号”%”,它匹配任意次数(零或者多个)出现的任意字符,”k%”匹配以k开头,任意长度的字符串。检索姓名中包含”n”的员工的信息:
select * from t_employee where fname like ‘%n%’
空值处理
