表的创建
标准的建表语法 :
CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... );
使用子查询创建表的语法
CREATE TABLE table [column(,column...)] AS subquery,
1.新表的字段列表必须与子查询中的字段列表匹配
2.字段列表可以省略
create table emp2 as select * from emp;
表结构的修改
  • alter table ... add ... : 增加新的列
alter table emp add address varchar()
新增加的类不能定义为 "not null" ,基本表在增加一列后,原有元组在新增加的列上的值都定义为空值。
  • alter table ...drop ... : 删除原有的列
语法格式:alter table 表名 drop column 列名
alter table emp drop column address
  • alter table ...modify ... : 修改字段
alter table emp modify(job varchar())
  • drop table : 在基本表不需要时,可以使用语句撤销。
在一个基本表撤销后,所有的数据都丢弃。所有相关的索引被删除
drop table emp cascade constraints
  • RENAME : 语句改变表名(视图),要求必须是表(视图)的所有者
RENAME old_name TO new_name
约束constraint
若定义了约束,并且数据不符合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功执行
约束名 约束描述
  • not null 非空
  • unique Key 唯一键
  • primary key 主键
  • foreign key 外键
  • check 自定义检测约束
Oracle 使用SYS_Cn格式命名约束,也可以由用户命名
在建表的同时创建
建表后创建
约束从作用上分类,可以分成两大类:
表级约束:可以约束表中的任意一列或多列。可以定义除了not null 以外的任何约束
列级约束:只能约束其所在的某一列。可以定义任何约束。
列级约束 : 从形式上看,在每列定义完后马上定义的约束,在逗号之前就定义好了。
carete table parent(p1 number primary key); create table child (c1 number primary key ,c2 number references parent(p1));
表级约束:从形式上可以看出列级约束的区别了吧。
create table child (c1 nnumber ,c2 number ,primary key(c2), foreign key(c2) references parent(p1));
有些时候,列级约束无法实现某种约束的定义,比如联合主键的定义,就要用到表级约束:
create table test(id1 number ,id2 number ,primary key(id1,id2));
主键约束(PRIMARY KEY)
主键不能为空,也不允许出现重复,即关系要满足实体完整性规。
    • 主键从功能上看相当于非空且唯一
    • 一个表中只允许一个主键
    • 主键是表中能够唯一确定一个行数据的字段
    • 主键字段可以是单字段或者是多字段的组合
    • Oracle 为主键创建对应的唯一性索引
主键可用下列两种形式之一定义
    1. primary key(列)主键子句 在表的定义中加上
    2. primary key主键短语 在主属性的定义之后加上
上述形式Oracle 会自动命名约束,可自己给约束起名
create table t3( id number(), constraint t3_pk primary key(id) ) 
非空约束(not null)
    • 确保字段值不允许为空
    • 只能在字段级定义
CREATE TABLE employees( employee_id number(), name varchar2() not null, salary number(,), hire_date date constraint emp_hire_date_nn not null )
 
唯一性约束(unique)
    • 唯一性约束条件确保所在的字段或者字段组合不出现重复值
    • 唯一性约束条件的字段允许出现空值
    • Oracle 将为唯一性约束条件创建对应的唯一性索引
create table employees( id number(), name varchar2() not null unique, email varchar2(), salary number(,), hire_date date not null, constraint emp_email_uk unique(email) );
 
check 约束
check 约束用于对一个属性的值加以限制
在check 中定义检查的条件表达式,数据需要符合设置的条件
create table emp3( id number() primary key , age number() check(age > and age <), salary number(,), sex char(), constraint salary_check check(salary>) )
在这种约束下,插入记录或修改记录时,系统要测试新的记录的值是否满足条件
 
关系模型的三类完整性规则
  • 实体完整性规则 这条规则要求关系中在组成主键的属性上不能有空值
  • 参照完整性规则 这条规则要求“不引用不存在的实体”
  • 用户定义的完整性规则 反应了某一具体的应用涉及的数据必须满足的语义要求
外键约束(foreign key)
外键是表中的一个列,其值必须在另一表的主键或者唯一键中列出
作为主键的表称为"主表" ,作为外键的关系称为"依赖表"
外键参照的是主表的主键或者唯一键
对玉主表的删除和修改主键值的操作,会对依赖关系产生影响,以删除为例:当要删除主表的某个记录(即删除一个主键值,那么对依赖的影响可采取下列3种做法:
1. restrict方式 :只有当依赖表中没有一个外键值与要删除的主表中主键值相对应时,才可执行删除操作
2. CASCADE方式:将依赖表中所有外键值与主表中要删除的主键值相对应的记录一起删除
3. SET NULL方式:将依赖表中所有与主表中被删除的主键值相对应的外键值设为空值
FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO)
[ON DELETE [CASCADE ISET NULL]]如省略on短语,缺省为第一中处理方式。
 
约束的添加和撤销
可添加或删除约束,但不能直接修改
alter table tablename
增加
add constraint con_name unique(col)
删除
drop constraint com_name[cascade]
查询constraint
select constraint_name,constraint_type from user_constraints where table_name=upper('sxtstu05')
或者where owner ='SCOTT' 大写
select constraint_name,constraint_type from user_constraints where owner ='SCOTT'
select constraint_name,column_name from user_cons_columns where table_name =upper('tablename')

Oracle day05 建表_约束的更多相关文章

  1. oracle基本建表语句

    oracle基本建表语句 2010-09-20 10:37:33|  分类: 数据库 |  标签:数据库  oracle  |字号 订阅 --创建用户create user han identifie ...

  2. PowerDesigner连接Oracle数据库建表序列号实现自动增长

    原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties — ...

  3. SQL Server— 存在检测、建库、 建表、约束、外键、级联删除

    /******************************************************************************** *主题: SQL Server- 存 ...

  4. Oracle学习(三)SQL高级--表结构相关(建表、约束)

    一.建表语句 CREATE DATABASE(创建数据库) --创建数据库 create database 数据库名字; CREATE TABLE(创建表) --创建表 CREATE TABLE 表名 ...

  5. oracle的建表语句

    oracle数据库的建表语句,具体语法如下: CREATE TABLE tablename (column_name datatype [null,not null], column_name dat ...

  6. Oracle数据库建表+添加数据练习

    SQL脚本: --建表 --student表+注释 create table student( sno ) not null, sname ) not null, ssex ) not null, s ...

  7. oracle 存储过程 建表插值等

    建表.插值的procedure create or replace procedure CREATE_EMP is v_createsql ); v_insertsql ); begin v_crea ...

  8. oracle得到建表语句

    第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...

  9. Oracle的关于建表,约束,查询等的练习

    从建立一个简单表,到实现一些复杂查询的例子, DROP TABLE grade;DROP TABLE item;DROP TABLE sporter;CREATE TABLE sporter( spo ...

随机推荐

  1. 搭积木(java)-蓝桥杯

    搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9.搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小.最后搭成4层的金字塔形,必须用完所有的积木.下 ...

  2. Jmeter之Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect

    最近在做性能测试过程中遇到了高并发时,后台监控各项指标都很正常,但是测试结果中很多Non HTTP response code: java.net.SocketException/Non HTTP r ...

  3. 串口RS232和485通信的波形分析

    一.串行数据的格式 异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5.6.7.8位,停止位可以是1.1.5.2位. 起始位是一个值为0的位,所以对于正逻辑的TTL电平 ...

  4. 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  5. [Swift]LeetCode153. 寻找旋转排序数组中的最小值 | Find Minimum in Rotated Sorted Array

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  6. [SQL]LeetCode181. 超过经理收入的员工 | Employees Earning More Than Their Managers

    SQL架构 Create table If Not Exists Employee (Id ), Salary int, ManagerId int) Truncate table Employee ...

  7. [Swift]LeetCode714. 买卖股票的最佳时机含手续费 | Best Time to Buy and Sell Stock with Transaction Fee

    Your are given an array of integers prices, for which the i-th element is the price of a given stock ...

  8. [Swift]LeetCode854. 相似度为 K 的字符串 | K-Similar Strings

    Strings A and B are K-similar (for some non-negative integer K) if we can swap the positions of two ...

  9. iOS模拟器使用

    在iOS开发过程中一直都是使用模拟器进行调试,在模拟器上有很多不适应的地方,但是其实在模拟器上也有很多其他的功能,在本文中主要对模拟器的一些基本功能进行总结一下. 1 首先,我们了解一下模拟器中常用的 ...

  10. Docker系列教程02-MongoDB默认开启鉴权

    说明,我这里使用的是compose的版本的1.17.0格式是3,但是这和compose版本无关,你只需要添加MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_P ...