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、p_w_picpath (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或者p_w_picpath (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