SQL> create table s
2 (s# varchar2(10),
3 sn varchar2(8),
4 sd varchar2(20),
5 sa number(3));
表已创建。
建立了一个表s,有四行
SQL> drop table s;
表已删除。
删除方才创建的表s
SQL> create table e10
2 as select * from emp where deptno=10;
表已创建。
根据存储数据的类型,有时候需要对表中数据进行非空约束。
例如查询学生学号时,若是空值会造成麻烦。
SQL> create table s
2 (s# varchar2(10) not null,
3 sn varchar2(8),
4 sd varchar2(20),
5 sa number(3));
表已创建。
unique()
在关系模型中,候选键又称候选码(candidate key),是能唯一标识关系中元组的一个属性或属性集。其有:
1)唯一性
2)最小性
例如“学生关系”中的学号能唯一标识每一个学生;
“选课关系”中,只有属性的组合“学号+课程号”才能唯一地标识每一条选课记录。
选取s#(学号)作为候选码
SQL> create table s
2 (s# varchar2(10) not null,
3 sn varchar2(8),
4 sd varchar2(20),
5 sa number(3),
6 unique(s#));
表已创建。
primary key()
在关系模型中,主键又称主码。从多个候选键中选择一个作为查询、插入或删除元组的操作变量,被选用的候选码称为主键。
每个关系必定有且只有一个主键。
选取s#(学号),c#作为主键
SQL> create table s
2 (s# varchar2(10) not null,
3 sn varchar2(8),
4 sd varchar2(20),
5 sa number(3),
6 primary key(s#));
表已创建。
SQL> create table c
2 (c# varchar2(10),
3 cn varchar2(20),
4 pc# varchar2(10),
5 primary key(c#)
6 );
表已创建。
foreign key(a) references b(a)
该表中元素a要参照b表中主码a,若b表中不存在主码a或者a非主码,则出错。
在关系模型中,如果关系 R 2 R_{2} R2的一个或一组属性X不是 R 2 R_{2} R2的主码,而是另一个关系 R 1 R_{1} R1的主码,则该属性或属性组X成为关系 R 2 R_{2} R2的外键或外码,并称 R 2 R_{2} R2为参照关系, R 1 R_{1} R1为被参照关系。
被参照关系的主码和参照关系的主码必须定义在同一个域上。
表sc中的s#参照表s主码s#
SQL> create table sc(s# varchar2(10),
2 c# varchar2(10),
3 g number(3),
4 foreign key (s#) references s(s#));
表已创建。
check()
SQL> create table sc
2 (s# varchar2(10),
3 c# varchar2(10),
4 g number(3) check (g between 0 and 100),
5 foreign key(s#)references s(s#));
表已创建。
constraint name 约束语句
可以随时对约束进行开启和关闭
alter table sc enable constraint name
alter table sc disable constraint name
定义了三个约束并分别命名
SQL> create table sc
2 (s# varchar2(10),
3 c# varchar2(10),
4 g number(3),
5 constraint sc_fk foreign key(s#)references s(s#),
6 constraint sc_fk1 foreign key(c#)references c(c#),
7 constraint sc_ch check (g between 0 and 100)
8 );
表已创建。
SQL> alter table sc disable constraint sc_fk;
表已更改。
SQL> alter table sc enable constraint sc_fk;
表已更改。
Insert into 表名(<列值集>)
列值集必须按列顺序一一对应
Insert into 表名 (<列集>) values(<列值集>)
列值集必须与前面的列集顺序对应
SQL> insert into emp(empno,ename,hiredate) values (1110,'Jin','20-11月-10');
已创建 1 行。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
1110 Jin 20-11月-10
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 02-4月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择 13 行。
SQL> desc s;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
S# NOT NULL VARCHAR2(10)
SN VARCHAR2(8)
SD VARCHAR2(20)
SA NUMBER(3)
SQL> insert into s values('1234567890','Huang','Math',19);
已创建 1 行。
SQL> select * from s;
S# SN SD SA
-------------------- ---------------- ---------------------------------------- ----------
1234567890 Huang Math 19
适用于在表中插入已创建表中的数据,注意该表的列集数据类型和长度要与插入表中的数据类型和长度匹配。
SQL> create table z1
2 (c1 number(4),c2 varchar2(10));
表已创建。
SQL> insert into z1 select empno,ename from emp where job='SALESMAN';
已创建 4 行。
SQL> select * from z1;
C1 C2
---------- --------------------
7499 ALLEN
7521 WARD
7654 MARTIN
7844 TURNER
delete from 表名 where 删除条件
注意,若缺省删除条件,将会删除全部行
SQL> delete from z1 where c1=7499;
已删除 1 行。
SQL> select * from z1;
C1 C2
---------- --------------------
7521 WARD
7654 MARTIN
7844 TURNER
update 表名 set 新数据 where 被更新数据满足的条件
若被更新数据缺省,所有行的数据将被更改。
SQL> update z1 set c1=8000 where c2='WARD';
已更新 1 行。
SQL> select * from z1;
C1 C2
---------- --------------------
8000 WARD
7654 MARTIN
7844 TURNER