数据库唯一约束中的默认约束和默认约束值的区别

数据库表的约束
在设计时,为了确保数据库表中数据的质量,需要考虑数据的完整性(数据的完整性是指数据的正确性和一致性)。举个例子:当你要为学生建立一个基本信息表StudentInfo时,这个表中学生的名字可以相同但是学号必须不一样,而他的年龄也得限制在一定范围内,像这样类似的“限制”有很多,如果违反了这些限制就制造了与现实不符的失真数据即破坏了数据的完整性。因为数据库不能自行判断哪些数据失真,所以需要认为添加一些约束来保证数据的完整性。
数据库中对表的约束有五种:
1.主键约束(Primary Key constraint):主键列数据唯一,并且不允许为空。
语法:Constraint 主键约束名 Primary Key [ Clustered | Nonclustered ] ( 列名1,[ 列名2,……,列名n ] )
主键是表中的一列或一组列,它们的值可以唯一地标识表中的每一行。
2.唯一约束(Unique constraint):该列数据唯一,允许为空,但只能出现一个空值(不重复性)。
语法:Constraint 约束名 Unique [ Clustered | Nonclustered ] ( 列名1,[ 列名2,…… 列名n] )
唯一性约束保证了除主键外的其他一个或一组列的数据具有唯一性,以防止在列中输入重复的值。(一个表只可以有一个主键约束,如果其它列也不希望有重复就可以使用唯一性约束。)
3.检查约束(Check constraint):范围限制、格式限制
语法:Constraint 约束名 Check [ Not For Replication ] ( 逻辑表达式 )
检查约束使指定表中一列或一组列可以接受的数据值或格式。
4.默认约束(Default constraint):
语法:Constraint 约束名 Default 约束表达式 [ For 列名 ]
为指定列定义一个默认值。在输入数据时,如果没有输入该列的值,则将该列的值设置为默认值。
5.外键约束(Foreign Key constraint):表间约束,确保数据的参照完整性
语法:Constraint 约束名 Foreign Key ( 列名1,[ 列名2,……列名n ] )
References 关联表 ( 关联列名1,[ 关联列名2,……关联列名n ] )
将当前表中的某一列或一组列关联到另一个表的主键列,可创建两个表之间的连接。当前表中的列就成为外键。外键涉及到两个表,一个主表,一个从表 ,主表中的外键是从表中的主键
下面以“学生信息”表为例,添加约束
Create table StudentInfo
StudentNo int not null,
StudentID int,
StudentName nchar ,
Sex varchar(2) ,
Score float Default(0),
'为学生的成绩设定默认值0,在没有数据输入时,自动分配为0.
DepartmentNo varchar ,
Constraint PK_Student Primary Key (StudentNo),
'用“学号”作主键,只要有学号就可以唯一确定一位学生
Constraint IX_Student Unique(StudentID),
'为“身份证”添加唯一性约束,当输入的身份证号有重复时会自动检查出错误
Constraint CK_Student Check (Sex In ('男','女')),
'检查学生的性别是否为男或女
Constraint FK_Student Foreign Key(DepartmentNo)
'“学生信息”表与“院系”表建立外键约束,外键为学生信息表的&所属院系&
References Department(RecordNo)On Delete Cascade
'主键列为“院系”表的“记录编号”
约束的创建主要有两种,以添加主键为例:
(1)创建表的时候创建约束,即在CreateTable中定义约束
Create StudentInfo(StudentNo har Primary Key,……)
Create StudentInfo(StudentNo vchar,……Constraint PK_Student Primary Key(StudentNo)……)
(2)是向已经创建 好的表中添加约束,即在Alter Table中创建约束
Alter Table StudentInfo add Constraint PK_Student Primary Key (StudentNo)
删除约束:对于存在外键约束的表,如果进行删除非空的外键,可能会出现错误
Alter Table StudentInfo Drop Constraint PK_Student
约束是SQL Server提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。对于数据库来说,约束也可分为列约束(Column Constraint)和表约束(Table Constraint),列约束作为列定义的一部分只作用于此列本身,表约束作为表定义的一部分可以作用于多个列。约束只是数据库对表管理的一种,这些在以前学过,但是不太会用,所以对约束先做一个小结。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'约束与数据库对象规则、默认值的探究
约束与数据库对象规则、默认值的探究
约束、规则、默认值这三者在数据表中规定了数据进行操作时的限制条件。他们三者有关系也有区别,用了两天的时间研究了他们三者,总结如下。
首先让我们从关系角度来分析:
●浅谈约束、规则、默认值
&&& 1、约束,约束顾名思义是限制条件的意思,其实它的作用也是如此,它是对所要进行增删改查操作的数据进行一次检查,检查这些数据是否符合我们所要约束的条件。举个例子:我们都经历过高考,考试规定考生不许带与考试无关的物品这就是一种约束。报名考试的考生可能因为某些意外没有进入考场考试,但大部分考生还是进行了考试。那么在考场内就产生了两种情况空位和非空位,这就是我们约束条件的两种情况。我们继续分析,在考生进入考场的情况中,考生在答卷之前是必须要在试卷和答题卡上填写自己的信息的,这些信息都是必须要填的因为它们唯一确定了一个考生,这里考生必须填写考生信息也就是我们所说的主键约束(主关键字约束)。接下来我们用两个表来说明下外键约束:
&&&&那么如果我们在字段后面用Not Null规定了呢?也就是说在我们的考生信息表中的性别字段,该列是不允许为空的于是就用Not Null标识,但是如果我们不填的话呢,我们的系统就会用Default默认值约束来帮助我们天上一个值。接下来我们来看Check约束,该约束是要用条件表达式来限定所要填的数据的,如下:
[sql] Create&table&工资&(&&&&&&&&&&&&&name&&char(10)&primary&key,&&&&&&&&&&&&&department&&char(20)&Not&Null,&&&&&&&&&&&&&salary&int&not&null&check(salary&1000&and&salary&4000)&&&&)&&
&&& 创建了一个表该表中有三个字段,name、department、salary,并在salary字段设置了约束条件。该表如下图:
在表中填数据时后两个不符合条件是不正确的。
&&&&在约束中还分为两种:字段级约束和表级约束。字段级约束是只约束其中的一列,表级约束是约束多列,它们两个的区别并不大,我们在理解时可以将表级理解为字段级,即:被约束的多列可以看做捆绑成一列,被捆绑后的字段中的两个记录是不能重复的,如:
&&&&2、规则,规则顾名思义是规矩制度的意思,在进行表操作时它的作用和check约束条件是类似的,但是一个表中只有一个规则,可有多个check约束,如:
[sql] Create&table&薪水(&&&&&&&&&&&name&&char(10)&primary&key,&&&&&&&&&&&position&&char(20)&Not&Null,&&&&&&&&&&&salary&int&not&null&&&&&&&&)&&&&Create&rule&ru_salary&&&&As&@salary&1000&and&@salary&4000&&&&Go&&&&Exec&sp_bindrule&‘ru_salary’,&&’薪水.salary’&&&&&&Go&&
&&&&&表说明如下:
&&&&3、默认值,用法同规则,它的作用类似于Default约束,是说在表中插入数据时,如果没有指定值,默认值自动指定数据值。
接下来我们在语法上分析三者,看图:
&&&&&&&1、约束,创建方法大致有三种:
&&&&&&&&&&&&&&&
[sql] &&&&——方法一:在创建表时用字句的方式创建约束&&&&&&&&CREATE&TABLE&表名(&&&&&&&&&&&&&&&&列名数据类型,&&&&&&&&&&&&&&&&……&&&&&&&&&&&&&&&&span&style="color:#009900;"&&CONSTRAINT&约束名&PRIMARY&KEY&(列名),&&&&&&&&&&&&&&&&&&&&&&&——主键约束&&&&&&&&&&&&&&&&CONSTRAINT&约束名&UNIQUE&(列名),&&&&&&&&&&&&&&&&&&&&&&&&&&&&——唯一约束&&&&&&&&&&&&&&&&CONSTRAINT&约束名&FOREIGN&KEY&(列名)&REFERENCES&表名&(列名),&&——外键约束&&&&&&&&&&&&&&&&CONSTRAINT&约束名&CHECK&(检查条件)&&&&&&&&&&&&&&&&&&&&&&&&&&&——Check约束&&&&&/span&&);&&&&&&&&&&&&——方法二:在创建表时直接定义约束&&&&&&&&CREATE&TABLE&表名(&&&&&&span&style="color:#009900;"&&&&&&&&&&&&列名数据类型&NOT&NULL,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&——非空约束&&&&&&&&&&&&&&&&列名数据类型&NOT&NULL&PRIMARY&KEY,&&&&&&&&&&&&&&&&&&&&&&&&&&&&——主键约束&&&&&&&&&&&&&&&&列名数据类型&NOT&NULL&UNIQUE,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&——唯一约束&&&&&&&&&&&&&&&&列名数据类型&[NOT&NULL]&REFERENCES&表名(列名),&&&&&&&&&&&&&&&&——外键约束&&&&&&&&&&&&&&&&列名数据类型&[NOT&NULL]&CHECK&(检查条件)&&&&&&&&&&&&&&&&&&&&&&&&&——Check约束&/span&&&&&&&&&)&&&&&&&&&&&——方法三:在创建表后,通过更改表来定义&&&&&span&style="color:#009900;"&&&&ALTER&TABLE&表名&ALTER&COLUMN&列名&SET&NOT&NULL;&&&&&&&&ALTER&TABLE&表名&ADD&PRIMARY&KEY&(列名1,列名2…);&&&&&&&&ALTER&TABLE&表名&ADD&UNIQUE&(列名1,列名2,……);&&&&&&&&ALTER&TABLE&表名&ADD&FOREIGN&KEY(列名)&REFERENCES&表名2&(列名2);&&&&&&&&ALTER&TABLE&表名&ADD&CHECK&(检查条件);&&&/span&&&
&&&&& 删除约束的语法为:ALTER TABLE 表名 DROP CONSTRAINT 约束名
&&&&2、规则。规则的应用操作,首先要创建但只创建是不能应用的要用sp_bindrule将规则绑定到字段或自定义的数据类型上才能起作用。
&&&&&&&&&&&&&
[sql] &&&——创建&&&&&&span&style="color:#009900;"&&&&Create&rule&规则名&as&条件表达式&&&/span&&&&&&&——绑定&&&&&&&&span&style="color:#009900;"&&Exec&sp_bindrule&‘规则名’&&,&‘表名.字段名’&|&‘数据类型’&&&&&/span&&&&&——解除绑定&&&&&&&span&style="color:#009900;"&&&sp_unbindrule&&‘表名.字段名’&|&‘数据类型’&&&/span&&&&&&&——删除规则&&&&&&&&&span&style="color:#009900;"&DROP&RULE&{rule_name}&[,...n]&&&/span&&&
&&&&&&3、默认值的语法和规则是类似的,只需将规则中的rule改成关键字default即可。&&&&&&&&&
&&&&& 三者间的关系很清楚了吧。
&&&&&&&&&&&&&&&&上面两个导图看不清怎么办,不用着急来这儿下载吧:&&&&& 提取码:0lUKbp0z
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 提取码:Dc6THqqH
发表评论:
TA的最新馆藏1.创建唯一约束
当表中已创建主键,但又要保证其他数据列的值唯一时,可以使用唯一约束,并且唯一约束允许NULL值(只有一个)
(1)展开指定的数据库;
(2)右击要创建唯一约束的表,在弹出的快捷菜单中选择&设计&命令;
(3)右击该表的某一列,在弹出的快捷菜单中选择&索引/键&命令,如图1;
(4)在该对话框中选择&列&选项,并单击后面的&...&按钮,选择要设置唯一约束的列;
(5)在&是唯一的&下拉列表中选择&是&选项,就可以将选择的列设置为i唯一的约束;
(6)在&(名称)&文本框中输入该约束的名称,设置完成后单击&关闭&按钮即可。
& & & & & & &
2.检查约束
约束条件不依赖于其他列,可以根据自己的逻辑表达式设定数值范围
(1)右键要创建约束的表,在弹出的快捷菜单中选择&设计&命令;
(2)右击该表中的某一列,在弹出的快捷菜单中选择&CHECK约束&命令。在弹出的对话框中设置约束的表达式,如输入&成绩&0 and 成绩&100&;
(3)设置约束的名称,设置后的效果如图4
& & & & & & & & & & & &&
3.默认约束
默认约束使用户能够定义一个值,每当用户没有在某一列输入值时,则将所定义的值提供给这一个列。如果用户没有对此列的特定要求,可以使用默认约束来为此列输入默认值。
(1)右击要创建约束的表,在弹出的快捷菜单中选择&设计&命令;
(2)选择该表中的某一列,在下面的&列属性&中选择&默认值或绑定&选项,在其后面的文本框中输入要设置约束的值,如输入&男&,表示默认性别为男。
4.外键约束
外键(FK)是用于建立两个数据表之间连接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接,这个列就成为第二个表的外键。
(1)右击要创建约束的表,在弹出的快捷菜单中选择&设计&命令;
(2)右击该表中的某一列,在弹出的快捷菜单中选择&关系&命令,弹出&外键关系&对话框,单击&添加&按钮,添加要选中的关系;
(3)在&外键关系&对话框中,单击&表和列规范&文本框中的&...&按钮,选择要创建外键约束的主键表和外键表;
(4)在&表和列&对话框中,设置关系的名称,然后选择外键要参照的主键表及使用的字段。最后单击&确定&按钮,返回&外键关系&对话框中。
阅读(...) 评论()约束主要有一下几种:
NOT NULL : 用于控制字段的内容一定不能为空(NULL)。
UNIQUE : 控件字段内容不能重复,一个表允许有多个 Unique 约束。
PRIMARY KEY:
也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
FOREIGN KEY:
FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
CHECK: 用于控制字段的值范围。
DEFAULT: 用于设置新记录的默认值。
1、not null : 用于控制字段的内容一定不能为空(NULL)。
    用法 :Create table MyTable
               (
                   id varchar(32) not null,
                   name varchar (32)
               )
2、Unique :控件字段内容不能重复,一个表允许有多个 Unique 约束。
      在Sql Server、Orcale、MS Access 支持的添加 Unique 语法:
             Create table MyTable
                (
                    id varchar(32) not null unique,
                    name varchar (32)
                )
      在Sql Server、 My Sql 支持的添加 Unique 语法:可同时添加几个字段为约束 如: unique (id,name)
             Create table MyTable
                (
                    id varchar(32) not null,
                    name varchar (32),
                    unique (id,.....)
                 )
      在Sql Server、Orcale、MS Access、My Sql 都支持的添加 Unique 语法:
              Create table MyTable
                  (
                      id varchar(32) not null,
                      name varchar (32),
                     Constraint uniqueName unique(UniqueColumn,.....)
                   )
   在Sql Server、Oracle、MS Access 删除 Unique 约束语法:drop constraint UniqueN
   在My Sql 删除 Unique 约束语法:drop index UniqueN
ALTER TABLE EPlatform
ADD CONSTRAINT Unique_EPlatform
unique ([UserId],[Platform]);
3、Primary Key :也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
      在Sql Server、Orcale、MS Access 支持的添加Primary Key语法:
              Create table myTB1
             (
                 id nvarchar(32) not null primary key,
                 name nvarchar(32)
              )
      在Sql Server、My Sql 支持的添加Primary Key 语法:
             Create table myTB1
             (
                 id nvarchar(32) not null,
                 name nvarchar(32),
primary key (id)
             )
       在Sql Server、Orcale、MS Access、My Sql 支持的添加Primary Key 语法:
             Create table myTB1
             (
                  id nvarchar(32) not null,
                 name nvarchar(32),
constraint PrimaryName primary key (id)
              )
在Sql Server、Orcale、MS Access、My Sql 表已存在的情况下,添加表的Primary Key约束语法:
              Alter table myTB1
ADD Primary Key (id,......) --这样的写法,系统会自定义约束名称
              Alter table myTB1
Add Constaint PrimaryName primary key (id) --这样的写法,自己可以自定义约束名称
在Sql Server、Orcale、MS Access 删除表已存在的 Primary Key 约束的语法:
              Alter table myTB1
Drop Constraint PrimaryName
在My Sql 删除表已存在的 Primary Key 约束的语法:
              Alter table myTB1
Drop Primary Key
Unique 与 Primary 的相同之处:UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
Unique 与 Primary 的不同之处:每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束,Unique允许有NULL值,而 Primary key 不允许有NULL值。
注:在同一个数据库中,就算在不同的表中,约束名称是不允许相同的。
4、Foreign Key :FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
   在Sql Server、My Sql 支持的添加Foreign Key语法:
              Create table myTB1
              (
                   id nvarchar(32) not null primary key,
                   name nvarchar(32),
foreign key(id) references myTB(id)
              )
   在Sql Server、Orcale、MS Access 支持的添加Foreign Key语法:
              Create table myTB1
              (
                   id nvarchar(32) not null foreign key references myTB(id),
                   name nvarchar(32)
              )
   在Sql Server、Orcale、MS Access、My Sql 都支持的添加Foreign Key语法:
              Create table myTB1
              (
                   id nvarchar(32) not null primary key,
                   name nvarchar(32),
                    Constraint foreignName foreign key(id) references myTB(id)
              )
在Sql Server、Orcale、MS Access、My Sql 的表已存在情况下,向表添加外键约束的语法:
              Alter table myTB1
Add foreign key(id) references myTB(id) --这样写系统会自定义约束名称
               Alter table myTB1
Add Constraint foreignName foreign key(id) references myTB(id) --这样写自己可以自定义约束名称
在Sql Server、Orcale、MS Access 中删除外键约束的语法:
              Alter table myTB1
Drop Constraint foreignN
在My Sql 中删除外键约束的语法:
              Alter table myTB1
Drop foreign key foreignN
5、Check :用于控制字段的值范围。
      在Sql Server、My Sql 支持的添加check 语法:
              Create table myCheck
              (
                   id nvarchar(32) not null,
                   age int not null,
check (age&15 and age &30)
              )
       在Sql Server、Orcale、MS Access 支持的添加 check 语法:
              Create table myCheck
              (
                   id nvarchar(32) not null,
age int not null check (age&15 and age&30)
              )
      在Sql Server、Orcale、MS Access、My Sql 都支持的添加 check 语法:
               Create table myCheck
              (
                   id nvarchar(32) not null,
                   age int not null,
constraint checkName check (age&15 and age&30)
              )
在Sql Server、Orcale、MS Access、My Sql 的表已存在情况下,向表添加check约束的语法:
              Alter table myCheck
              add check (id='celly'); --这样定义是系统自定义 check约束名称。
              Alter table myCheck
               add constraint checkName check(id='celly'); --这样定义是自己自定义 check约束名称。
在 Sql Server、Orcale、MS Access 删除表已存在的 check 约束的语法:
              Alter table myCheck
drop constraint checkName
6、Default :用于设置新记录的默认值。
      在Sql Server、Orcale、MS Access、My Sql 添加default约束的语法:
              Create table myDefault
              (
                  id int,
name nvarchar(32) default 'celly'
              )
      在My Sql 的已存在表中添加 字段默认值:
               Alter table myDefault
              Alter [id] set default 0
      在 Sql Server、Orcale、MS Access 的已存在表中添加 字段默认值:
              Alter table myDefault
              Alter column [id] set default 0
      在 My Sql 中删除字段默认值语法:
              Alter table myDefault
              Alter ColumnName drop default
阅读(...) 评论()}

我要回帖

更多关于 数据库默认约束 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信