您的当前位置:首页正文

lab4-table-creation-and-alteration-1323--

2022-05-01 来源:意榕旅游网


实验4:表的创建及修改

实验人: 学号 班级:计算机

实验目的:

1. 掌握建表的SQL语法。

2. 掌握修改表的SQL语法。

实验平台:

1. Oracle 11g/12c

实验过程记录及分析:

1. 以scott帐号登陆数据库,创建表test,包含三个字段:a-整数类型,b-最长10个字符的可变长度字符串,c-日期型,然后给此表添加一条记录,注意to_date()函数的用法。

SQL> create table test

2 (

1 / 28

3 a int,

4 b varchar2(10),

5 c date

6 )

7 /

表已创建。

SQL> insert into test values

2 (1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));

已创建 1 行。

SQL> select * from test;

A B C

---------- ---------- --------------

1 MIKE 23-10月-14

2. 删除上面的test表,重新创建test,依然包含上面三个字段,并且建表时字段a附加主键约束,b附加unique约束,c附加非空约束,用列级指定名称来实现。表建好后,验证每个约束的作用。

删除表并创建

SQL> drop table test

2 /

表已删除。

SQL> ed

已写入 file afiedt.buf

1 create table test

2 (

3 a int constraint pk_test primary key,

3 / 28

4 b varchar2(10) constraint uq_test unique,

5 c date constraint nn_test not null

6* )

SQL> /

表已创建。

验证主键约束唯一性

SQL> insert into test values

2 (1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));

已创建 1 行。

SQL> insert into test values

2 (1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));

insert into test values

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.PK_TEST)

验证主键非空约束

SQL> insert into test values

2 (null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));

(null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

*

第 2 行出现错误:

ORA-01400: 无法将 NULL 插入 (\"C##SCOTT\".\"TEST\".\"A\")

验证唯一约束

SQL> ed

5 / 28

已写入 file afiedt.buf

1 insert into test values

2* (2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

SQL> /

insert into test values

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.PK_TEST)

验证非空约束

SQL> insert into test values

2 (3,'Mike',to_char(null));

(3,'Mike',to_char(null))

*

第 2 行出现错误:

ORA-01400: 无法将 NULL 插入 (\"C##SCOTT\".\"TEST\".\"C\")

3. 不指定名称,用列级约束来实现第二题内容

SQL> create table test

2 (

3 a int primary key,

4 b varchar2(10) unique,

5 c date not null

6 )

7 /

表已创建。

7 / 28

验证主键约束唯一性

SQL> insert into test values

2 (1,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));

已创建 1 行。

SQL> insert into test values

2 (1,'ldf',to_char(to_date('2014-10-23','yyyy-mm-dd')));

insert into test values

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.SYS_C009891)

验证主键约束非空

SQL> insert into test values

2 (null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));

(null,'Mike',to_char(to_date('2014-10-23,'yyyy-mm-dd')))

*

第 2 行出现错误:

ORA-01400: 无法将 NULL 插入 (\"C##SCOTT\".\"TEST\".\"A\")

验证唯一约束

SQL> insert into test values

2 (2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));

insert into test values

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.SYS_C009892)

9 / 28

验证非空约束

SQL> insert into test values

2 (3,'Mike',to_char(null));

(3,'Mike',to_char(null))

*

第 2 行出现错误:

ORA-01400: 无法将 NULL 插入 (\"C##SCOTT\".\"TEST\".\"C\")

4. 用表级不指定名称来实现第二题要求。

SQL> create table test

2 (

3 a int,

4 b varchar2(10),

5 c date,

6 primary key(a),

7 unique(b)

8 )

9 /

表已创建。

验证主键约束唯一性

SQL> insert into test values

2 (1,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));

已创建 1 行。

SQL> ed

已写入 file afiedt.buf

11 / 28

1 insert into test values

2* (1,'ldf',to_char(to_date('2014-10-23','yyyy-mm-dd')))

SQL> /

insert into test values

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.SYS_C009893)

验证主键约束非空性

SQL> ed

已写入 file afiedt.buf

1 insert into test values

2* (null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

SQL> /

(null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

*

第 2 行出现错误:

ORA-01400: 无法将 NULL 插入 (\"C##SCOTT\".\"TEST\".\"A\")

验证唯一约束

SQL> ed

已写入 file afiedt.buf

1 insert into test values

2* (2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

SQL> /

insert into test values

13 / 28

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.SYS_C009894)

5. 用表级指定名称来实现第二题要求。

SQL> ed

已写入 file afiedt.buf

1 create table test

2 (

3 a int,

4 b varchar2(10),

5 c date,

6 constraint pk_test primary key(a),

7 constraint uq_test unique(b)

8* )

SQL> /

表已创建。

验证主键约束唯一性

SQL> insert into test values

2 (1,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));

已创建 1 行。

SQL> insert into test values

2 (1,'ldf',to_char(to_date('2014-10-23','yyyy-mm-dd')));

insert into test values

*

15 / 28

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.PK_TEST)

验证主键约束非空

SQL> ed

已写入 file afiedt.buf

1 insert into test values

2* (null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

SQL> /

(null,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

*

第 2 行出现错误:

ORA-01400: 无法将 NULL 插入 (\"C##SCOTT\".\"TEST\".\"A\")

验证唯一约束

SQL> ed

已写入 file afiedt.buf

1 insert into test values

2* (2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))

SQL> /

insert into test values

*

第 1 行出现错误:

ORA-00001: 违反唯一约束条件 (C##SCOTT.UQ_TEST)

6. 创建两个表,名称分别为A、B,分别满足下列要求:A中包含字段a、b,B中包含字段c、d,都是int类型,其中a为表A的主键,c为表B的主键,d为指向表A中字段a的外键。

17 / 28

SQL> create table A

2 (

3 a int constraint pk_A primary key,

4 b int

5 )

6 /

表已创建。

SQL> create table B

2 (

3 c int constraint pk_B primary key,

4 d int constraint fk_B references A(a)

5 )

6 /

表已创建。

7. 向第六题中的表A、B添加记录,验证外键约束所起的作用,即验证引用完整性的内容。

SQL> insert into A values(1,2);

已创建 1 行。

SQL> insert into B values(1,1);

已创建 1 行。

SQL> insert into B values(2,2);

insert into B values(2,2)

*

第 1 行出现错误:

19 / 28

ORA-02291: 违反完整约束条件 (C##SCOTT.FK_B) - 未找到父项关键字

8. 修改上面test表的名称为test1,然后验证结果。

SQL> select * from test;

A B C

---------- ---------- --------------

1 Mike 14-11月-12

SQL> alter table test rename to test1;

表已更改。

SQL> select * from test1;

A B C

---------- ---------- --------------

1 Mike 14-11月-12

9. 删除test1表中的b字段然后验证结果。

SQL> alter table test1 drop column b;

表已更改。

SQL> select * from test1;

A C

---------- --------------

1 14-11月-12

10. 把test1表中的c字段名称修改为d,然后验证结果。

SQL> alter table test1 rename column c to d;

表已更改。

SQL> select * from test1;

A D

21 / 28

---------- --------------

1 14-11月-12

11.删除test1表中的主键约束,然后验证结果。

删除主键约束:

SQL> alter table test1 drop constraint pk_test;

表已更改。

验证主键唯一性无效:

SQL> insert into test1 values

2 (1,to_char(to_date('14/10/23','yy/mm/dd')))

3 /

已创建 1 行。

验证主键非空性无效:

SQL> insert into test1 values

2 (null,to_char(to_date('14/10/23','yy/mm/dd')))

3 /

已创建 1 行。

SQL> select * from test1;

A D

---------- --------------

1 14-11月-12

1 14-11月-12

14-11月-12

12以system用户登录数据库,利用dba_tables数据字典表查询scott用户有哪些表。

SQL> select table_name

23 / 28

2 from dba_tables

3 where owner='SCOTT'

4 /

TABLE_NAME

------------------------------

DEPT

EMP

BONUS

SALGRADE

YAMA

A

B

TEST1

已选择8行。

13.以system用户登录数据库,利用dba_constraints与dba_cons_columns数据字典表查询第六题中的约束名称及其所在的列。

SQL> select table_name,constraint_name,column_name

2 from dba_cons_columns

3 where table_name='A'

4 /

TABLE_NAME CONSTRAINT_NAME

------------------------------ ------------------------------

COLUMN_NAME

--------------------------------------------------------------------------------

25 / 28

A PK_A

A

SQL> ed

已写入 file afiedt.buf

1 select table_name,constraint_name,column_name

2 from dba_cons_columns

3* where table_name='B'

SQL> /

TABLE_NAME CONSTRAINT_NAME

------------------------------ ------------------------------

COLUMN_NAME

--------------------------------------------------------------

B FK_B

D

B PK_B

C

14.如果不使用desc命令,利用dba_columns数据字典表查询scott的emp表的结构(即emp表的所有列及其类型)。

SQL> select column_name,data_type from dba_tab_columns

2 where owner='SCOTT'

3 and table_name='EMP'

4 /

COLUMN_NAME DATA_TYPE

------------------------------ ------------------------------------

27 / 28

EMPNO NUMBER

ENAME VARCHAR2

JOB VARCHAR2

MGR NUMBER

HIREDATE DATE

SAL NUMBER

COMM NUMBER

DEPTNO NUMBER

已选择8行。

15.用一个命令查询emp表上所有的约束名称,约束类型及其所在列名称,若是外键请给出其指向的表及列,若是检查约束,请给出检查条件。

[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]

因篇幅问题不能全部显示,请点此查看更多更全内容