你的位置:首页 > 数据库

[数据库]SQL入门经典(五)之键和约束


这一篇博客主要讲键的创建,约束的创建。修改对象和删除对象。

主键:主键是每行的唯一标识符,必须包含唯一值(因此不能为NULL)。由于主键在关系中数据库的重要性,因此它是所有键和约束中最重要的。一个表最多可以有一个主键。很少不需要主键的表。主键声明具有唯一性。常用有identity自动增长值和GUID。主键是唯一标识值。如果客户操作一个没有主键的表。连续添加2次一样数据。你怎么删除。删除总是2条一条删除。我们接着上篇博客。

下面创建一个主键表:

USE panda GO  --转为panda数据库操作CREATE TABLE test002(  ID int identity(1,1) primary key,--创建主键  name nvarchar(20) not null,  age   int        default(0) check(age>=0) --创建了默认值和Check约束)

表结构查询,执行exec sp_helpconstraint test002,查询到3条。PK__test002__7C8480AE是这个表主键。

我们删除这条主键在重新创建主键:

 ALTER TABLE test002 drop CONSTRAINT PK__test002__7C8480AE--PK__test002__7C8480AE这个数据库默认生成的。我们删除她,用脚本创建GO--告诉数据库执行前面语句ALTER TABLE test002ADD CONSTRAINT PK_test002_IDPRIMARY KEY(ID) --创建主键GOexec sp_helpconstraint test002 --- 结果还是3条。主键名称已经改成了PK_test002_ID

先对来说比较简单。

外键:外键能确保数据完整性,也能表现表之间的关系,如果添加外键到一个表,就是在你定义外键表(引用表)和外键引用的表(被引用表)之间创建依赖关系。添加外键之后,插入引用表数据要么必须与被引用表引用列数据匹配某条记录。

试一试:创建一个带有外键表。我们在panda数据创建一个test003的表

CREATE TABLE test003(  ID int identity(1,1) primary key,  test002ID int   foreign key references test002(ID),--创建外键  OrderDate datetime default(getdate()),  name     nvarchar(20) not null )GO exec sp_helpconstraint test003 --查询到系统默认生成FK__test003__test002__023D5A04名称外键

外键约束可以在表中建立0-253个。主键约束只能一个,外键约束可以多个。每列只能引用外键值。和主键创建方式差不多。删除差不多。试一试使用脚本创建外键:我先删除上面那个表外键

ALTER TABLE test003drop CONSTRAINT FK__test003__test002__023D5A04.--删除外键GOALTER TABLE test003ADD CONSTRAINT FK_T003_T002_IDFOREIGN KEY (test002ID) REFERENCES test002(ID)--创建外键,引用test002的ID外键

go

exec sp_helpconstraint test003--外键信息已经更新到 FK_T003_T002_ID

是不是看起来很简单;外键可选级联操作。外键是双向,不仅限制子表值存在,也限制父表中。每次对父表删除时候先检查一次子表是否有数据(防止子表孤立数据).

CREATE TABLE test003(  ID int identity(1,1) primary key,  test002ID int   foreign key references test002(ID)  ON UPDATE NOT ACTION  ON CASCADE,  ,--创建外键  OrderDate datetime default(getdate()),  name     nvarchar(20) not null )---下面一一介绍。外键ON后面可以跟4个参数。SET NULL,SET DEFAULT,NOT ACTION ,CASCADE