SQL 基础之DDL语句创建和管理表(十四)
数据库对象
Object | 描述 |
表 | 基本的数据存储集合,由行和列组成 |
View | 从一张表或多张表中抽出的 逻辑上相关的数据集合 |
序列 | 生成规律的数值 |
index 索引 | 提高查询性能 |
Synonym 别名 | 给对象起的别名 |
表名和列名注意事项:
必须以字母开头
必须在 1–30 个字符之间
必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
必须不能和用户定义的其他对象重名
必须不能是Oracle的保留字
表的列的数量最多1000个
CREATE TABLE 语句
必须具有:
– CREATE TABLE 权限
– 存储空间
必须指定:
– 表名
– 字段名称,字段数据类型和字段大小
语法:
CREATE TABLE [schema.]table_name (column datatype [DEFAULT expr][, ...]);
引用其他用户的表
其他用户定义的表不在当前用户的方案中
应该使用用户名作为前缀,引用其他用户定义的对象
... hire_date DATE DEFAULT SYSDATE, ...
例如:CREATE TABLE hire_dates (id NUMBER(8), hire_date DATE DEFAULT SYSDATE);
create_date date default sysdate);
----------------------------------------- -------- ----------------------------
数据类型 | 描述 |
VARCHAR2(size) | 可变长字符数据 |
CHAR(size) | 定长字符数据 |
NUMBER(p,s) | 可变长数值数据 |
DATE | 日期和时间值 |
LONG | 可变长字符数据(最大可达到 2 GB) |
CLOB | 字符数据(最大可达到 4 GB) |
RAW and LONG RAW | 二进制数据 |
BLOB | 二进制数据 (最大可达到 4 GB) |
BFILE | 存储外部文件的二进制数据 (最大可达到 4 GB) |
ROWID | base-64 系统编码的行唯一地址 |
数据类型 | |
TIMESTAMP | 带小数秒的日期型 |
INTERVAL YEAR TO MONTH | 作为年和月的时间间隔存储 |
INTERVAL DAY TO SECOND | 作为天、小时、分和秒的时间间隔存储 |
约束为表级的强制规则。
如果表有依赖关系,约束能防止表的删除。
下面是有效的约束类型:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK
约束准则
如果不指定约束名 Oracle server 自动按照 SYS_Cn 的格式指定约束名
在什么时候创建约束:
– 建表的同时
– 建表之后
可以在表级或列级定义约束
可以通过数据字典视图查看约束
定义约束
语法:
create table [schema.]table
(column datatype [default expr]
[column_constraint],
...
[table_constraint][,...]);
列级约束语法
column [CONSTRAINT constraint_name] constraint_type,
表级约束语法:
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
列级约束示例
create table employees(
employee_id number(6)
constraint emp_emp_id_pk primary key,
first_name varchar2(20),
...);
表级约束语法:
column,...
[constraint constraint_name] constraint_type
(column, ...),
列级约束示例:
create table employees(
employee_id number(6)
constraint emp_emp_id_pk primary key,
first_name varchar2(20),
...);
表级约束示例:
create table employees(
employee_id number(6),
first_name varchar2(20),
...
job_id varchar2(10) not null,
constraint emp_emp_id_pk
primary key (employee_id));
NOT NULL 约束
确保该列不允许空值:
UNIQUE 约束
可以定义在表级或者列级:
create table employees(
employee_id number(6),
last_name varchar2(25) not null,
email varchar2(25),
salary number(8,2),
commission_pct number(2,2),
hire_date date not null,
...
constraint emp_email_uk unique(email));
PRIMARY KEY 约束
FOREIGN KEY 约束
可以定义在表级或者列级:
create table employees(
employee_id number(6),
last_name varchar2(25) not null,
email varchar2(25),
salary number(8,2),
commission_pct number(2,2),
hire_date date not null,
...
department_id number(4),
constraint emp_dept_fk foreign key (department_id)
references departments(department_id),
constraint emp_email_uk unique(email));
FOREIGN KEY约束:关键字
FOREIGN KEY:在表级指定子表中的列
REFERENCES:标识在父表中的列
ON DELETE CASCADE:当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL:子表中相应的列置空
CHECK 约束
定义每一行必须满足的条件
以下的表达式是不允许的:
– 出现CURRVAL, NEXTVAL, LEVEL, 和ROWNUM 伪列
– 使用 SYSDATE, UID, USER, 和 USERENV 函数
– 在查询中涉及到其它行的值
CREATE TABLE: 示例
create table employees
( employee_id number(6)
constraint emp_employee_id primary key
, first_name varchar2(20)
, last_name varchar2(25)
constraint emp_last_name_nn not null
, email varchar2(25)
constraint emp_email_nn not null
constraint emp_email_uk unique
, phone_number varchar2(20)
, hire_date date
constraint emp_hire_date_nn not null
, job_id varchar2(10)
constraint emp_job_nn not null
, salary number(8,2)
constraint emp_salary_ck check (salary>0)
, commission_pct number(2,2)
, manager_id number(6)
constraint emp_manager_fk references
employees (employee_id)
, department_id number(4)
constraint emp_dept_fk references
departments (department_id));
违反约束
update employees
set department_id = 55
where department_id = 110;
主键行被另一张表外键引用,那么您不能删除主键行
使用子查询创建表
使用 CREATE TABLE 语句和 AS subquery 选项,将创建表和插入数据结合起来完成。
CREATE TABLE table [(column, column...)] AS subquery;
指定的列和子查询中的列要一一对应。
通过列名和默认值定义列。
create table dept80
as
select employee_id, last_name,
salary*12 annsal,
hire_date
from employees
where department_id = 80;
ALTER TABLE 语句
使用 ALTER TABLE 语句您可以:
添加一个新列
修改现有的列定义
新的列定义默认值
删除一列
重命名列
将表更改为只读状态
Read-Only 表
使用 ALTER TABLE 将表改为只读模式:
表修改过程中阻止DDL和DML的更改
将表改回到 读/写 模式
alter table employees read only;
-- perform table maintenance and then
-- return table back to read/write mode
alter table employees read write;
删除表
表移动到回收站
使用 PURGE 子句可彻底删除表
表上依赖的对象失效同时删除对象权限
drop table dept;
SQL 基础之DDL语句创建和管理表(十四)相关推荐
- Oracle DB 使用DDL语句创建和管理表
• 对主要的数据库对象进行分类 • 查看表结构 • 列举列可以使用的数据类型 • 创建简单的表 • 说明创建表时如何创建约束条件 • 描述方案对象如何工作 • 数据库对象 – 命名规则 • CREAT ...
- MySql基础篇---003 SQL之DDL、DML、DCL使用篇:创建和管理表 ,数据处理之增删改,MySQL数据类型精讲 ,约束:联合主键
第10章_创建和管理表 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步.只有正确地 ...
- 删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
文章目录 1.基础知识 2.创建和管理数据库 3.创建表 4.修改表 5.重命名表 6. 删除表 7.清空表 8.MySQL8新特性-DDL的原子化 1.基础知识 1.1 一条数据存储的过程 存储数据 ...
- 执行DDL语句(创建表)
操作 JDBC 的步骤 : 加载注册驱动 获取连接对象 创建语句对象 执行SQL语句 释放资源 创建表和异常处理 案例 : 创建学生信息表(t_student) .包含 id/name/age 三个列 ...
- 创建emp表 oracle,Oracle中创建和管理表详解
Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16 作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...
- SQL Server 2017 SELECT…INTO 创建的新表指定到文件组
SQL Server 2017 SELECT-INTO 创建的新表指定到文件组 原文:SQL Server 2017 SELECT-INTO 创建的新表指定到文件组 SELECT-INTO 在 SQL ...
- mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...
MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...
- SQL Server 常用更新语句,用B表数据作为条件或数据源更新A表数据
SQL Server 常用更新语句,用B表数据作为条件或数据源更新A表数据 示例:用B表姓名覆盖A表姓名 假设: A表数据 Id,Name 1,张三 B表数据 Id,Name 1,李四 用下面这个语句 ...
- 【零基础学Java】—TCP通信(五十四)
[零基础学Java]-TCP通信(五十四) TCP通信:面向连接的通信,客户端和服务器端必须经过三次握手,建立逻辑连接,才能通信(安全). 通信的步骤: 服务器端先启动 服务器端不会主动的请求客户端, ...
最新文章
- php mysql zend linux_在Linux系统中安装Apache+MySQL+php+phpMyAdmin+Zend
- Java + MongoDB Hello World Example--转载
- 带你学python基础:模块和包
- jcifs java_通过jcifs实现java访问网络共享文件
- centos7设置输入密码三次错误锁定账号
- 【软件相关】Proteus 8入门教程
- 【detectron】FPN网络中RPN构建与相应的损失函数
- 信鸽 ios tag推送 php,信鸽推送(iOS)踩过的坑
- python数据分析房价预测_Kaggle入门级赛题:房价预测——数据分析篇
- iOS学习爬坑记录4:ios8中的搜索栏,使用UISearchController
- 下一代 TGW 从13Mpps到50Mpps性能优化之旅
- linux下s3c2440开发板,SAMSUNG S3C2440 ARM LINUX 开发板 上手初体验 --开发环境搭建
- 3D相机面临的困难问题和解决方案
- 华为软件精英挑战赛2020题目
- linux clock_gettime函数详解
- 用python浪漫告白_Python实现浪漫表白
- 20182316胡泊 第2,3周学习总结
- Kubernetes(K8s)基本概念:HPA(Pod横向自动扩容)、StatefulSet
- 计算机网络-概述篇(上)
- python中字符串转xml对象_将文本字符串转换为XML
热门文章
- python里面ca_Python SSL服务器提供中间CA证书
- arm 饱和指令_ARM平台下NEON使用方法详解
- rocketmq新扩容的broker没有tps_RocketMQ吐血总结
- python编写函数isodd(x)_python函数对象
- 计算机的命令函数,数学建模的常用的命令和基本函数..doc
- java gpg_gpg的使用
- 2021年春季学期-信号与系统-第四次作业参考答案-第五小题
- MIC4451驱动单管MOS,IGBT 测试实验
- 如何快速优雅的在CSDN输入公式?
- 基于ESP8266 WiFi控制的步进升降机械平台