1、SQL Server 2000 数据库入门,数据库入门,2,SQL Server 2000,MS 数据库管理系统组成:程序: 用户界面,工具数据结构:管理和存储数据系统databaseMasterPubstempDB,数据库入门,3,SQL Server数据库,管理、存储和访问数据Database对应文件: .mdf, .ldf包含:Table, View, Index, Store Procedure, Trigger, etc.,2018/9/5,数据库入门,4,SQL 2000管理工具,数据库入门,5,创建database,右键-新建数据库输入数据库名: test包含:数据文件: tes
2、t_Data事务日志文件:test_Log及对应物理文件:.mdf, .ldf,数据库入门,6,表 Table,Table: 表是包含数据库中所有数据的数据库对象。 表结构: Column 列(字段)的集合 每行是一条记录。表的定义:列名 , 数据类型, 初始值, 是否允许空约束规则,索引, 主键, 外键,数据库入门,7,建新表,右键- 新建表列名, 数据类型,长度,允许空类型:整数:bigInt: 64 bits Int: 32bits,dec, Numeric, MoneyDatetimeChar, VarChar, NvarcharText, Image默认值自动增长( + 1)RowG
3、UID,数据库入门,8,主键、外键、,主键(PK): 唯一标示数据, 数据完整性,主键索引,查找快速关系: 引用 外键(FK):表与表之间的链接,数据完整性、一致性索引:Index,查找快速 例如:部门, 职员,2018/9/5,数据库入门,9,视图 View,虚拟表, 由查询定义, 包含行、列,View数据并不真正存在在View中, 通过查询其它数据源(数据表、视图、其他数据库、其他服务器)而来。,数据库入门,10,存储过程 Stored Procedure,Stored Procedure运行在SQL Server服务器方类似子程序模块 可以输入、输出参数包含数据库操作语句( or cal
4、l SP )Return value编程语言:Transact-SQL优点:模块化设计、创建一次,重复使用, 后台运行,速度更快网络流量减少, 安全,/* - Stored Procedure: sp_backupmessage - Get backup file message - by You jianshe 2003-2-14 - */CREATE PROC sp_backupmessageas_filename VARCHAR(200)asRestore HEADERONLY FROM DISK = as_filenameGO,数据库入门,11,触发器Trigger,一种特殊SP, 在
5、指定表的数据发生变化时自动生效,即被调用、被执行。(Insert, Update, Delete时)目的:强制业务规则和数据完整性Trigger: Transact-SQL语法, (简单或复杂)逻辑处理Tables: Inserted, Deleted,数据库入门,12,自定义类型、函数,自定义类型一般不需要自定义函数,数据库入门,13,数据库设计,需求分析逻辑模型 E-R图 - 实体关系数据流图 - 业务处理物理模型数据库分析、优化,数据库入门,14,数据库设计Steps,需求分析阶段需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。概念结构设计阶段通过对用户需求进
6、行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。逻辑结构设计阶段将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。数据库物理设计阶段为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。数据库实施阶段运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。数据库运行和维护阶段数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。,数据库入门,15,数据库设计实例,项目工作管理
7、, 包含数据表: 职员花名册, 公司部门 系统功能 , 权力角色 , 职员角色 项目(Project) 、 项目成员(项目-职员) 项目任务分解(WBS, 分级,包括任务包、 工作量估计,计划, 进度, 人员安排,权重, 任务包父亲 ) 项目任务执行跟踪 (工作日志):项目 - 职员 时间 对应任务包 实际工作量,2018/9/5,数据库入门,16,E-R图实例,数据库入门,17,编程接口 API,ADO, OLE DB, ODBC ( JDBC), Embedded SQL, URL, XML (Internet)使用数据库打开到数据库的连接。设置控制某些行为的选项执行 Transact-S
8、QL 语句将返回代码的数据值、输出参数和结果集移入程序变量中,并通过程序变量由应用程序逻辑使用。在完成数据库中的工作后断开连接。,2018/9/5,数据库入门,18,连接数据库- PB,Transaction SQLCA / 事务对象sqlca.DBMS = ProfileString (gs_inifile, DATABASE, dbms, MSS)sqlca.DATABASE = ProfileString (gs_inifile, DATABASE, DATABASE, KF)sqlca.userid = ProfileString (gs_inifile, DATABASE, user
9、id, dbo)sqlca.dbpass = ProfileString (gs_inifile, DATABASE, dbpass, )sqlca.logid = ProfileString (gs_inifile, DATABASE, logid, sa)sqlca.logpass = ProfileString (gs_inifile, DATABASE, LogPassWord, )sqlca.servername = ProfileString (gs_inifile, DATABASE, ServerName, (local)sqlca.dbparm = ProfileString
10、 (gs_inifile, DATABASE, Dbparm, )sqlca.AutoCommit = FALSEconnect Using SQLCA; / 打开连接Disconnect Using SQLCA ; / 切断连接,/ Profile sssSQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm = ConnectString=DSN=Excel Files;UID=;PWD=连接Access/ Profile AccessSQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBPar
11、m = ConnectString=DSN=MS Access Database;UID=;PWD=“/ VB-1 cn.Open Driver=SQL Server;Server=Server1;Uid=SA;Pwd=;Database=northwind / VB 2 cn.Provider = sqloledb“ ProvStr = Server=MyServer;Database= northwind; Trusted_Connection=yes cn.Open provStr,数据库入门,19,获取数据-SQL语句,String ls_empl_name / 变量定义Select
12、empl_name INTO :ls_empl_name FROM bse_employee Where empl_no = system Using SQLCA ; if sqlca.sqlcode 0 then / 失败 Else / . 成功 End ifLong ld_id = 0 String as_table = “tableXXX”/updateUPDATE sys_system_id SET id_counter = :ld_id WHERE id_table_name = :as_table Using SQLCA;,数据库入门,20,获取数据-Datawindow,/ Dw
13、_list Datawindow/ d_employee_edit Datawindow Object dw_list.SetTransobject(SQLCA)dw_list.Retrieve( g_userinfo.is_dep_no, g_userinfo.is_empl_cls)./保存数据ll_ret = dw_list.update(TRUE ,TRUE) / 判断 If ll_ret = 1 then Commit ; / using SQLCA Else Rollback; / using SQLCA MessageBox(提示,保存时出错!) End if,数据库入门,21,
14、与数据库连接Datawindow,数据库入门,22,Transact-SQL 语言简介,标示符: create Table employee ( empl_no char(10) PRIMARY KEY, empl_name varchar(20), age int default 0 , .)数据类型: 函数:表达式: 运算符:注释 关键字:,数据库入门,23,创建与删除表,Create Table CREATE TABLE dbo.bse_department (dep_no varchar (10) not NULL ,dep_tycode char (1) NULL ,dep_name
15、 char (10) NULL ,dep_no1 char (4) NULL ,dep_name1 char (10) NULL ,dep_bld_date datetime NULL ,dep_vendor_shared smallint NULL ,dep_telno char (20) NULL ) ON PRIMARYGOdrop tabledrop table dbo.bse_departmentGO,数据库入门,24,更改数据,Insert INSERT INTO bse_department (dep_no, dep_name) VALUES ( KFB, 开发部 ) GOUpd
16、ate:UPDATE bse_department SET dep_name = development WHERE dep_no = KFBGODelete Delete from bse_department WHERE dep_no = KFB,数据库入门,25,简单查询,Select from Where SELECT * FROM bse_department WHERE (dep_tycode = 1)查询统计:SELECT dep_no AS 部门编号, COUNT(*) AS 部门人数FROM bse_employeeGROUP BY dep_no,数据库入门,26,联合查询,
17、联合查询 JOIN ( INNER, LEFT, RIGHT )SELECT bse_department.dep_name, COUNT(*) AS 部门人数FROM bse_employee INNER JOIN bse_department ON bse_employee.dep_no = bse_department.dep_noGROUP BY bse_department.dep_name, bse_employee.dep_no,数据库入门,27,聚合函数,SUM ( )AVG( )COUNT()MAX()MIN()Select COUNT( *) from table1 Sel
18、ect sum( column1) from table2,数据库入门,28,结果集组合,UNIONSelect * from tableAUNIONSelect * from tableBUNIONSelect * from tableC Note: 结果集结构必须相同。,数据库入门,29,子查询,WHERE exp NOT IN ( subquery)WHERE exp comparison_op ( subquery)WHERE NOT EXISTS ( subquery)例:SELECT * FROM bse_employeeWHERE (dep_no NOT IN (SELECT d
19、ep_no FROM bse_department WHERE dep_no 0000),数据库入门,30,多维汇总数据,CUBESELECT bse_department.dep_name, bse_employee.empl_cls, COUNT(*) AS 部门人数FROM bse_employee INNER JOIN bse_department ON bse_employee.dep_no = bse_department.dep_noGROUP BY bse_department.dep_name, bse_employee.empl_cls WITH CUBERollUpSEL
20、ECT bse_department.dep_name, bse_employee.empl_cls, COUNT(*) AS 部门人数FROM bse_employee INNER JOIN bse_department ON bse_employee.dep_no = bse_department.dep_noGROUP BY bse_department.dep_name, bse_employee.empl_cls WITH rollup,数据库入门,31,事务处理,Transaction: 作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元4个 属性: 原子性,一致性,隔离性,持
21、久性BEGIN Transaction - 启动事务Commit -提交 , 结束事务RollBack - 回滚, 结束事务必须一次提交或全部退回 要么成功,要么失败!确保数据完整性和一致性,数据库入门,32,事务处理编写原则,事务保持尽量短。在多用户下,必须事务保持尽量短,减少资源锁定争夺不要在事务处理期间要求用户输入浏览数据时,尽量不要打开事务必须修改数据时,启动事务,执行修改,然后马上提交(commit)或失败后回滚(rollback)事务。灵活使用游(cursor)标并发选项,如乐观并发(OPTIMISTIC )在事务中,尽量访问最小量数据,减少锁定数据行数。避免并发 (Lock),数据库入门,33,谢谢 !,