創建主鍵(三種方法)
****************
創建學生表:
第一種:
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_c005472;
8.刪除索引
查找要刪除的索引名稱
運行此語句:
select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;
然后運行
drop index sys_coo5472;
今天在對一個表,對其中一個屬性,新建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約束.
-
這里先新建一個表,其中ID就是要設為主鍵的column。
創建table的代碼如下:
CREATE TABLE test_tab
(
id NUMBER,
name VARCHAR2(30)
)
-
要設置主鍵的話這里需要用到alter table這個語法。
設置主鍵的代碼如下:
ALTER TABLE test_tab ADD CONSTRAINT pk_test_tab PRIMARY key(id);
-
這里解釋下:
alter table table_name-----------------------意思就是要改動某個表
add constraint constraint_name-------------意思就是給某個表加約束/限制
primary key(column_name)------------------說明是主鍵的約束,而且是某個column的。
-
執行之后就設置成功了,若不放心可以親自測試下。
執行如下代碼一次:
INSERT INTO test_tab(id,name) VALUES (1,'test');
看到已經insert成功!
-
在重復的執行一次:
INSERT INTO test_tab(id,name) VALUES (1,'test');
這個時候就有error了:
ORA-00001: unique constraint (SCOTT.PK_TEST_TAB) violated
表的主鍵就這樣設置成功。
create table語句中如何設置主鍵-CSDN論壇 http://bbs.csdn.net/topics/90208943
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 - 博客園 http://www.cnblogs.com/CodingArt/articles/1621921.html