首页 > 数据库 >Oracle创建表语句(Create table)语法详解及示例

Oracle创建表语句(Create table)语法详解及示例

时间:2023-11-06 15:32:40浏览次数:49  
标签:CONSTRAINT Create 示例 Number dept emp SQL Oracle id

 

创建表(Create table)语法详解
1. ORACLE常用的字段类型
ORACLE常用的字段类型有
VARCHAR2 (size) 可变长度的字符串, 必须规定长度
CHAR(size) 固定长度的字符串, 不规定长度默认值为1
NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数
最长38位. 不够位时会四舍五入.
DATE 日期和时间类型
LOB 超长字符, 最大可达4G
CLOB 超长文本字符串
BLOB 超长二进制字符串
BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的.
数字字段类型位数及其四舍五入的结果
原始数值1234567.89
数字字段类型位数 存储的值
Number 1234567.89
Number(8) 12345678
Number(6) 错
Number(9,1) 1234567.9
Number(9,3) 错
Number(7,2) 错
Number(5,-2) 1234600
Number(5,-4) 1230000
Number(*,1) 1234567.9
2. 创建表时给字段加默认值 和约束条件
创建表时可以给字段加上默认值
例如 : 日期字段 DEFAULT SYSDATE
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间
创建表时可以给字段加上约束条件
例如: 非空 NOT NULL
不允许重复 UNIQUE
关键字 PRIMARY KEY
按条件检查 CHECK (条件)
外键 REFERENCES 表名(字段名)
3. 创建表的例子
CREATE TABLE DEPT(
EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13)) ;
CREATE TABLE region(
ID number(2) NOT NULL PRIMARY KEY,
postcode number(6) default '0' NOT NULL,
areaname varchar2(30) default ' ' NOT NULL);
4. 创建表时的命名规则和注意事项
1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,#
2)大小写不区分
3)不用SQL里的保留字, 一定要用时可用双引号把字符串括起来.
4)用和实体或属性相关的英文符号长度有一定的限制
注意事项:
1)建表时可以用中文的字段名, 但最好还是用英文的字段名
2)创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面
3)建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引
4)一个表的最多字段个数也是有限制的,254个.
5. 约束名的命名规则和语法
约束名的命名规则约束名如果在建表的时候没有指明,系统命名规则是SYS_Cn(n是数字)
约束名字符串的命名规则同于表和字段名的命名规则
6. 使用约束时的注意事项

约束里不能用系统函数,如SYSDATE和别的表的字段比较
可以用本表内字段的比较
想在事务处理后, 做约束的

检查
SQL> alter session set constraints deferred.
7. 由实体关系图到创建表的例子 s_dept
前提条件:已有region表且含唯一关键字的字段id
SQL> CREATE TABLE s_dept
(id NUMBER(7)
CONSTRAINT s_dept_id_pk PRIMARY KEY,
name VARCHAR2(25)
CONSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER(7)
CONSTRAINT s_dept_region_id_fk REFERENCES region (id),
CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));
8. 较复杂的创建表例子
SQL> CREATE TABLE s_emp
(id NUMBER(7)
CONSTRAINT s_emp_id_pk PRIMARY KEY,
last_name VARCHAR2(25)
CONSTRAINT s_emp_last_name_nn NOT NULL,
first_name VARCHAR2(25),
userid VARCHAR2(8)
CONSTRAINT s_emp_userid_nn NOT NULL
CONSTRAINT s_emp_userid_uk UNIQUE,
start_date DATE DEFAULT SYSDATE,
comments VARCHAR2(25),
manager_id NUMBER(7),
title VARCHAR2(25),
dept_id NUMBER(7)
CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),
salary NUMBER(11,2),
commission_pct NUMBER(4,2)
CONSTRAINT s_emp_commission_pct_ck CHECK
(commission_pct IN(10,12.5,15,17.5,20)));
9. 通过子查询建表
通过子查询建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date
FROM s_emp WHERE dept_id = 41;
SQL> CREATE TABLE A as select * from B where 1=2;
只要表的结构.
10. 用子查询建表的注意事项
1)可以关连多个表及用集合函数生成新表,注意选择出来的字段必须有合法的字段名称,且不能重复。
2)用子查询方式建立的表,只有非空NOT NULL的约束条件能继承过来, 其它的约束条件和默认值都没有继承过来.
3)根据需要,可以用alter table add constraint ……再建立其它的约束条件,如primary key等.
11. Foreign Key的可选参数ON DELETE CASCADE
在创建Foreign Key时可以加可选参数:
ON DELETE CASCADE它的含义是如果删除外键主表里的内容,子表里相关的内容将一起被删除.
如果没有ON DELETE CASCADE参数,子表里有内容,父表里的主关键字记录不能被删除掉.
12. 如果数据库表里有不满足的记录存在,建立约束条件将不会成功.
13. 给表创建和删除同义词的例子
SQL> CREATE SYNONYM d_sum
2 FOR dept_sum_vu;
SQL> CREATE PUBLIC SYNONYM s_dept
2 FOR alice.s_dept;
SQL> DROP SYNONYM s_dept;



标签:CONSTRAINT,Create,示例,Number,dept,emp,SQL,Oracle,id
From: https://blog.51cto.com/emanlee/8212835

相关文章

  • c#对接海康双目客流相机SDK调用示例
    c#调用视频并显示在WinForm的PictureBox控制上面,实现一直播放视频的功能 首先需要使用visualstudionuget下载安装海康客流相机的SDK包然后根据以下代码和页面来设计一下实现逻辑就可以实现播放实时视频的需求了privateintm_lRealHandle=-1; publicMainForm()......
  • mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
      解决方法gpedit.msc  计算机配置>管理模板>系统>凭据分配>加密Oracle修正   ......
  • Oracle高级技巧:使用PIVOT函数和窗口函数解决只查询一条数据的问题
    写本博客的目为了温故而知新把学习过程记录下来,以备后查。当我们需要将表格中的行转置为列时,通常可以使用PIVOT函数来实现。但是在某些情况下,由于创建日期等字段相同,只有一条数据会被查询出来。这时候,我们就可以使用窗口函数进行分组和排序,以便返回具有相同创建日期的所有记录。......
  • Go 生成protobuf示例
    先安装好工具goinstallgoogle.golang.org/protobuf/cmd/[email protected]/grpc/cmd/protoc-gen-go-grpc@latest下载安装protocwgethttps://github.com/protocolbuffers/protobuf/releases/download/v25.0/protoc-25.0-linux-x86_64.zip......
  • java基础:再哈希法解决哈希冲突代码示例
    再哈希法(Rehashing)是解决哈希冲突的另一种方法。它与开放定址法不同,再哈希法使用多个哈希函数来确定冲突元素的位置,而不是在同一个哈希表中进行探测。下面是一个使用再哈希法解决哈希冲突的示例代码:publicclassRehashingHashTable{privateEntry[]table;privateint......
  • Oracle修改表注释的SQL语句
    要修改Oracle表的注释,可以使用COMMENTONTABLE语句。下面是修改表注释的SQL语法:COMMENTONTABLEtable_nameIS'new_table_comment';其中,table_name是要修改注释的表名,new_table_comment是新的表注释。以下是一个具体的示例:COMMENTONTABLEemployeesIS'Thistables......
  • 在Vue 3中如何在created钩子中进行API调用?
    在Vue3中,您可以使用setup函数来替代Vue2中的created生命周期钩子,并在其中进行API调用。下面是一个示例:import{ref,onMounted}from'vue'importaxiosfrom'axios'exportdefault{setup(){//创建一个响应式变量来存储API的返回数据constdata=ref(null......
  • Oracle 19c Linux平台启动时出现ORA-00800错误浅析
    这里简单介绍一下如何处理解决Linux平台下Oracle19c启动时,告警日志出现ORA-00800错误的问题,详情介绍请见下面内容:环境描述:操作系统:RedHatEnterpriseLinuxrelease8.8(Ootpa)数据库:19.16.0.0.0企业版问题描述:在Oracle19c启动时,在Oracle的告警日志中会出现下面这样一......
  • python实现手势识别的示例(入门)
    原文:https://pythonjishu.com/yoprvijnxxyihab/手势识别是计算机视觉领域的一个重要研究方向。在实际应用中,手势识别可以被用于人机交互、智能家居控制等领域。在本文中,我们将介绍如何使用Python实现手势识别的示例代码。环境搭建安装Python要使用Python进行手势识别的开发,首......
  • oracle-使用delete误删数据后的恢复方法
    今天误删数据,学习到了使用闪回恢复数据的方法通过闪回日志可以使数据库恢复到过去的某个状态--查看对应时间点对应表的数据select*from'table_name'asoftimestampto_timestamp('2023-11-0407:00:00','yyyy-mm-ddhh24:mi:ss')--如果被禁用行移动altertable'table......