创建主键(三种方法)
****************
创建学生表:
第一种:
create table student
(sno char(5) primary key,/*学号*/ /*可以直接指定主键*/
sname char(20) not null,/*姓名*/
ssex char(3) not null,/*性别*/
sage integer not null,/*年龄*/
sdept char(15);/*系别*/
第二种:
create table student
(sno char(5) not null,
constraint pk_student /*可以指定主键名称*/
primary key (sno),
sname char(20) not null ,/*非空,不可重复*/
ssex char(3) not null,
sage integer ,
sdept char(15));
第三种:
创建课程表:
create table course
(cno char(5),/*课程号*/
cname char(20) not null unique,/*课程名,非空,不可重复*/
cpno char(5),/*前置课程号(学此课之前必修课)*/
ccredit number);/*学分*/
通过修改表,设置主键.
alter table course
add constraint pk_course
primary key (cno);
*************
创建外键(3种方法)
第一种
*************
创建"学生-课程-成绩"表
create table sc
(sno char(5) constraint fk_student /*第一种,写在属性定义里面的*/ /*可以指定外键名称,*/
references student(sno),
cno char(5),
foreign key(cno) /*可省略外键名称*/
references course(cno),
grade number);
**********
第二种
**********
create table sc
(sno char(5),
constraint fk_student /*第二种,写在属性定义外面的*/
foreign key (sno)
references student(sno),
cno char(5),
foreign key(cno)
references course(cno),
grade number);
***********
第三种
***********
alter table sc
add constraint fk_student
foreign key(sno)
references student(sno);
****************************
建好表之后,新增或修改,删除约束
****************************
先用此语句查看某个表的所有约束:
select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper('&TABLE_Name');
0.增加not null约束
alter table student modify sname not null;
1.修改null约束
alter table student modify sname null;/*姓名可以为空*/
2.增加主键约束
alter table student
add constraint pk_student
primary key(id);
3.删除主键约束
先用此语句查看某个表的所有约束:
select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper('&TABLE_Name');
这里要删除的是约束"fk_student"
alter table drop constraint fk_student;
4.增加外键约束
alter table sc
add constraint fk_student
foreign key(sno)
references student(sno);
5.删除外键约束
需要知道要删除的外键名称,
先用此语句查看某个表的所有约束:
select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper('&TABLE_Name');
alter table drop constraint fk_student;
6.添加unique约束
alter table course modify cname unique;
添加unique的同时,会自动创建一个相同名称的索引.
7.取消unique
alter table course
drop constraint sys_c0072;
8.删除索引
查找要删除的索引名称
运行此语句:
select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;
然后运行
drop index sys_coo72;
今天在对一个表,对其中一个属性,新建unique约束,
但是提示:ora-02261:such unique or primary key already exists in the table
原因是该属性已经是primary key了。
如果该属性已经有unique约束,则不能赋予该属性primary key约束.
1.一个表只能有一个primary key,可以有多个unique约束
2.当创建primary key的时候,会同时建立一个索引,名字和primary key的名称相同.
3.当某属性为primary key,会默认新增not null约束,当删除primary key后,not null属性取消.
4.表的一个属性可以同时设定not null和primary key约束.
表的主键就这样设置成功。
create table tt (id int, code varchar(9) primary key(id,code) ) CREATE TABLE tablename ( id int not null PRIMARY KEY , name varchar(40) ) go or: CREATE TABLE tablename ( id1 int not null , id2 int not null , name varchar(40), CONSTRAINT pk_tb PRIMARY KEY CLUSTERED (id1,id2) ) go CREATE TABLE [dbo].[tt]( a [varchar](30) COLLATE Chinese_PRC_CI_AS NOT NULL, b [varchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL, c [varchar](30) COLLATE Chinese_PRC_CI_AS NOT NULL, d [money] NULL, e [money] NULL, f [money] NULL, CONSTRAINT [PK_tt] PRIMARY KEY NONCLUSTERED ( a ASC, b ASC, c ASC ) ON [PRIMARY] ) ON [PRIMARY] 以上是多表的 CREATE TABLE 表名( id int not null PRIMARY KEY , name varchar(40) ) go PRIMARY KEY 是设置主键的关键字
【转载自】PROS - 博客园