Oracle 11g 学习笔记-9(表的操作)

创建数据表

1- createtable 代码手敲 且增加注释 问题:字段为系统默认日期怎么定义?

SQL> create table students(
  2  stuno number(10) not null, --学号
  3  stuname varchar2(8),  --姓名
  4  sex char(2),  --性别
  5  age int,  --年龄
  6  departno varchar2(2) not null,  --系别编号
  7  classno varchar2(4) not null, --班级编号
  8  regdate date default sysdate --建档日期
  9  );

表已创建。

2-表和用户是什么关系?
表创建过程:用户——>表,一个用户可以创建多个表,而一个表可以被多个用户操作。
从用户的角度来看,数据表的逻辑结构是一张二维的平面表,即表由纵向的标记列和横向的标记行两部分组 成。表通过行和列来组织数据。通常称表中的一行为一条记录,表中的一列为属性列。一条记录描述一个实体,一个属性列描述实体的一一个属性,如,雇员有雇员编号、雇员姓名、雇员岗位等属性;学生有学生编号、姓名、所在学校等属性。每个列都具有列名、列数据类型、列长度,可能还有约束条件、默认值等,这些内容在创建表时即被确定。

3-用户和表空间什么关系?
用户:创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间,创建用户后,可以在用户上,创建表、存储过程等等其他数据库对象
表空间:创建表空间会在物理磁盘上建立一个数据文件,作为数据库对象(用户、表、存储过程等等)的物理存储空间;

4-总结 表、用户、表空间、数据文件的关系…
一个数据库由多个表空间组成,一个表空间只能属于一个数据库。一个表空间可以包含一个或多个数据文件,一个数据文件只能属于一个表空间。一个表空间可以包含一个或多个用户,一个用户只能属于一个表空间。一个用户可以包含一个或多个表,一个表只能属于一个用户。

5-写出根据A表直接创建B表的SQL…

SQL> create table student_2
  2  as select * from students;

表已创建。

6- createtable_initial 代码手敲 且增加注释 同 createtable 代码区别是什么?

SQL>  create table students_3(
  2   stuno number(10) not null,
  3   stuname varchar2(8),
  4   sex char(2),
  5   age int,
  6   departno varchar2(2) not null,
  7   classno varchar2(4) not null,
  8   regdate date default sysdate
  9  )tablespace tbs_test_1
 10  storage(initial 256k);

表已创建。

7-写出根据表名查询表所属表空间的SQL…

SQL> select tablespace_name from dba_tables where table_name='STUDENTS';

TABLESPACE_NAME
------------------------------
USERS

8-createtable_nologging 代码手敲 且增加注释

SQL>  create table students_4(
  2   stuno number(10) not null,
  3   stuname varchar2(8),
  4   sex char(2),
  5   age int,
  6   departno varchar2(2) not null,
  7   classno varchar2(4) not null,
  8   regdate date default sysdate
  9  )tablespace tbs_test_1
 10  storage(initial 256k)
 11  pctfree 20
 12  pctused 40
 13  initrans 10
 14  nologging;--对表操作不会被记录到重做日志文件中

表已创建。

维护数据表

9-写出 已存在的表中 增加字段的SQL…

SQL> alter table students_4  add(province varchar2(10));

表已更改。
SQL> desc students_4;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 STUNO                                     NOT NULL NUMBER(10)
 STUNAME                                            VARCHAR2(8)
 SEX                                                CHAR(2)
 AGE                                                NUMBER(38)
 DEPARTNO                                  NOT NULL VARCHAR2(2)
 CLASSNO                                   NOT NULL VARCHAR2(4)
 REGDATE                                            DATE
 PROVINCE                                           VARCHAR2(10)

10-写出 已存在的表中 删除字段的SQL…

SQL> alter table students_4 drop column province;

表已更改。
SQL> desc students_4;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 STUNO                                     NOT NULL NUMBER(10)
 STUNAME                                            VARCHAR2(8)
 SEX                                                CHAR(2)
 AGE                                                NUMBER(38)
 DEPARTNO                                  NOT NULL VARCHAR2(2)
 CLASSNO                                   NOT NULL VARCHAR2(4)
 REGDATE                                            DATE
 

11-写出 已存在的表中 修改字段的SQL…

SQL> alter table students_4 modify departno varchar2(4);

表已更改。

12-写出 已存在的表 修改表名的SQL…

SQL> alter table students_4 rename to students_5;

表已更改。

13-写出 更改已存在表的表空间SQL..

SQL> alter table students  move tablespace tbs_test_1;

表已更改。

14-写出 已存在的表 删除表的SQL…以及注意事项是什么?

SQL> drop table students 
cascade constraints;--删除表及删除表主外键关系

15-写出 已存在的表 更改其为只读状态SQL…

SQL> alter table students_3 read only;

表已更改。
SQL> delete from  students_3;
delete from  students_3
             *1 行出现错误:
ORA-12081: 不允许对表 "SCOTT"."STUDENTS_3" 进行更新操作

16-写出 已存在的表 更改其为非只读状态SQL…

SQL> alter table students_3 read write;

表已更改。

数据完整性和约束性

17-写出 已存在的表 修改列为非空约束的SQL…

SQL> alter table students_3 modify stuname not null;

表已更改。
 STUNO                                     NOT NULL NUMBER(10)
 STUNAME                                   NOT NULL VARCHAR2(8)
 SEX                                                CHAR(2)
 AGE                                                NUMBER(38)
 DEPARTNO                                  NOT NULL VARCHAR2(2)
 CLASSNO                                   NOT NULL VARCHAR2(4)
 REGDATE                                            DATE

18-行级约束和表级约束的区别是什么?
主键约束用于唯一地标识表中的每一行记录。在一个表中,最多只能有一个主键约束,主键约束既可以由一个列组成,也可以由两个或两个以上的列组成(这种称为联合主键)。对于表中的每一行数据,主键约束列都是不同的,主键约束同时也具有非空约束的特性。
如果主键约束由一列组成时,该主键约束被称为行级约束。如果主键约束由两个或两个以上的列组成时,则该主键约束被称为表级约束。

19-UNIQUE 的作用是什么?
唯一性(UNIQUE)约束强调所在的列不允许有相同的值。但是,它的定义要比主键约束弱,即它所在的列允许空值(但主键约束列是不允许为空值的)。唯一性约束的主要作用是在保证除主键列外,其它列值的唯一性。
在一个表中,根据实际情况可能有多个列的数据都不允许存在相同值。例如,各种“会员表”的QQ、Email等列的值是不允许重复的(但用户可能不提供,这样就必须允许为空值),但是由于在一个表中最多只能由一个主键约束存在,那么如何解决这种多个列都不允许重复数据存在的问题呢?这就是唯一性约束的作用。若要设置某个列为UNIQUE约束,通常使用CONSTRAINT…UNIQUE标记该列。

20-写出 删除已存在的约束SQL…

--添加主键约束
SQL> alter table students_3 add constraint students_3_PK primary key(stuno);

表已更改。
--删除主键约束
SQL> alter table students_3 drop constraint  students_3_PK;

表已更改。

21-写出 禁用已存在的约束SQL…

--禁用已存在约束
SQL> alter table students_3 disable constraint students_3_PK;

表已更改。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值