SQL Server基础(二)

1、数据类型
  (1)数值:
       整型:bigint、int、smallint、tinyint
       小数:decimal、numeric
       近似数字数据:float、real
       货币数据:money、smallmoney
  (2)日期和时间:datetime、smalldatatime
  (3)字符数据:char、varchar、text
       char固定长度,varchar可变长度
  (4)Unicode字符数据:nchar、nvarchar、ntext
  (5)二进制数据:binary、varbinary、image
  (6)其他:timestamp等
2、自定义数据类型:当多个表的列中要存储同样类型的数据时可以自定义数据类型
   创建:sp_addtype {type_name},[base_type] [,[‘NULL’|‘NOT NULL’]] [,’拥有者’]
   删除:Sp_droptype type_name
3、选择数据类型的指导原则
 (1)若列值的长度相差很大,使用变长数据类型
 (2)谨慎使用tinyint数据类型
 (3)对于小数数据来说,多使用decimal数据类型
 (4)若行的存储量超过8000字节,使用text或者image
 (5)若不大于8000字节,可使用char、varchar或者binary数据类型
 (6)货币数据,使用money数据类型
 (7)不要使用类型为float或者real的列作为主键
4、架构:也叫模式,是一个位于数据库和数据表中间的对象。
   格式如下:[ServerName.[DatabaseName.[ScheamaName.]]ObjectName
   创建架构的步骤:
     (1)用户登录,在本服务器上的“安全性”-“登录名”添加自定义登录名,可以设置服务器角色,或数据库角色(可以设置数据库默认角色,此时系统会自动给该数据添加一个与登录名同名的用户)
     (2)给对应数据库添加架构
     (3)给数据库添加用户,并设置默认架构为上面命名架构
   在创建用户时,服务器角色默认为public,用户映射:选中数据库,设置为默认架构,设置成db.owner角色,在用该用户登录
5、表:是包含数据的数据库对象
   表的主要组件:列:每一列代表由表建模的对象的某个属性。行:每一行代表由表建模的对象的一个单独的实例。
   表的设计:列名,数据的类型和长度,是否允许空值,约束,默认设置和规则,索引类型,主键和外键
6、临时表:分为本地临时表和全局临时表。临时表不能分区。
   本地临时表仅在当前会话中可见,而全局临时表在所有会话中都可见。
   本地临时表的名称前面有一个数字符号(#tablename),而全局临时表有两个数字符号(##tablename)
   创建全局临时表
   CREATE TABLE ##GlobalTable
   (
    cola INT
    )
   创建局部临时表
   CREATE TABLE #LocationTable
   (
    cola INT
   )
   在tempdb库中查看临时表信息
   删除:可以使用 DROP TABLE 显式删除临时表,也可以在退出其作用域时由系统自动删除
7、表的创建:
     create table laiyuan
     (
 lyID int identity not null primary key,
 lyname varchar(20) not null
     )
   更改表名:exec sp_rename 旧表名,新表名
   删除表:drop table sales
8、创建计算列的表:
   CREATE TABLE Sells
   (
   price money,
   number int,
   amount as price*number
   )
9、创建函数列的表:
   CREATE TABLE TestTable
   (
    indate as getdate(),
    id int,
    usename AS USER_NAME()
   )
10、用户定义类型列创建计算列
   CREATE TABLE TestTable
   (
   id int not null,
   col1 nametype
    )
11、表变量:命令一块执行时存在 单行查询不存在  用于临时组装数据
    declare @t table
   (
     col1 int,
     col2 varchar(10)
    )

   insert into @t values(1,'很好')
   select * from @t
12、修改表employee:
 (1)添加列:字符列email为char
    ALTER TABLE employee
    ADD  email char(29) null
 (2)修改列类型:email为varchar
    ALTER TABLE employee
    ALTER COLUMN email varchar(20) null
 (3)修改字段名:
    Exec sp_rename ‘架构名.表名.旧字段名 ‘,新字段名,’column’
 (4)删除列:
    DROP COLUMN email
13、约束:是一种限制,在列或表的层次设置约束,确保数据符合某种数据完整性规则。
   域约束:处理一个或多个列。如何确保一个特定列或一组特定列满足的标准。
   实体约束:都是关于每个行的。这种约束不关心一个整体的列,只对特定的行感兴趣,Primary key约束和Unique约束看到这种约束,不可以出现相同的两行,每行是一个实体,行与行之间不能相同。
   参数完整性约束:某列的值必须与其他列的值匹配时创建——列可以在同一人表中,或者更通常的是在不同的表中。
14、约束:
 (1)键约束:主键,外键,唯一键
    a、主键约束:主键是每行的唯一标识,字段包含唯一的值(不能为NULL).因为主键在关系数据库中的重要性,主键是所有键和约束中最重要的。
       在创建表时加主键:
        create table customers
        (
         CustomerNo int identity not null primary key,
         CustomerName varchar(30)  not null
        )
       在现有表中添加主键:
         alter table customers
         add constraint PK_CustomerNo
         Primary key (CustomerNo)
    b、外键约束:主键约束既能保证数据的完整性,也能表现表之间的关系。
        使用外键创建一个表:
           create table orders
          (
            OrderID int identity not null primary key,
            CustomerNo int not null  Foreign key references CUSTOMERS(customerno)
          )
         在已存在的表中添加外键:
           alter table orders
           add constraint FK_EmployeeCreatesOrder
           Foreign key (customerno) references customers(customerno)
         级联动作:默认的级联动作是,子表中如果有父表的ID引用,则父表的记录不能删除。现在改成如果父表中删除该记录,子表与该 记录关联的记录全部删除。
            create table OrderDetails
             (
              orderid int not null,
              partno varchar(10) not null
              constraint PKOrderDetails
              primary key (orderid,partno),
              constraint FKOrderContrainsDetails
              Foreign key (OrderID)
              References orders(orderid)
              on update no action
              on delete cascade
             )
     c、唯一约束:唯一约束要求列上有一个唯一的值。
         创建表时创建唯一约束:
            create table shippers
            (
             shipperid int identity not null
             primary key ,
             phoneno varchar(14) not null unique
            )
          在已存在的表中创建唯一约束:
             alter table shippers
             add constraint AK_ShippersPhoneNo
             Unique(phoneno)
 (2)Check约束:Check约束比较好的方面是不限制于一个特定的列。
       添加约束:
         alter table customers
         Add constraint cn_customerdateinsystem
         Check
         (DateInSystem<=GetDate())
       删除约束:
         alter table testtable
         drop constraint cn_customerdateinsystem

你可能感兴趣的:(数据库,架构,数据类型,约束,表)