日期:2014-05-16 浏览次数:20511 次
1、使用子查询创建表 (1)指定要创建表的字段 create table myemp(编号,姓名,年薪) as select empno, ename, sal*12 from emp; (2)当查询字句中有表达式时(sal * 12)必须指定别名(annsal) create table myemp2 as select empno ,ename, sal*12 annsal from emp; 2、修改表结构 (1)修改表结构-添加字段 alter table test1 add ( grade number(3), phone varchar2(20) default '无' ); (2)修改表结构 -修改字段 alter table test1 modify ( grand number(2), phone varchar2(20) default '010-12345678' ) 注释:修改操作会受到当前表中已有数据的影响,当需修改的字段中只包含空值时,类型、大小都可以修改,否则有可能会修改失败. 修改的缺省值设置,只对此后新插入的记录有效 (3)修改表结构 - 删除字段 alter table test1 drop ( grand,phone ) 注释:如果要删除的字段有某些约束事,可能会删除失败. 3、清空表中的数据 trancate table test1; 注释:此语句一经执行是清除所有记录,无法按照条件删除,而且一经执行无法回滚。 4、重命名表 rename old_name to new_name; 注释:表重命名后,表中的记录不会受影响. 5、非空约束 create table student ( sid number(3) not null, sname varchar2(20), birth date constraint student_birth_nn not null ); 注释:birth 字段的非空约束与sid的效果是一样的,只不过sid没有指定约束名,而student_birth_nn 是我们为 birth字段指定的约束名. 非空约束只能在字段级定义 6、查看定义在某一张表上的所有的约束条件 select * from user_constraint where low(table_name) = 'student'; 注释:如果区分大小写,可以先把表名转化为小写后在进行查询. 7、唯一性约束(unique) (1)字段级约束 create table student ( sid number(3) unique, sname varchar(20) ) (2)表级约束 create table student ( sid number(3) , sname varchar(20), constraint student_sid_un unique(sid) --联合字段唯一约束 --constraint student_sid_un unique(sid,sname) ) 注释:唯一约束用于确保所在的字段或字段组合不出现重复值、唯一约束字段允许出现空值、oracle会自动为唯一约束创建对应的唯一性索引、唯一约束可以在表级定义、也可以在字段级定义. 8、主键约束(primary key) (1)字段级约束 create table student ( sid number(3) primary key, sname varchar(20) ) (2)表级约束 create table student ( sid number(3) , sname varchar(20), constraint student_sid_pk primary key(sid), --联合主键约束 --constraint student_sid_pk primary key(sid,sname) ) 注释:主键用于标示表中唯一的一条记录.主键约束相当于:唯一性约束与非空约束的组合. Oralce会自动为主键字段创建对应的唯一性索引.一个表中只允许有一个主键,可以是单个字段或者多个字段的组合。主键约束可以在字段级定义也可以在表级定义。 关于联合主键: (1)由多个字段组成的主键称为联合主键 (2)联合主键中的每个字段值都不得为空 (3)联合主键组合的值不能出现重复 (4)联合主键只能定义为表级约束 9、外键约束 关键要素: (1)外键用于确保两个相关字段之间的参照关系,以实现参照完整性约束 (2)外键约束通常构建于来自两个不同表之间的字段。 (3)字表外键列的值必须在主表参照列值得范围内,或者为空。 (4)外键参照的必须是表的主键或唯一键 (5)主表外键值被字表参照时,相关字表记录不允许被删除。 10、检查约束(check) (1)定义每一行都必须满足的条件 (2)以条件表达式的形式给出数据需要符合的条件 (3)条件表达式中不允许出现以下内容: currval,nextval,level,rownum等伪列 sysdate,uid,user,userenv等函数. 对其他字段值的引用 (4)只能在字段级定义 举例: create table test1( name varchar2(20), age number check(age>=0 and age <=120) ); check的检查非空约束与非空约束not null类似 例如name属性可以表示为: --name varchar2(20) check(name is not null) 11、查看约束: (1)表级:select * from user_constraints; (2)字段级:select * from user_cons_columns; 12、建表后添加约束:(表级约束) 基本语法: alter table table_name add[constraint constraint_name] constraint_type(column); 举例: create table student( sid number(2), name varchar2(20) ); alter table student add constraint sutdent_pk_constraint primary key(sid); 特例:非空约束必须使用modify子句添加 alter table student modify(name not null); 此处的modify相当于修改字段,我们可以添加更多的约束. alter table student modify (name char(15) defalut 'Tom' not null); 13、删除约束 基本语法:alter table table_name drop constraint constraint_name; 删除约束举例: create table student( sid number(10), name varchar2(20), constraint student_sid_pk primary key(sid) ); alter table student drop constraint student_sid_pk; 删除主键约束的另一种方式: alter table student drop primary key; 因为主键约束一张表中只允许有一个,所以可以不用指定名称,直接删除。 14、删除级联约束 说明:如果在删除约束时,还存在与该约束相关联的其他约束,则删除会失败,此时可以使用cascade关键字将其他关联约束一并删除。 --员工信息表 create table empinfo( sid number(10) constraints empinfo_constraint_pk primary key, ename varchar2(20) -- ); --员工薪水表 create table salary( id number(10) references empinfo(sid) -- ); alter table empinfo drop constraints empinfo_constraint_pk cascade; 在删除表中字段时,如果该字段处于多字段联合约束条件(联合主键,联合唯一键,存在参照当前字段的外键)中,则删除会失败,此时可以使用cascade constraints字句将与字段相关联的约束一并删除。 举例: create table record( student_id number(3), subject_id varchar2(30), record number(3), constraint record_stuId_subId_pk primary key(student_id,subject_id) ); alter table record drop (student_id) cascade constraints; 15、约束的启用