330 likes | 509 Views
SQL Server 2000 数据库入门. SQL Server 2000. MS 数据库管理系统 组成: 程序: 用户界面,工具 数据结构:管理和存储数据 系统 database Master Pubs tempDB. SQL Server 数据库. 管理、存储和访问数据 Database 对应文件: .mdf, .ldf 包含: Table, View, Index, Store Procedure, Trigger, etc. SQL 2000 管理工具. 创建 database. 右键 -〉 新建数据库 输入数据库名 : test
E N D
SQL Server 2000 • MS 数据库管理系统 • 组成: • 程序: 用户界面,工具 • 数据结构:管理和存储数据 • 系统database • Master • Pubs • tempDB 数据库入门
SQL Server数据库 • 管理、存储和访问数据 • Database 对应文件: .mdf, .ldf • 包含: • Table, View, Index, Store Procedure, Trigger, etc. 数据库入门
SQL 2000管理工具 数据库入门
创建database • 右键-〉新建数据库 • 输入数据库名: test • 包含: 数据文件: test_Data 事务日志文件:test_Log 及对应物理文件: .mdf, .ldf 数据库入门
表 Table • Table: 表是包含数据库中所有数据的数据库对象。 表结构: Column 列(字段)的集合 每行是一条记录。 表的定义: 列名 , 数据类型, 初始值, 是否允许空 约束规则,索引, 主键, 外键 数据库入门
建新表 • 右键-> 新建表 • 列名, 数据类型,长度,允许空 • 类型:整数:bigInt: 64 bits Int: 32bits,dec, Numeric, • Money • Datetime • Char, VarChar, Nvarchar • Text, Image • 默认值 • 自动增长( + 1) • RowGUID 数据库入门
主键、外键、 • 主键(PK): 唯一标示数据, 数据完整性,主键索引,查找快速 • 关系: 引用 • 外键(FK):表与表之间的链接,数据完整性、一致性 • 索引:Index,查找快速 • 例如:部门, 职员 数据库入门
视图 View • 虚拟表, 由查询定义, 包含行、列,View数据并不真正存在在View中, 通过查询其它数据源(数据表、视图、其他数据库、其他服务器)而来。 数据库入门
存储过程 Stored Procedure /* ---- Stored Procedure: sp_backupmessage ---- Get backup file message ---- by You jianshe 2003-2-14 ---- */ CREATE PROC sp_backupmessage @as_filename VARCHAR(200) as Restore HEADERONLY FROM DISK = @as_filename GO • Stored Procedure 运行在SQL Server服务器方 类似子程序模块 可以输入、输出参数 包含数据库操作语句( or call SP ) Return value 编程语言:Transact-SQL • 优点: 模块化设计、创建一次,重复使用, 后台运行,速度更快 网络流量减少, 安全 数据库入门
触发器Trigger • 一种特殊SP, 在指定表的数据发生变化时自动生效,即被调用、被执行。(Insert, Update, Delete时) • 目的:强制业务规则和数据完整性 • Trigger: Transact-SQL语法, (简单或复杂)逻辑处理 • Tables: Inserted, Deleted 数据库入门
自定义类型、函数 • 自定义类型 一般不需要 • 自定义函数 数据库入门
数据库设计 • 需求分析 • 逻辑模型 E-R图 --- 实体关系 数据流图 --- 业务处理 • 物理模型 • 数据库 • 分析、优化 数据库入门
数据库设计Steps ⒈需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 ⒉概念结构设计阶段 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。 ⒊逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。 ⒋数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。 ⒌数据库实施阶段 运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 ⒍数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。 数据库入门
数据库设计实例 项目工作管理, 包含数据表: 职员花名册, 公司部门 系统功能 , 权力角色 , 职员角色 项目(Project) 、 项目成员(项目-职员) 项目任务分解(WBS, 分级,包括任务包、 工作量估计,计划, 进度, 人员安排,权重, 任务包父亲 ) 项目任务执行跟踪 (工作日志): 项目 - 职员 – 时间 – 对应任务包 – 实际工作量 数据库入门
E-R图实例 数据库入门
编程接口 API • ADO, OLE DB, ODBC ( JDBC), Embedded SQL, URL, XML (Internet) 使用数据库 • 打开到数据库的连接。 • 设置控制某些行为的选项 • 执行 Transact-SQL 语句 • 将返回代码的数据值、输出参数和结果集移入程序变量中,并通过程序变量由应用程序逻辑使用。 • 在完成数据库中的工作后断开连接。 数据库入门
连接数据库- PB // Profile sss SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=Excel Files;UID=;PWD='" 连接Access // Profile Access SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "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 Transaction SQLCA // 事务对象 sqlca.DBMS = ProfileString (gs_inifile, "DATABASE", "dbms", "MSS") sqlca.DATABASE = ProfileString (gs_inifile, "DATABASE", "DATABASE", "KF") sqlca.userid = ProfileString (gs_inifile, "DATABASE", "userid", "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 (gs_inifile, "DATABASE", "Dbparm", "") sqlca.AutoCommit = FALSE connect Using SQLCA; // 打开连接 Disconnect Using SQLCA ; // 切断连接 数据库入门
获取数据-SQL语句 String ls_empl_name // 变量定义 Select empl_name INTO :ls_empl_name FROM bse_employee Where empl_no = ‘system’ Using SQLCA ; if sqlca.sqlcode <> 0 then // … 失败 Else // …. 成功 End if Long ld_id = 0 String as_table = “tableXXX” //update UPDATE sys_system_id SET id_counter = :ld_id WHERE id_table_name = :as_table Using SQLCA; 数据库入门
获取数据-Datawindow // Dw_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 数据库入门
与数据库连接Datawindow 数据库入门
Transact-SQL 语言简介 • 标示符: create Table employee ( empl_no char(10) PRIMARY KEY, empl_name varchar(20), age int default 0 , ….) • 数据类型: • 函数: • 表达式: • 运算符: • 注释 • 关键字: 数据库入门
创建与删除表 • Create Table CREATE TABLE [dbo].[bse_department] ( [dep_no] [varchar] (10) not NULL , [dep_tycode] [char] (1) NULL , [dep_name] [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 [PRIMARY] GO • drop table drop table [dbo].[bse_department] GO 数据库入门
更改数据 • Insert INSERT INTO bse_department (dep_no, dep_name) VALUES ( ‘KFB’, ‘开发部’ ) GO • Update: UPDATE bse_department SET dep_name = ‘development’ WHERE dep_no = ‘KFB’ GO • Delete Delete from bse_department WHERE dep_no = ‘KFB’ 数据库入门
简单查询 • Select < 列名,…> from <表…>Where <条件>… SELECT * FROM bse_department WHERE (dep_tycode = '1') • 查询统计: SELECT dep_no AS 部门编号, COUNT(*) AS 部门人数 FROM bse_employee GROUP BY dep_no 数据库入门
联合查询 • 联合查询 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_no GROUP BY bse_department.dep_name, bse_employee.dep_no 数据库入门
聚合函数 • SUM ( …) • AVG( …) • COUNT(…) • MAX(…) • MIN(…) Select COUNT( *) from table1 Select sum( column1) from table2 数据库入门
结果集组合 • UNION Select * from tableA UNION Select * from tableB UNION Select * from tableC • Note: 结果集结构必须相同。 数据库入门
子查询 • WHERE exp [NOT] IN ( subquery) • WHERE exp comparison_op ( subquery) • WHERE NOT EXISTS ( subquery) • 例: SELECT * FROM bse_employee WHERE (dep_no NOT IN (SELECT dep_no FROM bse_department WHERE dep_no <> '0000')) 数据库入门
多维汇总数据 • CUBE SELECT 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_no GROUP BY bse_department.dep_name, bse_employee.empl_cls WITH CUBE • RollUp • SELECT 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_no • GROUP BY bse_department.dep_name, bse_employee.empl_cls WITH rollup 数据库入门
事务处理 • Transaction: 作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元4个 属性: 原子性,一致性,隔离性,持久性 • BEGIN Transaction - 启动事务 • Commit -提交 , 结束事务 • RollBack - 回滚, 结束事务 必须一次提交或全部退回 要么成功,要么失败! 确保数据完整性和一致性 数据库入门
事务处理编写原则 • 事务保持尽量短。在多用户下,必须事务保持尽量短,减少资源锁定争夺 • 不要在事务处理期间要求用户输入 • 浏览数据时,尽量不要打开事务 • 必须修改数据时,启动事务,执行修改,然后马上提交(commit)或失败后回滚(rollback)事务。 • 灵活使用游(cursor)标并发选项,如乐观并发(OPTIMISTIC ) • 在事务中,尽量访问最小量数据,减少锁定数据行数。 • 避免并发 (Lock) 数据库入门
谢谢 ! 数据库入门