一、SQL Server支持的数据类型
1、文本型
• CHAR 定长型 <=8000字节
• Varchar 变长型 <=8000字节
• Text 大文本 <=2G
• NCHAR 定长型 <=4000字节
• NVarchar 变长型 <=4000字节 SQL2005提供了NVarChar(MAX)<=2G
NText 大文本 <=2G
注意:
Ø “N”型文本类型是为了表示中文、日文、韩文等大字符集的文字而产生的
Ø 对应定长的字符,用CHAR比用VARCHAR的效率要高,如学生表中的“Sex”
Ø 在SQL Server 7.0后N型和非N型通用
2、日期型
• DateTime 1753.1.1-9999.12.31 8字节
SmallDateTime 1902.1.1-2079.12.31 4字节
注意:
Ø 系统时间格式:D-M-YY HH24:M:S
Ø 系统可识别日期格式:
² 字母日期 ‘April 15,1998’
² 数字日期 ‘4/15/1998’
² 未分隔日期 ‘19981221’
Ø 取得系统时间:Getdate()
3、二进制型
• Image <=2G
• Sql_Variant 变体型,可以接受任何数据类型
注意:
Ø 如果表中包含IMAGE类型字段,该表的记录将无法以一个页存放,为避免产生行链接,建议将大数据字段和常规数据字段分开存放。
Ø SQL_Variant的字段无法经常各种常规的函数操作。
4、扩展型
• Identity 4字节
• Customer Type 用户自定义数据类型
注意:
• 增加自定义数据类型
Exec Sp_AddType 类型名称,‘类型定义’,‘空标志’
Exec Sp_AddType Telephone,’Varchar(24)’,’Not Null’
5、完整性类型
包括:实体完整性(加强完整性规则的SQL Server工具:主键约束、唯一约束、标识列)
域完整性(加强完整性规则的SQL Server工具:默认值定义、外键约束、检查约束、
NOT NULL属性)
引用完整性(加强完整性规则的SQL Server工具:外键约束、检查约束)
用户定义完整性(加强完整性规则的SQL Server工具:存储过程、规则、触发器)
6、创建和更改主键
(1) create table table_name <column_definition> primary key
其中,<column_definition>是列名
(2) 如果,现有表中无主键,可以添加主键:
alter table table_name
add constraint <constraint_name>
primary key ( <column_name> )
其中<constraint_name>为约束名。
7、约束和约束对象
SQL Server2000提供了以下约束:check<检查约束>、 default<默认值> 、primary key<主键> 、
foreign key<外键> 、unique<唯一性>。
8、通配符
通配符 |
解释 |
示例 |
_ |
一个字符 |
Select username from tb_user where username like ‘T_’ |
% |
任意长度的字符串 |
Select username from tb_user where username like ‘%T%’ |
[] |
括号中所指定的范围中的任意一个 |
Select * from flight where address like ‘bt52[1-4]’ |
[^] |
不在括号中所指定的范围中的任意一个 |
Select * from flight where address like ‘bt52[^1-4]’ |
9、 逻辑运算符
AND、OR和NOT
二、SQL Server对象模型化过程
Ø 数据采集并属性化
Ø 约束的制定
n 域约束:Not Null,Check,Default,Unique
n 完整性约束:Primary Key
n 引用性约束:Foreign Key,Trigger
Ø 规则的制定
Ø 关系的创建
Ø 默认值的关联
Ø 索引的创建
n 常规索引
n 全文索引
Ø 数据的规划
三、表的创建
• 图形方式
n 企业管理器(Enterprise Manager)
• 代码方式
n 查询分析器(Query Analyzer)
四、创建表
create table 工资表
(
职工编号 varchar(10)
constraint pk_工资表 primary key 主键约束
constraint fk_工资表_职员表 foreign key references 职员表(编号) 外键约束
on delete cascade on update cascade, 级联更新,级联删除
工资 smallmoney
constraint ck_工资表 check(工资>0) 检查约束
constraint df_工资表_工资 default 1000 默认值
)
五、数据操作
1、数据插入Insert
语法:insert into <table_name> values ( <values>)
2、选择性的将一个表中的数据添加到另一个表中
语法:insert into <table_name1> select <column_list> from <table_name2>
例如:insert into VipUser select username from users where rank=’VIP’
3、更新数据Update
语法:update <table_name> set <column_name=value> [ where 条件 ]è条件可有可无
4、删除数据Delete
语法:delete from <table_name> [ where 条件] è条件可有可无
5、使用Truncate table 删除表中的所有数据
六、约束的管理
1、 主键约束
Primary Key
注意:
Ø 约束可以在建表时创建,也可修改表结构时创建
Ø 创建Primary Key约束时,系统讲自动为该约束字段创建索引
Ø Primary Key约束如果不命名,系统将自动给定约束名:“PK_表名_8位标志符”
Ø 定义语法:Constraint 约束名 Primary Key Cluster/NonCluster 字段集
Ø 系统默认为PK约束创建Cluster索引
•
2、外键约束
• Foreign Key
注意:
Ø 约束可以在建表时创建,也可修改表结构时创建
Ø 定义语法:
Constraint 约束名 Foreign Key
References 引用表(引用字段集)
On Delete Cascade/No Action
On Update Cascade/No Action
Ø 如果使用NO Action,系统不允许删除被引用的数据
七、规则的创建和管理
1、创建规则
• Create Rule 规则名 As 条件表达式
例:Create Rule Rule_Age As @T>=15 And @T<=30
2、绑定规则/取消绑定
• Exec Sp_BindRule ‘规则名’,‘字段’
例:Exec Sp_BindRule ‘Rule_Age’,’Stu_Age’
• Exec Sp_UnBindRule ‘字段’
例:Exec Sp_UnBindRule ’Stu_Age’
注意:
• 一个字段只可以和一个规则绑定,一个规则可以和多个字段绑定
八、默认值的创建和管理
1、创建默认值
• Create Default 默认名 As 常数表达式
例:Create Default Def_Stat As ‘中国’
2、绑定默认值/取消默认值
• Exec Sp_BindDefault ‘默认名’,‘字段’
例:Exec Sp_BindDefault ‘Def_Stat’,’Stu_Stat’
• Exec Sp_UnBindDefault ‘字段’
例:Exec Sp_UnBindDefault ’Stu_Stat’
注意:
• 一个字段只可以和一个默认绑定,一个默认可以和多个字段绑定
九、表结构的调整
1、字段定义的修改
Alter Table 表名 Alter Column 列名列定义
2、添加字段
Alter Table 表名 Add 列名 列定义
3、删除字段
Alter Table 表名 Drop Column 列名
注意:
• 添加字段的时不允许将字段属性设置为“Not Null”
•
4、添加约束
Alter Table 表名 Add Constraint 约束名 约束定义
5、删除约束
Alter Table 表名 Drop Constraint 约束名
注意:
Ø 在删除Primary Key,Unique Key约束的时候,系统将自动删除相应的Index
Ø 如果约束没有命名,要删除必须用修改字段定义的方式
6、删除表
Drop Table 表名
注意:以下两种情况无法删除表:
(1) 表被占用
(2)表有被引用关系(作为外键的主表)
第三部分习题样例
1、 创建具有关系的表并进行合理的数据规划
创建城市表,包含:
城市编码 5
城市名称 20
邮政编码: 6
use T607
create table City
(
CityCode varchar(5) constraint pk_city_citycode primary key,
CityName varchar(20),
Postalcode varchar(6)
)on G_Normal
2、创建学生表:
学生编码 固定13位
学生姓名 不为空,不重复
学生性别 F/M
学生年龄 15-25
学生生日
学生籍贯
学生国籍
学生照片
根据实际需要设计相应的关系和约束,同时,FK约束为同步更新方式
create table Student
(
StuCode char(13) constraint pk_student_stucode primary key,
StuName varchar(10) not null constraint uk_student_stuname unique,
StuSex char(2) check(StuSex in('F','M')),
StuAge smallint check(StuAge>=15 and StuAge<=25),
StuBirthday smalldatetime,
StuNativePlace varchar(5) constraint fk_student_city foreign key references City(CityCode)
on delete cascade on update cascade,
StuState varchar(20),
StuImage image
)
on G_Change
textimage_on G_Big
3、 将学生年龄的约束制定成规则并绑定
create rule rule_stu_age as @T>15 and @T<=25
exec sp_bindrule 'rule_stu_age','Student.StuAge'
4、 将学生编码的固定长度约束制定成规则并绑定
drop rule rule_stu_code
create rule rule_stu_code as len(@length)=13
exec sp_bindrule 'rule_stu_code','Student.StuCode'
5、 将国籍设置默认并绑定
create default def_stu_state as '中国'
exec sp_bindefault 'def_stu_state','Student.StuState'
insert into Student values('4534567891234','jack','m',24,'2005-12-14','0592','','0000')
6、 添加一个字段:地址 50 不允许为空
alter table Student add Address varchar(50)
alter table Student alter column Address varchar(50) not null
7、 删除刚才添加的字段:地址
alter table Student drop column Address
8、 修改学生编码中的主键索引为非聚集索引,将学生姓名所产生的索引设置成为聚集索引
alter table Student drop constraint pk_student_stucode--删除约束
alter table Student add constraint pk_student_stucode primary key nonclustered(StuCode)
alter table Student drop constraint uk_student_stuname
alter table Student add constraint uk_student_stuname unique clustered(StuName)