Oracle之约束

数据库约束分为两种:表级约束和列级约束
表级约束  应用于表,对表中的多个列起作用,
如primary key,foreign key,unique,check。列级约束  应用于表中的一列,只对该列起作用


,如not null


对于表级约束,写法一般有两种(创建表时),而列级约束一般只有一种
如:
表级check:
只作用于一个列:
CREATE TABLE Persons
(


Id_P number NULL CHECK (Id_P>0),


LastName varchar2(255) NULL,


FirstName varchar2(255),


Address varchar2(255)


)
作用于多个列:
CREATE TABLE Persons
(


Id_P number NULL,
Age  number NULL,


LastName varchar2(255) NULL,


FirstName varchar2(255),


Address varchar2(255),
constraint check_name check(Id_P>0 and Age > 0)


)


而列级not null,就只能紧随列定义后加上
CREATE TABLE Persons
(


Id_P number NOT NULL,
Age  number NOT NULL,


LastName varchar2(255) NOT NULL,


FirstName varchar2(255) NOT NULL,


Address varchar2(255)


)
有了基于以上的共识后,我们就可以针对每一个约束展开来说了:


1)primary key 主键
PRIMARY KEY约束是指主键约束,用于惟一标识一行记录。在一个表
中只能定义一个


PRIMARY KEY约束,该约束可以定义在单独的列上,也可
以定义在多个列上(表级约束),如


primary key(id)作用于单列,primary key(cert_type,cert_no,client_no)作用于列组。定义


了PRIMARY KEY约束的列或列组合
不能有重复值,也不能有NULL值。


添加主键:
(注:[] 括号内的东西表示可选的,这里如果选,就是命名约束,如果不选,数据库会帮我们命名


一个名字,下同)
在创建表时,为列添加PRIMARY KEY约束,形式如下:

CREATE TABLE table_name (

column_name data_type [ CONSTRAINT constraint_name ] 
PRIMARY KEY)


CREATE TABLE table_name (

column_name data_type ,
[ CONSTRAINT constraint_name ] PRIMARY KEY (column_name)





如果表之前已经创建好的情况:
ALTER TABLE table_name ADD [ CONSTRAINT constraint_name ] 
PRIMARY KEY


(column_name);


这里说明一下,对于是表级约束的,修改一般都是 alter ... add这种格式,
而对于列级约束,修改一般是alter ... modify,大家在往下看的时候,可以留个心眼看看是不是


这种情况。


删除primary key约束:
删除列上的PRIMARY KEY约束,需要使用ALTER TABLE … DROP语
句,不过形式上只能采


取指定约束名的方式,如下:
ALTER TABLE table_name DROP CONSTRAIN 


constraint_name;
如果在添加约束时使用CONSTRAINT子句为其指定了约束名,那么这里




就可以直接使用该名称。而如果没有使用CONSTRAINT子句,则约束名由
Oracle自动创建,此时就可


以通过连接数据字典user_cons_columns和
user_constraints来查看约束名称。


这里也注意下,表级约束的删除一般是 alter ... drop
而列级约束一般是alter ... modify 就可以胜任了。








foreign key:
FOREIGN KEY约束是指外键约束,用于引用本表或另一个表中的一列
或一组列。引用列与被引用列


可以在同一个表中,这种情况称为“自引用”。
被引用的列或列组应该具有主键约束或惟一约束。




引用列的取值只能为被引用列的值或NULL值。
可以为一个列或一组列定义FOREIGN KEY约束。
如果


引用列中存储了被引用列的某个值,则不能直接删除被引用列中的这个值,否则会与第二条相矛盾


。如果一定要删除,需要先删除引用列中的这个值,然后再删除被引用列中的这个值。(对于理解


外键,这段话挺重要的)


添加FOREIGN KEY约束
在创建表时,为列添加FOREIGN KEY约束,形式如下:CREATE TABLE table_name (
column_name1 data_type [ CONSTRAINT constraint_name ] 
REFERENCES table_name2 


(column_name2))



CREATE TABLE table_name (column_name data_type ,
[ CONSTRAINT constraint_name ] FOREIGN KEY (column_name1,column_name2) 
REFERENCES 


table_name2 (column_name3,column_name4))



其中,REFERENCES关键字用于定义column_name1列指向其他表
(或本表)中的column_name2列。
也可以为已创建的表中的列添加FOREIGN KEY约束,如下:

ALTER TABLE table_name1 ADD [ CONSTRAINT constraint_name ]
FOREIGN KEY 


(column_name1) REFERENCES table_name2 
(column_name2);
注意:这里是alter ... add 哦,表级约束就是这样的啦。










check约束,表级约束
CHECK约束是指检查性约束,使用CHECK约束时,将对输入的每一个
数据进行检查,只有符合条件的


记录才会保存到表中,从而保证数据的有
效性和完整性。

CHECK约束具有以下4个特点:


在CHECK约束的表达式中,必须引用表中的一个或者多个列;
并且表达式的运算结果是一个布尔值。


在一个列中,可以定义多个CHECK约束。


对于同一列,可以同时定义CHECK约束和NOT NULL约束。


CHECK约束既可以定义在列级别中,也可以定义在表级别中。
创建表时,为表定义CHECK约束,需要使用CHECK(约束条件)语句。
例如,创建表STUDENT3,为


STUDENTAGE列指定CHECK约束,如下:


SQL> 
create table student3(
  
studentid number(4) not null primary key,
  
studentcode varchar2(10) unique,studentname varchar2(20),
  
studentage number(3) constraint stu3_ck check(studentage > 0),tudentaddress 


varchar2(40)
);表已创建。


创建表时,列级别




mysql




CREATE TABLE Persons
(Id_P int NOT NULL,


LastName varchar(255) NOT NULL,


FirstName varchar(255),Address varchar(255),


City varchar(255),


CHECK (Id_P>0)
)SQL Server / Oracle 
CREATE TABLE Persons
(Id_P int NOT NULL CHECK (Id_P>0),


LastName varchar(255) NOT NULL,


FirstName varchar(255),


Address varchar(255),


City varchar(255)
)


创建表时,表级别,命名约束MySQL / SQL Server / OracleCREATE TABLE Persons
(


Id_P int NOT NULL,


LastName varchar(255) NOT NULL,


FirstName varchar(255),


Address varchar(255),


City varchar(255),


CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)




创建表后




MySQL / SQL Server / OracleALTER TABLE Persons
ADD CHECK (Id_P>0)


删除约束




SQL Server / Oracle 


ALTER TABLE Persons 
DROP CONSTRAINT chk_Person


ALTER TABLE Persons
 DROP CHECK  chk_Person












UNIQUE约束


UNIQUE约束是指惟一约束,用于要求列中不允许出现重复值。可以为
单独的列添加一个UNIQUE约束


,也可以为多个列添加一个UNIQUE约束
(属于表级约束)。如果为多个列添加一个UNIQUE约束,只


需要保证这多
个列的值不全部相同即可。


添加UNIQUE约束 
CREATE TABLE table_name (column_name data_type [ CONSTRAINT constraint_name ] 


UNIQUE)


CREATE TABLE table_name (

column_name data_type [ CONSTRAINT constraint_name ] UNIQUE (column_name)






也可以为已创建的表中的列添加UNIQUE约束,这时就需要使用ALTER
 TABLE … ADD语句,形式如下
ALTER TABLE table_name 
ADD [ CONSTRAINT constraint_name ] UNIQUE(column_name);
也是alter ... add 哦,表级的嘛,注意就好。




删除UNIQUE约束
删除列上的UNIQUE约束,可以使用ALTER TABLE … DROP语句,形
式如下:

ALTER TABLE table_name DROP UNIQUE (column_name);

如果约束有名称,也可以使用指定名称的方式删除该约束,语句形式为
如下:

ALTER TABLE table DROP CONSTRAINT constraint_name;








下面就说列级的咯
NOT NULL约束
NOT NULL约束是指非空约束,用于要求向表中添加记录时必须为被约
束的列提供数据,否则将出现


错误。NOT NULL约束只能在列级别上定
义,一个表中可以定义多个NOT NULL约束。
添加NOT NULL约束
在创建表时,为列添加NOT NULL约束,形式如下:



column_name data_type 
[ CONSTRAINT constraint_name ] NOT NULL



其中,CONSTRAINT constraint_name表示为约束指定名称。
也可以为已创建的表中的列添加NOT NULL约束,这时就需要使用
ALTER TABLE … MODIFY语句,形


式如下:



ALTER TABLE table_name MODIFY column_name 
[ CONSTRAINT constraint_name ] NOT NULL;


注意,此时是alter ... modify 咯,列级嘛。


删除NOT NULL约束
如果需要删除表中的列上的NOT NULL约束,依然是使用ALTER 
TABLE … MODIFY语句,形式如下:





ALTER TABLE table_name MODIFY column_name NULL;




default约束
创建表时
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
数据表已经存在
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
删除default约束
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT






到目前为止,就not null有点不同而已,大家记住就好咯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值