DDL数据库对象管理

约束的分类:

主键约束:primary key 要求主键列数据唯一,并且不允许为空。

外键约束:foreign key 用于在两表之间建立关系,需要指定引用主表的哪一列。

检查约束:check 某列取值范围限制、格式限制等。 例如性别列

唯一约束:unique 数据的唯一性,可以空,但只能有一个

非空约束:not null 该列数据不能为空

注意:1.not null 约束只能在列级上定义。

2. 外键需要关联主键表的主键列或唯一列,这里关联唯一列

3. 创建外键表时:先创建主键表,在创建外键 。删除表时:先删除外键表,在删除主键表

1.创建表格

-- Create table 表格名称(列名 数据类型 约束 ,列名 数据类型 ,约束);

create table cla

(

clano number,

claid nvarchar2(20),

claname nvarchar2(20)

);

--在创建完列后,同时创建约束(列级约束)

例如:

create table T1(

id number constraint PK_T1 primary key, -- 声明约束可以使用constraint PK_T1指定约束名

NAME VARCHAR(20) constraint UN_T1_NAME unique NOT NULL, -- 唯一和非空

SEX CHAR(2) constraint CK_T1_SEX CHECK( SEX IN ('男','女')),

tid number constraint FK_T1_T references T(id)

);

--在创建完表格列后,在列下面创建约束(表级约束)

例如:

create table T2(

id number ,

NAME VARCHAR(20) not null, -- not null 只能定义在列的后面,称为列级约束

SEX CHAR(2),

tid number ,

constraint PK_T2 primary key(id), ---先定义列后编写的约束称为表级约束;

constraint UN_T2_NAME unique(name) ,

constraint CK_T2_SEX CHECK( SEX IN ('男','女')),

constraint FK_T2_T foreign key (tid) references T(id) -- 在表格后指定外键列时需要使用 foreign key指定外键列

);

--联合主键,联合唯一

create table T3(

ID NUMBER ,

SID NUMBER ,

NAME NVARCHAR2(20),

NAME2 NVARCHAR2(20),

constraint PK_T3 PRIMARY KEY(ID,SID), -- 联合主键

CONSTRAINT UN_T3_NAME_NAME2 UNIQUE(NAME,NAME2) -- 联合唯一

);

2.修改表格

--修改表格之添加主键,唯一约束,外键约束,检查约束

例如:

1.alter table cla add constraint PK_CLA primary key (CLANO);

2.alter table cla add constraint UN_CLA_CLAID unique (CLAID);

3.alter table STU add constraint FK_STU_CLA foreign key (CLASSID) references cla (CLANO);

4.alter table STU add constraint CK_STU_SEX check (sex in ('男','女'));

3.删除表格

语法: drop table 表格名称

注意:删除主键表前,需要先删除外键表上的引用关系

drop table cla2;

4. 查询表格 (不属于DDL)-----

select table_name from user_tables;

补充:

1 . references 和 reference 的区别

references 可以在定义列的同时引用主键表;reference不可以

2. 声明约束可以使用constraint PK_T1指定约束名

3. 外键需要关联主键表的主键列或唯一列

4.如果没有声明约束或指定约束名称,则系统会默认生成一个名称

DDL数据库对象管理的更多相关文章

  1. Oracle02——oracle分页、子查询、集合运算、处理数据、创建和管理表和其他数据库对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7289451.html --oracle分页(Pageing Query) select ...

  2. (二)sql入门 管理数据库对象

    在数据库里,有各种各样的对象,除了最常见的表之外,还有诸如视图.索引等数据库对象. 这些对象,在数据库里需要有人来管理,那么谁来管理呢?当然是数据库的使用者了.每个使用者相对于数据库里有一片区域,称为 ...

  3. [转]使用VS2010的Database 项目模板统一管理数据库对象

    本文转自:http://www.cnblogs.com/shanyou/archive/2010/05/08/1730810.html Visual Studio 2010 有一个数据库项目模板:Vi ...

  4. MySQL提供了以下三种方法用于获取数据库对象的元数据

    MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...

  5. 19.Mysql优化数据库对象

    19.优化数据库对象19.1 优化表的数据类型应用设计时需要考虑字段的类型和长度,并留有一定长度冗余.procedure analyse()函数可以对表中列的数据类型提出优化建议.procedure ...

  6. oracle(创建数据库对象)

    1 --创建数据库 2 --1.SYSDBA系统权限 3 startup:--启动数据库. 4 shutdown:--关闭数据库. 5 alter database[mount]|[open]|[ba ...

  7. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  8. Flyway, 数据库Schema管理利器

    整天跟数据库打交道的程序员都知道,当数据库的Schema发生改变时是多么痛苦的事情.尤其是一个在不断开发完善的项目,随着需求变化,数据库的schema也会跟着变化,而追踪记录这些变化一向都是费时费力. ...

  9. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数010,obj,对象管理

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数010,obj,对象管理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

随机推荐

  1. element-ui中el-table表格的使用(如何取到当前列的所有数据)

    基本使用都不多说了, 我们知道这个表格组件,每个单元格内容是table绑定的data中的某个属性决定的,但是如果我们想根据这个属性值,渲染出另一个值呢,首先问题来了,我如何获得当前列的值, 查了查,我 ...

  2. skb head/data/tail/end/介绍

    2017年04月26日 18:21:12 abcLinux 阅读数 799   This first diagram illustrates the layoutof the SKB data are ...

  3. [题解] [CF 1250J] The Parade

    题面 题目大意: 给定一个 \(n\) , 所有军人的数量均在 \([1, n]\) 给定 \(a_i\) 代表高度为 \(i\) 的军人的个数 你要将这些军人分成 \(k\) 行, 满足下面两个条件 ...

  4. ROS indigo下Kinect v2的驱动安装与调试

    ROS indigo下Kinect v2的驱动安装与调试 一.libfreenect2源码安装与测试 github地址:https://github.com/OpenKinect/libfreenec ...

  5. adb的一些命令

    adb pull <手机路径> <本机路径> 从手机中拉取信息到本地电脑上 adb push <本机路径> <手机路径> 从本地电脑推送信息到手机上

  6. Xgboost 两种使用方式

    原生形式使用Xgboost(import xgboost as xgb) from sklearn import datasets from sklearn.model_selection impor ...

  7. VUE组件如何通信

    Vue父子组件如何通信? 子组件通知父组件(调用父组件方法) 在父组件使用 on(eventName)监听事件,在子组件使用emit(eventName) 触发事件 : 父组件通知子组件(调用子组件方 ...

  8. kotlin中抽象类

    抽象类和接口很类似,抽象类不能被实例化需要使用abstract 关键字声明,抽象类实现接口后,接口中没有函数体的函数可以不重写,接口中的这些方法就自动被继承到实现接口的抽象类中,称为抽象方法 pack ...

  9. Storm和Hadoop 区别

    Storm - 大数据Big Data实时处理架构   什么是Storm? Storm是:• 快速且可扩展伸缩• 容错• 确保消息能够被处理• 易于设置和操作• 开源的分布式实时计算系统- 最初由Na ...

  10. for-update与for-update nowait

    1.for update 和 for update nowait 的区别: 首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何 ...