oraclede中数据定义语言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oraclede中数据定义语言相关的知识,希望对你有一定的参考价值。
Oracle:数据定义语言(DDL)1、命名规则和约定:
表名和列名的长度最多为30个字符
表名和列名必须以字母打头
表名或者列名中不允许有空格和*
Oracle服务器的保留字也不能作为表名或列名
2、数据类型:
创建数据表时,要为表中的每一列分配一个数据类型。数据类型指定了将要存储在此列中的数据的类型。通过为一列提供一种数据类型,可以避免在此列中存储错误类型的数据
Varchar2:VARCHAR2是一种字符型数据类型,用来在一列中存储可变长度的字母数字混合的数据。VARCHAR2必须指定最大长度,最小长度和默认长度都是一个字符。指定的长度要置于圆括号当中,例如VARCHAR(20)。如果数据比指定的长度短,那么只存储数据值,并不在值的尾部添加空格。但是,如果输入的值比指定的长度长,则会产生错误,并不会将较长的值截短。如果某一列的值没有固定的长度,那么最适合使用VARCHAR2数据类型
Char:CHAR类型是一种字符型数据类型,用来在一列中存储固定长度的字母数字混合的数据。默认长度和最小长度都是一个字符。如果输入的值比指定的长度短,则在其尾部添加空格,以使其长度等于指定的长度;如果输入的值比指定的长度长,则会发生错误。CHAR类型适用于固定长度的值
Number:NUMBER数据类型用来存储负数、正数、整数、定点数和浮点数。NUMBER数据类型可以用于任何要进行数学计算的列。当某一列使用Number类型时,可以指定其精度和标度。精度是一个数字的有意义数字的总数,包括小数点左右两边的数字,但指定精度时小数点不计算在内。标度是小数点右边数字的总数
整数类型全部是数字,没有小数部分。如果一列定义为整数类型,则只需要提供精度的大小即可
定点小数类型的小数点右边的数字为数是指定的
浮点小数类型的小数位为数是可变的。小数点前可以有任意位数字,或者也可以根本不出现小数点。将一列定义为这种类型时不用随同NUMBER类型一起来指定标度和精度
Date:DATE类型用于存储日期和时间值。DATE类型的列中存储着日、月、世纪、小时、分钟和秒。对DATE类型不需要指定大小。
LONG:LONG类型用于可变长度的字符数据,最大为2G Byte。一张数据表中只能有一列定义为LONG类型,定义LONG类型时,不需要指定其大小
NCHAR:NCHAR类型与CHAR类型相似,但它对每一个字符都使用两个字节的二进制编码,而CHAR类型则对每一个字符使用一个字节的ACSII编码,它只能表示256个不同的字符
CLOB:这一字符大对象数据类型用于存储单字节字符数据,最大为4G个字节
NCLOB:这一字符大对象数据类型使用2 Byte的字符代码
BLOB:二进制大对象数据类型用于存储二进制数据,最大为4G Byte
3、约束
约束是对数据表施加规则。约束有助于我们使自己的数据库具有完整性。
完整性规则:
(1)实体完整性:主键中的列不能是空(null),主键提供了可以惟一地识别一行或一个实体的方法。
(2)引用完整性:外键值或者是空值,或者必须作为引用表的主键值而存在
Oracle使用约束来实现关系数据库的完整性规则,并在单个列级别实现数据完整性。无论何时,当对数据表中的一行或一条记录进行插入、更新或删除操作时,都必须满足约束条件,这样其操作才能成功
3.1、约束类型
(1)完整性约束:定义数据表中的主键和外键,以及此外键所引用的主键
(2)值约束:如果不允许值为空,如果要求值是惟一的,以及如果一个列的值只允许是一组确定的值,那么就需要定义值约束
3.2、命名约束
Oracle通过内部名称或用户自定义的名称来识别约束,对于每一个用户帐号,每一个约束名都必须是惟一的。一个用户不能在两张不同的数据表上创建具有相同名称的约束。一般情况下,命名约束时采用如下的约定形式:
<table name>_<column name>_<constraint type>
这里table name是要定义约束的表名,column name是要应用约束的列名,constraint type是用缩写形式来表示的约束类型
约束与缩写的对应形式
PRIMARY KEY:pk
FOREIGN KEY:fk
UNIQUE:uk
CHECK:ck
NOT NULL:nn
如果用户没有命名一个约束,则Oracle服务器会自动生成一个约束名,所用的格式是SYS_Cn,这里n是任意一个惟一的数字
3.3、定义约束
可以在创建表时创建约束,也可以在表创建完成之后再添加约束。约束的定义有两个级别:
列级别:一个列级别的约束只涉及单独一列,它的定义与列的定义同时进行。除外键约束和复合主键约束外,其他类型的约束均可以在列级别进行定义通用的语法格式是:
Column datatype [CONSTRAINT constraint_name] constraint_type
表级别:一个表级别的约束涉及一列或多列,它的定义与列的定义是分开进行的。一般来说,所有列的定义都完成之后才定义表级别约束。除非空约束,所有约束均可以在表级别进行定义。通用的语法格式是:
[CONSTRAINT constraint_name] constraint_type(Column name)
3.3.1、主键约束
主键约束也称为实体完整性约束。它为表创建一个主键。一张表只能有一个主键约束。无论是一列用作主键还是多列复合起来用作主键,主键只能是非空值,而且也只能有惟一的值。例如,N2公司数据库的DEPT表将DeptId列用作主键,则在列级别定义约束如下所示:
DeptId NUMBER(2) CONSTRAINT dept_deptid_pk PRIMARY KEY
在表级别定义约束如下所示:
CONSTRAINT dept_deptid_pk PRIMARY KEY(DeptId)
3.3.2、外键约束
外键约束也称为主键完整性约束。它使用一列或多列作为外键,建立了此外键与同一张表或者另一张表的主键之间的关系
要确定一张数据表的外键,其他被引用的表及其主键必须已经存在。虽然外键与被引用的主键列不需要具有相同的名称,但是外键值必须与父表的主键值相匹配,或者外键值是空值
CONSTRAINT student_facultyid_fk FOREIGN KEY(FacultyId)REFERENCES faculty(FacultyId)
STUDENT标的FaultyId引用了FACULTY表的主键FacultyId
在结束FOREIGN KEY之前,还可以添加ON DELETE CASCADE子句,它不仅允许删除父表中的记录,而且还会同时删除子表中依赖的记录。在不使用ON DELETE CASCADE子句的情况下,如果子表引用父表中的记录,那么就不能删除父表中的这一行记录
3.3.3、非空约束
非空约束确保一列具有一个值而且不是空值
3.3.4、惟一性约束
惟一性约束要求一列或一组列中的每一个值都是惟一的。如果惟一性约束应用于单一列,则此列只有惟一的值;如果惟一性约束应用于一组列,那么这组列合起来具有惟一的值。惟一性约束允许空值,除非此列也应用了NOT NULL非空约束
3.3.5、检查约束
检查约束定义了每一行都必须满足的条件。一列可以有多个检查约束,检查约束既可以在列级别定义,也可以在表级别定义
CONSTRAINT dept_deptid_cc CHECK ((DeptId>=10)and(DeptId<=99))
3.3.6、非空检查约束
非空约束也能够作为检查约束来声明,它可以在列级别定义,也可以在表级别定义:
Name VARCHAR2(15) CONSTRAINT faculty_name_ck CHECK(Name IS NOT NULL)
3.3.7、DEFAULT默认值
默认值确保当向表中插入新的一行时,某一特定的列总是具有一个值。如果用户输入另一个值,则默认值就会被覆盖,如果插入空值,那么就会使用默认值
State CHAR(2) DEFAULT ‘NJ’
4、创建Oracle数据表
CREATE TABLE语句的通用语法格式是:
CREATE TABLE [schema.] tablename
(column1 datatype [CONSTRAINT constraint_name] constraint_type,
column2 datatype [CONSTRAINT constraint_name] constraint_type,…
[CONSTRAINT constraint_name] constraint_type(Column name,…),…)
schema是可选的,它与用户的注册名相同
tablename是用户指定的表名
column是单个列的名字
datatype是该列的数据类型和大小
constraint_name是用户提供的约束名
constraint_type是指完整性约束或值约束
每个列都可以有零个、一个或多个在列级别定义的约束,一般情况下,表级别约束是在所有列定义完成之后才声明
4.1、CREATE TABLE语句中的STORAGE子句
CREATE TABLE语句中可以包括STORAGE子句,但它是可选的。在创建数据库时,使用该子句,由参数INITIAL定义为数据表分配的初始磁盘空间,另外还可以使用另一个参数NEXT,它在数据表对分配的初始磁盘空间已经用完的情况下,定义再追加分配多少磁盘空间。
CREATE TABLE sample(Id NUMBER(3),Name VARCHAR(25))
TABLESPACE CIS_DATA
STORAGE(INITIAL 1M NEXT 100K)
PCTFREE 20;//空闲百分比
5、显示数据表信息
当用户创建了数据库中的一张表或多张表时,Oracle用自己的数据字典来跟踪所有这些表。Oracle提供了SQL语句和SQL *Plus命令可以查看Oracle的数据字典表中的信息
5.1、查看用户的表名
SELECT TABLE_NAME FROM USER_TABLES;
Oracle创建系统表来存储用户和用户对象的有关信息,USER_TABLES是一个Oracle系统表,TABLE_NAME是此表中的一个列
5.2、查看表结构
DESCRIBE 表名
5.3、查看约束信息
Oracle的数据字典表USER_CONSTRAINTS存储着我们为每一列输入的约束信息
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME=’STUDENT’;
表明必须采用大写字母,因为Oracle是以大写字母保存表名的
5.4、查看表空间信息
一个表空间包括一个或多个物理数据文件。我们可以获得使用数据字典视图USER_TABLESPACES所能得到的所有表空间的有关信息。
数据字典视图USER_USERS为用户提供了其账号的有关信息,以及永久的临时的表空间
5.5、注释表和列
创建数据表时可以为该表及其列添加注释,添加注释的目的是为编写文档的方便,添加注释所使用的语句是COMMENT语句。例如:
COMMENT ON TABLE student IS ‘Table holds students for INDO-S College’
COMMENT ON COLUMN employee.Lname IS ‘last name’
可以分别使用数据字典视图ALL_TAB_COMMENTS 和ALL_COL_COMMENTS,查看表和列的所有注释信息
6、修改已存在的数据表
要修改已经存在的表,某些修改是允许的,有些是不允许的
6.1、向已存在的表添加新列
ALTER TABLE tablename
ADD colname datatype;
6.2、修改已存在的列
ALTER TABLE tablename
MODIFY colname newdatatype;
6.3、添加一个约束
ALTER TABLE tablename
ADD [CONSTRAINT constraint_name] constraint_type(Column name);
6.4、删除一列
ALTER TABLE tablename
DROP COLUMN columnname;
6.5、删除一个约束
ALTER TABLE tablename
DROP CONSTRAINT constraintname;
6.6、启动/禁用约束
启用或禁用约束的格式是:
ALTER TABLE tablename
ENABLE | DISABLE CONSTRAINT constraintname;
6.7、重新命名一列
ALTER TABLE tablename RENAME COLUMN oldname TO newname;
6.8、重新命名一个约束
ALTER TABLE tablename RENAME CONSTRAINT oldname TO newname;
6.9、修改表的存储属性
ALTER TABLE tablename STORAGE(NEXT nK)
7、删除数据表
当删除一张数据表时,表中所有的数据以及表结构将被永久性地删除
DROP TABLE tablename;
8、重新命名数据表
RENAME oldtablename TO newtablename; 参考技术A insert into table (借出日期) values (to_date('2005-01-27','yyyy-mm-dd'));
Java如何保存含有时间的日期到Oracle数据库
原文:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#08_01
从Oracle JDBC 11.1开始,Oracle DATE类型默认对应的是java.sql.Timestamp,因此程序中的变量就定义为Timestamp类型。如果mapDateToTimestamp设置为false,则Oracle DATE类型对应的是java.sql.Date。当然,还可以直接把Oracle字段设置为TIMESTAMP类型。
Oracle JDBC 9.2 ~ 10.2,Oracle 增加了TIMESTAMP类型,它直接对应java.sql.Timestamp。因此,这种情况数据库字段就设计为TIMESTAMP类型,程序变量定义为Timestamp类型。
针对Oracle 8i,可以通过设置connection property(连接属性)V8Compatible,这样Oracle DATE类型将对应java.sql.Timestamp。
关于Oracle 日期类型的一些说明:
https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch4datetime.htm#NLSPG004
以上是关于oraclede中数据定义语言的主要内容,如果未能解决你的问题,请参考以下文章