1.创建表
Posted Hi你好!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.创建表相关的知识,希望对你有一定的参考价值。
创建表:
1.主键(primary key)
2.唯一键(unique)
3.检查约束(check)
4.默认值(default)
5.外键(foreign)
6.空值检查(NULL)
在 SQL Server 2008 中,每个数据库最多可包含 20 亿个表。一个表中最多可以包含 30,000 个列,其中最多有 1024 个非稀疏列和计算列。表的行数及总大小仅受可用存储空间的限制。每行最多包括 8,060 个字节。对于带 varchar、nvarchar、varbinary 或 sql_variant 列(导致已定义表的总宽超过 8,060 字节)的表,此限制将放宽。其中每列的长度仍必须在 8,000 字节的限制内,但是它们的总宽可能超过表的 8,060 字节的限制。有关详细信息,请参阅行溢出数据超过 8 KB。
每个表最多可以有 999 个非聚集索引和 1 个聚集索引。其中包括为支持表中所定义的 PRIMARY KEY 和 UNIQUE 约束而生成的索引。
重复怎么办?
年龄写成负数怎么办?
手机号码少写一位怎么办?
邮箱地址不合法怎么办?
一.主键:--确保数据唯一
用来唯一确定表中记录的标识符,其值不能为空,也不能重复。
一个表只能有一个主键,并且自动建立聚焦索引。
格式:constraint pk_sno primary key clustered(sno)
第一种:--不推荐使用第一种,因为主键名会随机生成,将来影响操作。
create table Customer
(
cno int primary key
cname char(10)
)
第二种:
create table Customer
(
cno int constraint pk01_cno primary key clustered(cno)
cname char(10)
)
第三种方法:
create table Customer
(
cno int
cname char(10)
constraint pk02_cno primary key clustered(cno)
)
添加字段:
alter table Customer
add cmobil char(11)
校验:
inset into
复合主键:
格式:constraint pk_sno primary key clustered(n1,n2)
比如借书表
管理主键:
1.查看主键信息:
select * from sys.objects where type=‘PK‘
2.为已存在的表添加主键:
Alter Table Customer constraint Pk_cno primery key clustered(cno)
3.删除主键:
Alter Table Customer Drop constraint PK_cno
唯一键:unique--确保数据唯一
1.用于指定一个字段或者多个字段组合值具有唯一性,以防止字段中有重复的值;
2.和primary key区别:
主键每个表只能有一个,而unique最多249个;
主键的值不能为空,而unique可以有一行为空;
主键默认情况下建立聚集索引,而unique默认建立非聚集索引;
格式:
constraint unique_name unique NONclustered(name)
如果有多个非聚焦索引,可以多次使用以上格式.
查看唯一键信息,格式如下:
select * from sys.objects where type=‘UQ‘
为已存在的表添加唯一键:
alter table Customer Add Constraint UNIQUE_Mobile UNIQUE NONClustered(CMobileNo)
删除唯一键:
alter table Customer Drop Constraint UNIQUE_Mobile
检查约束(Check):
检查约束是对相应字段输入值设置检查条件,以限制输入值满足某些条件.比如:性别只能填写男女,年龄必须大于0,手机号必须要11位,邮箱必须满足格式等.
格式:
Constraint Check_sex Check(sex in(‘男‘,‘女‘))
Constraint Check_age Check(cage>0)
Constraint Check_mobile Check(cmobile like ‘[1][358][0-9]‘)
Constraint Check_email Check(email like ‘%_[@]%_[.]%_‘)
查看Check约束信息:
select * from sys.objects where type=‘C‘
为已存在的表添加Check:
Alter Table Customer Add constraint Check_sex Check(sex in(‘男‘,‘女‘))
删除Check约束:
Alter Table Customer Drop constraint Check_sex
默认值:(default)
默认值是在插入操作中如果没有指定输入值的时候,系统自动指定的值.
1.一个字段只能指定一个默认值;
2.如果定义的默认值的长度超过了其对应字段允许的长度,系统将自动截取;
3.不能对数据类型为timestamp的列或具有IDENTITY属性的列创建default定义.
格式:
constraint DF_name default ‘marry‘ for Cname
如果写到字段后面,则不需要写for.
外键(foreign key):
1.如果在foreign key约束的列中输入非NULL值,则此值必须在引用列中存在;否则将返回违反外键约束的错误信息;
2.foreign key约束仅能引用位于同一服务器上的同一数据库中的表;跨数据库的引用完整性必须通过触发器实现;
3.foreign key约束可引用同一表中的其他列,此行称为自引用;
4.列级foreign key约束的References子句只能列出一个引用例;此列的数据类型必须与定义约束的列的数据类型相同;
5.foreign key约束只能引用所引用的表的Primary Key或Unique约束中的列或所引用的表上Unique Index中的列;
6.一个表中最多有32个外键,临时表不能有外键.
格式:
constraint FK_Cno Foreign Key(Cno) References Customer(Cno)
案例:
A.创建客户表(customer):
create table customer
(
cno int constraint pk_cno primary key clustered(cno),
cname char(10),
cage tinyint constraint check_cage check(cage>0),
csex char(2) ,
cmobile char(11),
cemail varchar(50)
)
B.创建商品表(product):
create table product
(
productID int constraint pk_pdID primary key clustered(productID),
productName varchar(50),
Manufacturer char(40),
price float
)
C.创建购物明细表(detail):
create table detail
(
cno int constraint fk_cno foreign key(Cno) references customer(cno),
productID int constraint fk_prodid foreign key(productID) references customer(productID),
purDate smallDateTime constraint df_date default getdate(),
constraint pk_detail primary key clustered(cno,productID)
)
插入数据校验:
insert into customer() values()
管理外键:
1.查询外键:
select * from sys.objects where type=‘FK‘
2.添加外键:
Alter Table Customer Add constraint fk_cno foreign key(cno) references customer(cno)
3.删除外键:
Alter Table Customer Drop constraint fk_cno
空值(NULL):检查某个字段是否为空。
注意:
A.在一个表调用聚合函数的时候,比如:avg,count,只要某个字段为空,调用函数的时间,此条记录会被忽略;
B.变量没有赋值,默认就是为空,空值和任何数据运算都是空值。例如:
declare @i int
select @i+100
结果显示为NULL。
格式:直接加 not null
以上是关于1.创建表的主要内容,如果未能解决你的问题,请参考以下文章