Oracle_SQL(4) DDL 表和约束
数据库对象分为占存储空间的对象和不占存储存储空间的对象。
占存储空间的对象主要包括:表、索引等。
select distinct segment_type from dba_segments order by segment_type;
不占存储空间的对象主要包括:视图、序列、函数、存储过程、包、触发器等。
select distinct object_type from dba_objects order by object_type;
DDL是用来创建(create)、替换(replace)、更改(alter)、
删除(drop)、重命名(rename)、截断(truncate)数据库对象的语句。
本节重点讲解表,索引、视图、序列、函数、存储过程、包、触发器等对象在后续plsql课程中逐个讲解。
一、表(Table )
数据库中的表与我们日常生活中使用的表格类似,
它也是由行(Row) 和列(Column)组成的。
列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。
行包括了若干列信息项。
一行数据称为一个或一条记录,它表达有一定意义的信息组合。
一个数据库表由一条或多条记录组成,没有记录的表称为空表。
每个表中通常都有一个主关键字,用于唯一地确定一条记录。
1.示例
view dept;
create table DEPT
(
deptno NUMBER(2) not null,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
在此基础上创建我们的学生表student
create table student
(
sid number(10) not null,
sname varchar2(20),
birth_date date
);
2.创建表语法
create table 表名
(
列名 数据类型(长度) 约束,
...
);
3.数据类型
3.1 数值类型number
总长40位,其中一位用来表示正负,一位用来表示小数点,
数字的最长38位。
整数number(n)
小数number(m,n) m是总长度,n是小数位数,(m-n)是整数位数
3.2 字符类型varchar2
可变长字符串,总长4000个字节。
3.3 日期类型date
有效范围公元前4712年1月1日,到公元后9999年12月31日
3.4 大文本CLOB
A character large object containing single-byte characters.
Both fixed-width and variable-width character sets are
supported, both using the CHAR database character set.
Maximum size is 4 gigabytes.
3.5 二进制大文件BLOB
A binary large object. Maximum size is 4 gigabytes.
3.6 早期的数值类型
LONG 长整形 Character data of variable length up to 2 gigabytes, or 2^31 -1 bytes.
3.7 早期的字符类型
CHAR(size) Fixed-length character data of length size bytes. Maximum size is 2000 bytes. Default and minimum size is 1 byte.
NCHAR(size) Fixed-length character data of length size characters. Maximum size is determined by the national character set definition, with an upper limit of 2000 bytes. Default and minimum size is 1 character.
3.8 早期的日期类型
TIMESTAMP Year, month, and day values of date, as well as hour, minute, and second values of time
3.9 早期的二进制大文件
RAW(size) Raw binary data of length size bytes. Maximum size is 2000 bytes. You must specify size for a RAW value.
LONG RAW Raw binary data of variable length up to 2 gigabytes.
4.约束
4.1 非空约束not null
新增或修改记录时该列的值不允许为空
4.2 check约束check(sal>0)
新增或修改记录时该列的值需要满足check设定的条件
4.3 主键约束primary key(自带非空约束)
新增或修改记录时该列的值不能与其他记录的该列值重复
4.4 唯一键约束unique(不自带非空约束)
新增或修改记录时该列的值不能与其他记录的该列值重复
4.5 外键约束references dept (deptno)
新增或修改记录时该列的值需要在父表的主键列中存在
主键约束和唯一约束的区别:
主键约束自带非空约束;唯一键约束不自带非空约束。
主键一般是顺序号、有序列生成,无实际意义,
唯一键一般是实体记录的关键属性,有实际意义。
主键约束不能保证现实中同一个实体在系统中录入两次导致的重复;
唯一键约束可以保证现实中同一个实体在系统中只能录入一次。
5.较完整建表语句
create table EMP_4
(
empno NUMBER(4) primary key,
ename VARCHAR2(10) not null unique,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE default sysdate,
sal NUMBER(7,2) default 0 not null check(sal>=0),
comm NUMBER(7,2),
deptno NUMBER(2) references DEPT (DEPTNO)
);
insert into emp4 (empno) values (null);
insert into emp4 (empno) values (1);
insert into emp4 (empno,ename,sal,deptno) values (1,'aaa',1000,10);
insert into emp4 (empno,ename,sal,deptno) values (1,'aaa',1000,10);
insert into emp4 (empno,ename,sal,deptno) values (2,'aaa',1000,10);
insert into emp4 (empno,ename,sal,deptno) values (2,'aab',1000,9);
insert into emp4 (empno,ename,sal,deptno) values (2,'aab',-1000,10);
insert into emp4 (empno,ename,sal,deptno) values (2,'aab',1000,10);
6.列的默认值default
新增或修改记录时如果该列的值为null,则将默认值赋给该列。
insert into emp4 (empno,ename,deptno) values (3,'aac',10);
7.删除表语法
drop table 表名 [CASCADE|RESTRICT];
drop table emp4;
CASCADE 删除表会将表中数据,表的相关视图和约束等一并删除;
RESTRICT 在没有视图和约束引用该表时,该表才能被删除,默认为RESTRICT。
--删除dept表,并将emp表到dept表的外键一起删除
drop table dept cascade constraints;
8.表重命名
语法:alter table 原表名 rename to 新表名;
alter table emp4 rename to emp1;
9.修改表结构
9.1 增加列
语法:alter table 表名 add (列名 列类型 列约束);
alter table emp1 add (phone number(11));
--alter table emp1 add (phone number(11),address varchar2(100));
9.2 删除列
alter table 表名 drop column 列名;
alter table emp1 drop column phone;
9.3 修改列
语法:alter table 表名 modify 列名 列类型;
alter table emp1 modify phone number(15); --列类型可以由小改大
alter table emp1 modify phone number(9); --没有数据时,列类型可以由大改小
alter table emp1 modify phone not null; --给列增加非空约束
9.4 增加主键约束
/*create table EMP2
(
empno NUMBER(4) not null,
ename VARCHAR2(10) not null,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
); */
语法:alter table 表名 add constraint 约束名 primary key (列名,...);
alter table EMP2 add constraint PK_EMP2 primary key (EMPNO);
9.5 增加外键约束
语法:alter table 表名 add constraint 约束名 foreign key (列名,...)
references 父表名 (列名,...);
alter table EMP2 add constraint FK_EMP2_DEPTNO
foreign key (DEPTNO) references DEPT (DEPTNO);
9.6 增加唯一约束
语法:alter table 表名 add constraint 约束名 unique (列名,...);
alter table EMP2 add constraint UK_EMP2 unique (ename);
9.7 增加非空约束
alter table emp2 modify ename not null;
9.8 增加check约束
语法:alter table 表名 add constraint 约束名 check (表达式);
alter table EMP2 add constraint CHECK_EMP2_ename check (ename is not null);
alter table EMP2 add constraint CHECK_EMP2_SAL check (sal>=0);
9.9 约束的删除、启用、失效操作
语法:
alter table 表名 drop/disable/enable constraint 约束名;
举例:
alter table emp1 drop constraint CHECK_EMP1_SAL;
alter table emp1 disable constraint FK_EMP1_DEPTNO;
alter table emp1 enable constraint FK_EMP1_DEPTNO;
修改语法:alter table <tab> modify constraint 约束名 [ ENABLE | DISABLE ] [ VALIDATE | NOVALIDATE ] ;
alter table emp1 modify constraint CHECK_EMP1_ENAME disable;
alter table emp1 modify constraint FK_EMP1_DEPTNO disable;
alter table emp1 modify constraint PK_EMP1 disable;
alter table emp1 modify constraint UK_EMP1 disable;
10.截断(truncate)表
语法:truncate table 表名;
truncate table emp1;
11.复制表
create table emp2 as
select empno,ename,sal,job,mgr,deptno from emp where deptno=20;
Oracle_SQL(4) DDL 表和约束的更多相关文章
- DDL创建数据库,表以及约束(极客时间学习笔记)
DDL DDL是DBMS的核心组件,是SQL的重要组成部分. DDL的正确性和稳定性是整个SQL发型的重要基础. DDL的基础语法及设计工具 DDL的英文是Data Definition Langua ...
- MySQL入门第一天——概述、数据表与约束操作
一.概述 1.安装 初学MySQL,我们下载msi的安装版:http://dev.mysql.com/downloads/file.php?id=457403 安装的过程文字简述可以参考之前随笔:ht ...
- [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章 ...
- 5-06使用Sql 语句为表添加约束
约束名的命名规则推荐采用:约束类型_约束列. 为用户表添加约束 ALTER TABLE UserInfo ADD CONSTRALNT PK_UserId PRIMATY REY(UserId) CO ...
- SQL Server— 存在检测、建库、 建表、约束、外键、级联删除
/******************************************************************************** *主题: SQL Server- 存 ...
- Oracle_数据库表的约束
Oracle_数据库表的约束 完整性约束分类 域完整性约束 (非空not null,检查check) 实体完整性约束 (唯一unique,主键primary key) 参照完整性约束 (外键forei ...
- Mysql表的约束设计和关联关系设计
https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...
- Oracle day05 建表_约束
表的创建 标准的建表语法 : CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... ); 使用子查询创建表的语法 CREA ...
- PostgreSQL创建表及约束
创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...
随机推荐
- WEB前端问题——img标签的onclick事件无法响应问题【转载】
一个纠结了一下午的问题,img标签里面的onclick事件无法响应.最终找到了错误原因,是因为img标签的id与onclick事件的方法名相同. 于是接着又测试了一下,发现name名和方法名相同也会导 ...
- JS-cookie和正则表达式
一 cookie 1 什么是cookie? 会话跟踪技术 2 作用 验证身份,存储信息. 3 特点 大小限制,最多存4k: 每个域下只能存50个cookie: 有时间限制: 只能存放字符串: 只能访问 ...
- php支付宝接口 的使用
下载地址(java/php都有) https://doc.open.alipay.com/doc2/detail?treeId=66&articleId=103571&docType= ...
- msf客户端渗透(三):提权、图形化payload
对普通权限session提权 生成一个木马 开启Apache服务 将木马上传网页 被攻击者从这个网页上获取到这个木马 攻击者开启msf侦听 当被攻击者双击这个木马文件时 攻击者就获取到一个sessio ...
- Java LinkedList
LinkedList是基于双向链表实现的,先看构造方法和方法 Constructor Summary Constructors Constructor Description LinkedList() ...
- JMeter学习(三十六)发送HTTPS请求(转载)
转载自 http://www.cnblogs.com/yangxia-test Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程 ...
- jstorm集成kafka
本人是spark的拥趸,因为工作中需要用到jstorm,作记录如下. pom.xml <dependencies> <dependency> <groupId>co ...
- jxls2 java.lang.NegativeArraySizeException
某个单元格使用jx:each报这个错误. 内部代码,创建一个二维数组时,传了一个负值进去 解决办法 将这个单元格删除,重新编写批注
- CentOS服务器,大访问量会造成日志文件迅速增大,半年左右得清除一下
今天早上一打开QQ,一大群客户说我的网站登录不了,谷歌了一下,原来是服务器不能存储SESSION.后来问一下服务器托管商,被告知我的VPS运行的时间太久并且访问量很大,因此访问日志爆满. 服务器托管商 ...
- 基本数据类型(list,tuple)
基本数据类型(list,tuple)内容: 1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range⼀. 列表1.1 列表的介绍列表是python的基础数据类型之⼀,其他编程 ...