- 附加说明:列级约束与表级约束定义上的区别?
- 列级约束语法格式:column [CONSTRAINT constraint_name] constraint_type,说明:列级约束必须跟着列的定义的后面。
-
表级约束:column, ... [CONSTRAINT constraint_name] constraint_type (column, ...),说明:表级约束不与列一起,而是单独定义的。
- 创建表时添加非空(not null)约束:(自定义约束名称便于后期维护)
SQL> conn scott/02000059
已连接。
SQL> create table student(sid number(8,0), name varchar2(20) not null, sex char(2) constraint
2 nn_sex not null,birthday date, address date, constraint sid_pk primary key(sid));
表已创建。
-
修改表时添加非空约束:添加非空(not null)约束要使用MODIFY语句:ALTER TABLE table_name MODIFY(column datatype NOT NULL);
- 删除非空(not null)约束的语法格式:ALTER TABLE table_name MODIFY column_name datatpe NULL;
- 命令行中的示例:
SQL> alter table student modify (name varchar2(20) NULL);
表已更改。
SQL>
- 附加说明:删除约束的方式有两种:将约束激活或者无效化、将约束彻底删除
- 将约束无效化或者激活:ALTER TABLE table_name DISABLE | ENABLE CONSTRAINT constraint_name;;将约束彻底删除:ALTER TABLE table_name DROP CONSTRAINT constraint_name;。
- 删除主键约束的格式:ALTER TABLE table_name DROP PRIMARY KEY;;
- 命令行中的示例:(使主键约束无效化和删除主键约束)
SQL> alter table student enable constraint sid_pk;
表已更改。
SQL> alter table student drop constraint sid_pk;
表已更改。
SQL>
d、Oracle的表操作:唯一约束
- 唯一性(unique)约束:唯一性约束用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值。
-
唯一性约束的注意事项:使用唯一性约束的列允许为空值;一个表中可以允许有多个唯一性约束;可以把唯一性约束定义在多个列上。(当唯一性约束定义在一个列时,可以是表级约束,也可以是列级约束;当唯一性约束定义在多个列时,必须为表级约束。)
- 创建表时添加唯一约束的示例:
C:\Users\Administrator>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 28 21:40:44 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn scott/02000059
已连接。
SQL> create table student(sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), email varchar2(50) unique, cardid varchar2(18), constraint uk_cardid unique(cardid));
表已创建。
SQL>
- 修改表时添加唯一性约束:
SQL> create table student(sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), email varchar2(50) unique, cardid varc
har2(18));
表已创建。
SQL> alter table student add constraint uk_cardid unique(cardid);
表已更改。
- 删除唯一性约束:有禁用约束或者是彻底删除两种方式
SQL> alter table student disable constraint uk_cardid;
表已更改。
SQL> alter table student drop constraint uk_cardid;
表已更改。
SQL>
e、Oracle的表操作:检查约束
-
检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。
- 创建表时添加检查约束的示例:(可以使用表级约束,也可以使用列级约束)
SQL> conn scott/02000059
已连接。
SQL> create table student(sid number(8,0), name varchar2(20), sex char(2) check(sex='男' or sex = '女'), birthday date, address varchar2(50));
表已创建。
SQL>
SQL> conn scott/02000059
已连接。
SQL> create table student(sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), constraint ck_sex check(sex='男' or se
x='女'));
表已创建。
SQL>
- 修改表时添加检查(check)约束:
SQL> alter table student add constraint ck_sex check(sex='男' or sex='女');
表已更改。
- 删除检查约束:有禁用约束或者是彻底删除两种方式
SQL> alter table student disable constraint ck_sex;
表已更改。
SQL> alter table student drop constraint ck_sex;
表已更改。
f、Oracle的表操作:外键约束
- 外键(FOREIGN KEY)是用于建立和加强两个表数据之间的链接的一列或者多列。外键约束是唯一涉及两个表关系的约束。
-
需要注意的是主表先建立,从表后建立。(删除时先删除从表,后删除主表)
- 设置外键约束的语法格式:
- 列级约束:CRAETE TABLE 从表 (column_name datatype REFERENCES 主表(column_name) [ON DELETE CASCADE],....);(ON DELETE CASCADE表示的是级联删除)
- 表级约束:CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES 主表(column_name) [ON DELETE CASCADE];
- 创建表时设置列级外键约束示例:
SQL> create table department(depid varchar2(10) primary key, depname varchar2(30));
表已创建。
SQL> create table student(sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), depid varchar2(10) references department(depid));
表已创建。
- 创建表时设置表级外键约束示例:
C:\Users\Administrator>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 11月 29 16:53:36 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn scott/02000059
已连接。
SQL> create table department(depid varchar2(10) primary key, depname varchar2(30));
表已创建。
SQL> create table student(sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50), depid varchar2(10), constraint fk_depid foreign key(depid) references department(depid) on delete cascade);
表已创建。
SQL>
-
外键约束的注意事项:设置外键约束时主表的字段必须是主键列(或者唯一列);主从表中相应字段必须是同一数据类型;从表中外键字段的值必须来自主表中的相应字段的值,或者为NULL值。
- 修改表时添加外键约束:alter table student add constraint fk_depid foreign key(depid) references department(depid) on delete cascade;
SQL> alter table student add constraint fk_depid foreign key(depid) references department(depid) on delete cascade;
表已更改。
SQL>
- 删除外键约束:有禁用约束和彻底删除两种方式
SQL> alter table student disable constraint fk_dep
表已更改。
SQL> alter table student drop constraint fk_depid;
表已更改。
SQL>
a、修改表
- 添加列语法结构:ALTER TABLE 表名 ADD 新增列名 数据类型;
- 举例:ALTER TABLE student ADD tel VARCHAR2(11);
SQL> ALTER TABLE student ADD tel VARCHAR2(11);
表已更改。
SQL>
- 修改列语法结构:ALTER TABLE 表名 MODIFY 列名 新数据类型;
- 举例:ALTER TABLE student MODIFY tel NUMBER(11,0);
SQL> ALTER TABLE student MODIFY tel NUMBER(11,0);
表已更改。
SQL>
- 删除列的语法结构:ALTER TABLE 表名 DROP COLUMN 列名;
- 举例:ALTER TABLE student DROP COLUMN tel;
SQL> ALTER TABLE student DROP COLUMN tel;
表已更改。
SQL>
- 修改列名的语法结构:ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名
- 举例:ALTER TABLE student RENAME COLUMN sex TO gender;
SQL> ALTER TABLE student RENAME COLUMN sex TO gender;
表已更改。
SQL>
- 修改表名的语法结构:RENAME 表名 TO 新表名;
- 举例:RENAME student TO studnetifo;
SQL> RENAME student TO studnetifo;
表已重命名。
SQL>
b、删除表
- 删除表有两种方式:TRUNCATE TABLE 表名:用于删除表中的全部数据,并不是把表删除掉,这种删除方式要比DELETE方式删除数据的速度要快,也叫做截断表;DROP TABLE 表名:删除表结构。
- 示例:
SQL> truncate table emp_bak;
表被截断。
SQL> drop table emp_bak;
表已删除。
SQL>
- 添加信息的语法结构:INSERT INTO 表名[(列1,列2, ... ,)] VALUES(值1,值2, ...,值N);
- 查询信息的语法格式:SELECT * | column[,...] from 表名;
- 修改信息的语法格式:UPDATE table SET column = value [, column = value, ...] [WHERE condition];
- 删除信息的语法格式:DELETE FROM table [WHERE condition];
- 什么是事务:事务可以看做是由对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求。
- 事务的组成:一条或者多条DML、一条DLL或者一条DCL语句。(DML语句需要使用COMMIT提交事务或者使用ROLLBACK回滚事务,而DDL和DCL是自动提交事务的。)
-
为什么要使用事务:使用事务的原因是为了保证数据的安全有效。(如当执行事务操作(DML语句)时,Oracle会在被作用表上加表锁,以防止其他用户改变表结构;同时会在被作用行上加行锁,以防止其他事务在相应行上执行DML操作。)
- 事务的控制命令:
- 提交事务(COMMIT):通过COMMIT语句可以提交事务,当执行了COMMIT语句后,会确认事务的变化、结束事务、删除保存点、释放锁。当使用COMMIT语句结束事务之后,其他会话可以查看到事务变化后的新数据。
- 回滚事务(ROLLBACK):ROLLBACK只能对未提交的数据撤销,已经commit的数据时无法撤销的,因为commit之后已经持久化到数据库中。
- 保存点(SAVEPOINT):是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。当执行ROLLBACK时,通过指定保存点可以回退到指定的点。(设置保存点:SAVEPOINT a;, 回滚部分事务:ROLLBACK TO a;,回滚全部事务:ROLLBACK;)
- 什么是数据字典:是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。数据库数据字典是一组表和视图结构。数据字典中的表时不能直接被访问的,但是可以访问数据字典中的视图。
-
数据字典的作用:通过数据字典,使我们了解数据库内部的信息。当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。
- Oracle中常用的数据字典:Oracle中常用的数据字典分为三类,以三种前缀开头:user*、all、dba_。
- user_*:该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)
- all*:该视图存储了当前用户能够访问的对象的信息。(与user相比,all_并不需要拥有该对象,只需要具有访问该对象的权限即可。)
- dba_*:该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限。)
a、Oracle中常用的数据字典