数据库原理与应用(Oracle) 笔记2 ——表

表的创建与删除

·create table

SQL> create table s
  2  (s# varchar2(10),
  3  sn varchar2(8),
  4  sd varchar2(20),
  5  sa number(3));

表已创建。

建立了一个表s,有四行

·drop table

SQL> drop table s;

表已删除。

删除方才创建的表s

·从已有表创建新表

SQL> create table e10
  2  as select * from emp where deptno=10;

表已创建。

表的约束

·not null 非空约束

根据存储数据的类型,有时候需要对表中数据进行非空约束。
例如查询学生学号时,若是空值会造成麻烦。

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 插入数据

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

·带select子句插入

适用于在表中插入已创建表中的数据,注意该表的列集数据类型和长度要与插入表中的数据类型和长度匹配。

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 删除行

delete from 表名 where 删除条件

注意,若缺省删除条件,将会删除全部行

SQL> delete from z1 where c1=7499;

已删除 1 行。

SQL> select * from z1;

        C1 C2
---------- --------------------
      7521 WARD
      7654 MARTIN
      7844 TURNER

·update 修改数据

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

你可能感兴趣的:(sql)