创建数据表
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;
表已更改。