SQL SERVER学习笔记(三)数据表管理

一、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、     逻辑运算符

ANDORNOT

二、SQL Server对象模型化过程

Ø 数据采集并属性化

Ø 约束的制定

域约束:Not Null,Check,Default,Unique

完整性约束:Primary Key

引用性约束:Foreign Key,Trigger

Ø  规则的制定

Ø  关系的创建

Ø  默认值的关联

Ø  索引的创建

常规索引

全文索引

Ø  数据的规划

三、表的创建

•   图形方式

企业管理器(Enterprise Manager)

•   代码方式

查询分析器(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)

版权说明

  如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
  作      者:温景良
  文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

原文地址:https://www.cnblogs.com/wenjl520/p/1324395.html