Upload
ziliang-hu
View
441
Download
2
Embed Size (px)
Citation preview
3.0 数据库与表的创建创建数据库之前的准备 :• 数据库命名规则• 需具备的权限• 数据库的所有者• 数据库上限• 数据库文件和文件组• 事务日志• 数据库状态
命名规则数据库命名规则 :
命名规则取决于数据库的兼容级别 , 不同的级别对应不同的规则级别可以为 : 60; 65; 70; 80(sqlserver2000); 90(sqlserver2005)
90的命名规则 :1.长度不能超过 128个字符2.本地临时表名称不能超过 116个字符3.名称的第一个字符必须是英文、中文 ( 其它语言字母 ) 、下划线、@ 、 # 符号。4.除了第一个字符之外的字符,还可以包括数字、 $5.名称中间不能有空格或者其他字符6.名称不能是保留字
权限权限:创建数据库至少的具有以下权限:Create database Create any databaseAlter any database
数据库的拥有者:创建数据库的用户将成为该数据库的所有者。任何可以访问到SQLSERVER的链接的用户 (SQL Server登录帐号或者Windows用户 ) 都可成为数据库的所有者。数据库的上限:在同一个实例中,最多可以创建 32767个数据库,超过这个数量数据库创建会失败。
数据库文件和文件组:每个数据库必须包含两个文件 : 一个数据文件和一个日志文件数据文件包含的是数据库的数据和对象,如表、视图、索引等等日志文件包含的是用来恢复数据库所包含的一些信息 ;为了便于分配和管理,可以将数据文件集合起来,放到文件组中。事务日志:用于记录数据库操作的所有事物以及每个事物对数据库所做的修改,一旦数据库系统出现故障,事务日志是恢复数据的唯一源泉
文件组:每个数据库有一个主要文件组。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。• 主要的文件组 包含主要文件的文件组。所有系统表都被分配到主要文件组中。• 用户自定义的文件组用户首次创建数据库或以后修改数据库时明确创建的任何文件组。
默认文件组 :
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。PRIMARY 文件组是默认文件组,除非使用 ALTER DATABASE 语句进行了更改。但系统对象和表仍然分配给 PRIMARY 文件组,而不是新的默认文件组。
数据库的状态• ONLINE 在线• OFFLINE 离线• RESTORING 还原• RECOVERING 恢复• RECOVER PENDING 恢复待定• SUSPECT 可疑• EMERGENCY
Management Studio 创建数据库:选项页配置参数Create database 语句创建数据库
USE [master]GO
CREATE DATABASE [DB_test] ON PRIMARY ( NAME = N'test_Data1', FILENAME = N'D:\datafile\file1.mdf' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 5120KB /*5%*/ ), FILEGROUP [FileGroup1] ( NAME = N'test_Data2', FILENAME = N'E:\datefile2\file2.ndf' , MAXSIZE = UNLIMITED, FILEGROWTH = 5120KB ), ( NAME = N'test_Data3', FILENAME = N'E:\datefile2\file3.ndf' , MAXSIZE = UNLIMITED, FILEGROWTH = 5120KB ) LOG ON ( NAME = N'test_Log', FILENAME = N'D:\datafile\test_log.LDF' ,FILEGROWTH = 20480KB ) COLLATE Chinese_PRC_BIN--[ WITH ... ]GO
排序规则 COLLATE 如果 SQL Server 实例的所有用户都使用同一种语言,则应选择支持该语言的排序规则。例如,若所有用户都讲法语,则选择法语排序规则。如果 SQL Server 实例的用户使用多种语言,则应选择能对多语种需求提供最佳支持的排序规则。例如,如果用户一般都讲西欧语言,则选择 Latin1_General 排序规则。当支持使用多种语言的用户时,对所有字符数据都使用 Unicode 数据类型 nchar 、 nvarchar 和 ntext 最为重要。Unicode 旨在消除非 Unicode char 、 varchar 和 text 数据类型的代码页转换困难。 检索 Windows 排序规则和 SQL 排序规则的所有有效排序规则名称的列表:SELECT * FROM ::fn_helpcollations()
SQL 排序规则示例 字典顺序、区分大小写、区分重音、用于 1252 字符集。该排序规则对美国英语字符集(代码页 1252 - Windows Latin 1 ANSI,排序次序 ID 54)使用字典排序规则。排序时不考虑大、小写字符和重音符号。在 Transact-SQL 中,字符串 SQL_Latin1_General_CP1_CI_AI 用于指定该设置。 CI 指定不区分大小写, CS 指定区分大小写。AI 指定不区分重音, AS 指定区分重音。Omitted 指定不区分大小写, KS 指定区分假名类型。Omitted 指定不区分大小写,WS 指定区分大小写。BIN 指定使用二进制排序次序。
下面是 Windows 排序规则名称的一些示例: • Latin1_General_CI_AS • 排序规则使用 Latin1 General 字典排序规则,代码页为
1252。不区分大小写但区分重音。• Estonian_CS_AS • 排序规则使用爱沙尼亚字典排序规则,代码页为 1257。区分大小写并区分重音。• Latin1_General_BIN • 排序规则使用代码页 1252 和二进制排序规则。忽略
Latin1 General 字典排序规则。
分离数据库 :
• 使用工具操作• 使用系统存储过程: exec sp_detach_db 'dbname'
注意事项 : 需要将进程结束后 c
修改数据库配置
附加数据库 :
• 使用工具操作• 使用 T-SQL
exec sp_attach_db [dbname], 'd:\*.mdf','d:\*.ldf' 以上方式最多只能列出 16个文件,如超出只能使用以下方式create database [dbname] on (filename = '.......mdf'),(filename = '.......ldf')
可以删除日志文件后仅附加数据文件,系统会自动创建新的日志文件
分离和附加数据库
脱机仅仅让数据库处于离线状态。需要复制数据文件而又不想让整个 SQLSERVER服务停止时,可以先将 DB脱机。USE masterALTER DATABASE [dbname]SET OFFLINE
-- SET ONLINE
脱机和联机数据库
删除数据库SQL:
DROP DATABASE [dbname]--删除多个数据库DROP DATABASE [dbname],[dbname2]
数据库自动收缩ALTER DATABASE [dbname]SET AUTO_SHRINK ON
手动收缩DBCC SHRINKDATABASE ( [ 'dbname' | dbid | 0 ] [, target_percent] [, {notruncate | truncateonly } ])-- dbcc shrinkdatabase (dbname1,10)
收缩数据库手动收缩数据文件Tools: 任务 - 收缩 - 文件T-SQL:
DBCC SHRINKFILE (Filename,3)
4.0 表数据的操作• 表的分类• 列 (数据类型、自定义类型 )• 数据操作
o Inserto Delete 或者 Trancate Tableo Update
delete 与 truncate table 的不同点:
5.0 查询与视图
索引与数据完整性聚集索引 数据表本身就是 索引的一部分,意即 数据表本省就是聚集索引的叶子层,整个数据表的摆放都是按照你选定的键值排序的。数据表内的数据实际摆放方式只可能有一种顺序,所以一个数据表只能有一个聚集索引。 在指定聚集索引时,数据字段本身并不需要唯一,若指定非唯一的聚集索引, sqlserver内部会自行为重复的键值建立4bytes的唯一标识非聚集索引 完全独立于数据表之外的结构,其叶子层放的数据有两种可能书签 (bookmark)或聚集索引的键值
注意: 选择聚集索引的键值很大,则整个数据表的各种索引都将会变得没有效率,因为所有的非聚集索引的叶子层势必都会因为纳入聚集索引的键值而变大 SQLSERVER 在 insert 、 update 、 delete数据时会自动的维护索引,所以索引数量要恰到好处,一般数据表最多 8-10个索引