lab4tablecreationandalteration1323.docx
《lab4tablecreationandalteration1323.docx》由会员分享,可在线阅读,更多相关《lab4tablecreationandalteration1323.docx(14页珍藏版)》请在冰点文库上搜索。
lab4tablecreationandalteration1323
实验4:
表的创建及修改
实验人:
学号班级:
计算机
实验目的:
1.掌握建表的SQL语法。
2.掌握修改表的SQL语法。
实验平台:
1.Oracle11g/12c
实验过程记录及分析:
1.以scott帐号登陆数据库,创建表test,包含三个字段:
a-整数类型,b-最长10个字符的可变长度字符串,c-日期型,然后给此表添加一条记录,注意to_date()函数的用法。
SQL>createtabletest
2(
3aint,
4bvarchar2(10),
5cdate
6)
7/
表已创建。
SQL>insertintotestvalues
2(1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));
已创建1行。
SQL>select*fromtest;
ABC
----------------------------------
1MIKE23-10月-14
2.删除上面的test表,重新创建test,依然包含上面三个字段,并且建表时字段a附加主键约束,b附加unique约束,c附加非空约束,用列级指定名称来实现。
表建好后,验证每个约束的作用。
删除表并创建
SQL>droptabletest
2/
表已删除。
SQL>ed
已写入fileafiedt.buf
1createtabletest
2(
3aintconstraintpk_testprimarykey,
4bvarchar2(10)constraintuq_testunique,
5cdateconstraintnn_testnotnull
6*)
SQL>/
表已创建。
验证主键约束唯一性
SQL>insertintotestvalues
2(1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));
已创建1行。
SQL>insertintotestvalues
2(1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.PK_TEST)
验证主键非空约束
SQL>insertintotestvalues
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
已写入fileafiedt.buf
1insertintotestvalues
2*(2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))
SQL>/
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.PK_TEST)
验证非空约束
SQL>insertintotestvalues
2(3,'Mike',to_char(null));
(3,'Mike',to_char(null))
*
第2行出现错误:
ORA-01400:
无法将NULL插入("C##SCOTT"."TEST"."C")
3.不指定名称,用列级约束来实现第二题内容
SQL>createtabletest
2(
3aintprimarykey,
4bvarchar2(10)unique,
5cdatenotnull
6)
7/
表已创建。
验证主键约束唯一性
SQL>insertintotestvalues
2(1,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));
已创建1行。
SQL>insertintotestvalues
2(1,'ldf',to_char(to_date('2014-10-23','yyyy-mm-dd')));
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.SYS_C009891)
验证主键约束非空
SQL>insertintotestvalues
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>insertintotestvalues
2(2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.SYS_C009892)
验证非空约束
SQL>insertintotestvalues
2(3,'Mike',to_char(null));
(3,'Mike',to_char(null))
*
第2行出现错误:
ORA-01400:
无法将NULL插入("C##SCOTT"."TEST"."C")
4.用表级不指定名称来实现第二题要求。
SQL>createtabletest
2(
3aint,
4bvarchar2(10),
5cdate,
6primarykey(a),
7unique(b)
8)
9/
表已创建。
验证主键约束唯一性
SQL>insertintotestvalues
2(1,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));
已创建1行。
SQL>ed
已写入fileafiedt.buf
1insertintotestvalues
2*(1,'ldf',to_char(to_date('2014-10-23','yyyy-mm-dd')))
SQL>/
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.SYS_C009893)
验证主键约束非空性
SQL>ed
已写入fileafiedt.buf
1insertintotestvalues
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
已写入fileafiedt.buf
1insertintotestvalues
2*(2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))
SQL>/
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.SYS_C009894)
5.用表级指定名称来实现第二题要求。
SQL>ed
已写入fileafiedt.buf
1createtabletest
2(
3aint,
4bvarchar2(10),
5cdate,
6constraintpk_testprimarykey(a),
7constraintuq_testunique(b)
8*)
SQL>/
表已创建。
验证主键约束唯一性
SQL>insertintotestvalues
2(1,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')));
已创建1行。
SQL>insertintotestvalues
2(1,'ldf',to_char(to_date('2014-10-23','yyyy-mm-dd')));
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.PK_TEST)
验证主键约束非空
SQL>ed
已写入fileafiedt.buf
1insertintotestvalues
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
已写入fileafiedt.buf
1insertintotestvalues
2*(2,'Mike',to_char(to_date('2014-10-23','yyyy-mm-dd')))
SQL>/
insertintotestvalues
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(C##SCOTT.UQ_TEST)
6.创建两个表,名称分别为A、B,分别满足下列要求:
A中包含字段a、b,B中包含字段c、d,都是int类型,其中a为表A的主键,c为表B的主键,d为指向表A中字段a的外键。
SQL>createtableA
2(
3aintconstraintpk_Aprimarykey,
4bint
5)
6/
表已创建。
SQL>createtableB
2(
3cintconstraintpk_Bprimarykey,
4dintconstraintfk_BreferencesA(a)
5)
6/
表已创建。
7.向第六题中的表A、B添加记录,验证外键约束所起的作用,即验证引用完整性的内容。
SQL>insertintoAvalues(1,2);
已创建1行。
SQL>insertintoBvalues(1,1);
已创建1行。
SQL>insertintoBvalues(2,2);
insertintoBvalues(2,2)
*
第1行出现错误:
ORA-02291:
违反完整约束条件(C##SCOTT.FK_B)-未找到父项关键字
8.修改上面test表的名称为test1,然后验证结果。
SQL>select*fromtest;
ABC
----------------------------------
1Mike14-11月-12
SQL>altertabletestrenametotest1;
表已更改。
SQL>select*fromtest1;
ABC
----------------------------------
1Mike14-11月-12
9.删除test1表中的b字段然后验证结果。
SQL>altertabletest1dropcolumnb;
表已更改。
SQL>select*fromtest1;
AC
------------------------
114-11月-12
10.把test1表中的c字段名称修改为d,然后验证结果。
SQL>altertabletest1renamecolumnctod;
表已更改。
SQL>select*fromtest1;
AD
------------------------
114-11月-12
11.删除test1表中的主键约束,然后验证结果。
删除主键约束:
SQL>altertabletest1dropconstraintpk_test;
表已更改。
验证主键唯一性无效:
SQL>insertintotest1values
2(1,to_char(to_date('14/10/23','yy/mm/dd')))
3/
已创建1行。
验证主键非空性无效:
SQL>insertintotest1values
2(null,to_char(to_date('14/10/23','yy/mm/dd')))
3/
已创建1行。
SQL>select*fromtest1;
AD
------------------------
114-11月-12
114-11月-12
14-11月-12
12以system用户登录数据库,利用dba_tables数据字典表查询scott用户有哪些表。
SQL>selecttable_name
2fromdba_tables
3whereowner='SCOTT'
4/
TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
YAMA
A
B
TEST1
已选择8行。
13.以system用户登录数据库,利用dba_constraints与dba_cons_columns数据字典表查询第六题中的约束名称及其所在的列。
SQL>selecttable_name,constraint_name,column_name
2fromdba_cons_columns
3wheretable_name='A'
4/
TABLE_NAMECONSTRAINT_NAME
------------------------------------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
APK_A
A
SQL>ed
已写入fileafiedt.buf
1selecttable_name,constraint_name,column_name
2fromdba_cons_columns
3*wheretable_name='B'
SQL>/
TABLE_NAMECONSTRAINT_NAME
------------------------------------------------------------
COLUMN_NAME
--------------------------------------------------------------
BFK_B
D
BPK_B
C
14.如果不使用desc命令,利用dba_columns数据字典表查询scott的emp表的结构(即emp表的所有列及其类型)。
SQL>selectcolumn_name,data_typefromdba_tab_columns
2whereowner='SCOTT'
3andtable_name='EMP'
4/
COLUMN_NAMEDATA_TYPE
------------------------------------------------------------------
EMPNONUMBER
ENAMEVARCHAR2
JOBVARCHAR2
MGRNUMBER
HIREDATEDATE
SALNUMBER
COMMNUMBER
DEPTNONUMBER
已选择8行。
15.用一个命令查询emp表上所有的约束名称,约束类型及其所在列名称,若是外键请给出其指向的表及列,若是检查约束,请给出检查条件。
[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!
]