Oracle SQL(三)

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

4.1 建表语句

4.1.1 CREATE DATABASE(创建数据库)

--创建数据库
create database 数据库名字;

4.1.2 CREATE TABLE(创建表)

--创建表
CREATE TABLE 表名
(
字段1 类型(长度),
字段2 类型(长度),
字段3 类型(长度),
字段4 类型(长度),
字段5 类型(长度)
);

4.2 约束语句

4.2.1 定义

SQL 约束用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

  • 约束类型:

    NOT NULL - 指示某列不能存储 NULL 值。

    UNIQUE - 保证某列的每行必须有唯一的值。

    PRIMARY KEY - (主键)NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

    FOREIGN KEY - (外键)保证一个表中的数据匹配另一个表中的值的参照完整性。

    CHECK - 保证列中的值符合指定的条件。

    DEFAULT - 规定没有给列赋值时的默认值。

4.2.2 NOT NULL(非空约束)

--创建表时增加约束 NOT NULL
CREATE TABLE 表名
(
列1 类型(长度) NOT NULL,
列2 类型(长度) NOT NULL,
列3 类型(长度),
列4 类型(长度),
列5 类型(长度)
);

--删除约束 NOT NULL
alter table 表 modify 列 null;
--设置约束 NOT NULL
alter table 表 modify 列 not null;

4.2.3 UNIQUE(唯一约束)

PS:每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

--创建表时增加约束 UNIQUE
CREATE TABLE 表名
(
列1 类型(长度) NOT NULL,
列2 类型(长度) NOT NULL,
列3 类型(长度),
列4 类型(长度),
列5 类型(长度),
CONSTRAINT 约束名 UNIQUE (列1,列2)
);

--修改表时,增加约束 UNIQUE (单列约束的情况)
ALTER TABLE 表 ADD UNIQUE (列1);

--修改表时,如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束(多列约束的情况)
ALTER TABLE 表
ADD CONSTRAINT 约束名 UNIQUE (列1,列2)

--删除约束 UNIQUE
ALTER TABLE 表 DROP CONSTRAINT 约束名

4.2.4 PRIMARY KEY(主键)

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

PS:每个表都应该有一个主键,并且每个表只能有一个主键。

--创建表时增加约束 PRIMARY KEY
CREATE TABLE 表名
(
列1 类型(长度) PRIMARY KEY,
列2 类型(长度),
列3 类型(长度),
列4 类型(长度),
列5 类型(长度)
);

--创建表时,如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束(多列约束的情况)
PS:这种情况还是只有一个主键。然而,此时主键的值是由两个列(列1和列2)组成的
CREATE TABLE 表名
(
列1 类型(长度),
列2 类型(长度),
列3 类型(长度),
列4 类型(长度),
列5 类型(长度),
CONSTRAINT 约束名 PRIMARY KEY (列1,列2)
);

PS:用ALTER TABLE 语句添加主键(即修改表的场景),必须把主键列声明为不包含 NULL 值(在表首次创建时)。
--修改表时,增加约束 PRIMARY KEY (单列约束的情况)
ALTER TABLE 表 ADD PRIMARY KEY (列1);

--修改表时,如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束(多列约束的情况)
ALTER TABLE 表
ADD CONSTRAINT 约束名 PRIMARY KEY (列1,列2)

--删除约束 PRIMARY KEY(有约束名的场景)
ALTER TABLE 表 DROP CONSTRAINT 约束名

--删除约束 PRIMARY KEY(未定义约束名的场景)
ALTER TABLE 表 DROP CONSTRAINT 列名

4.2.5 FOREIGN KEY(外键)

一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。

FOREIGN KEY 约束用于预防破坏表之间连接的行为。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

--创建表时增加约束 FOREIGN KEY
CREATE TABLE 表名
(
列1 类型(长度) PRIMARY KEY,
列2 类型(长度),
列3 类型(长度) FOREIGN KEY REFERENCES 外键关联的表名(外键关联的表字段)
);

--创建表时,如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束
CREATE TABLE 表名
(
列1 类型(长度) PRIMARY KEY,
列2 类型(长度),
列3 类型(长度),
CONSTRAINT 约束名 FOREIGN KEY (当前表的字段)
REFERENCES 外键关联的表名(外键关联的表字段)
);

--修改表时,增加约束 FOREIGN KEY (单列约束的情况)
ALTER TABLE 表
ADD FOREIGN KEY (当前表的字段)
REFERENCES 外键关联的表名(外键关联的表字段);

--修改表时,如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束(多列约束的情况)
ALTER TABLE 表
ADD CONSTRAINT 约束名 FOREIGN KEY (当前表的字段)
REFERENCES 外键关联的表名(外键关联的表字段);

--删除约束 FOREIGN KEY(有约束名的场景)
ALTER TABLE 表 DROP CONSTRAINT 约束名

--删除约束 FOREIGN KEY(未定义约束名的场景)
ALTER TABLE 表 DROP CONSTRAINT 列名

4.2.6 CHECK(校验)

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

--创建表时增加约束 CHECK
CREATE TABLE 表名
(
列1 类型(长度) PRIMARY KEY,
列2 类型(长度),
列3 类型(长度) CHECK (校验条件,如:列3>0)
);

--创建表时,如需命名 CHECK 约束,并定义多个列的 CHECK 约束
CREATE TABLE 表名
(
列1 类型(长度) PRIMARY KEY,
列2 类型(长度),
列3 类型(长度),
CONSTRAINT 约束名 CHECK (校验条件1 AND 校验条件2)
);

--修改表时,增加约束 CHECK (单列约束的情况)
ALTER TABLE 表 ADD CHECK (校验条件);

--修改表时,如需命名 CHECK 约束,并定义多个列的 CHECK 约束(多列约束的情况)
ALTER TABLE 表
ADD CONSTRAINT 约束名 CHECK (校验条件1 AND 校验条件2);

--删除约束 CHECK(有约束名的场景)
ALTER TABLE 表 DROP CONSTRAINT 约束名

--删除约束 CHECK(未定义约束名的场景)
ALTER TABLE 表 DROP CONSTRAINT 列名

4.2.7 DEFAULT (默认值)

--创建表时增加约束 DEFAULT
CREATE TABLE 表名
(
列1 类型(长度) PRIMARY KEY,
列2 类型(长度),
列3 类型(长度) DEFAULT 默认值
);

--修改表时,增加约束 DEFAULT  (单列约束的情况)
ALTER TABLE 表 MODIFY 列 DEFAULT 默认值

--删除约束 DEFAULT
ALTER TABLE 表
ALTER COLUMN 列 DROP DEFAULT


Oracle SQL(三)

原文地址:https://www.cnblogs.com/cy-8593/p/12559298.html

时间: 2024-10-10 11:04:11

Oracle SQL(三)的相关文章

Oracle Sql三种连接方式

Oracle执行计划详解 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1) 全表扫描(Full Table Scans, FTS) 2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup) 3)索引扫

ORACLE SQL单行函数(三)【weber出品必属精品】

16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED CHINESE'_CHINA.AL32UTF8 ---修改成简体中文+地区+字符集 source .bash_profile ---让环境变量生效 [[email protected] ~]$ sqlplus scott/tiger SQL*Plus: Release 10.2.0.5.0 - Pr

Oracle SQL 经典查询练手第三篇

Oracle SQL 经典查询练手第三篇 本文分享的是Oracle SQL的经典查询第三篇,仅仅是作者自己的见解,如有问题,希望您给出建议或者方法.同时,欢迎广大读者们补充,如果您有经典的查询方式也可以拿出来我们共同分享,共同成长,共同进步. 本计算机上使用的是Oracle 11.2.0版本,使用scott用户登陆.使用的是系统自带的表. 表结构: describe employees; describe departments; describe locations; select *from

Oracle SQL性能优化

转载自:http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection ta

Oracle学习-Power Designer、visio 2003、Oracle sql developer、OEM、expdp

Oracle的体系太庞大了.对于刚開始学习的人来说,难免有些无从下手的感觉. 经过一学期的学习对Oracle学习有了一些深入的了解,由于之前学习过Oracle的一些主要的知识.所以学习起来上手比較快一点. 这次Oracle项目让我又一次对Oracle的基本知识进行了运用,而且对软件project也有了新的认识.从需求分析.概念结构设计.逻辑结构设计.物理结构设计.数据库的建立和測试.数据库执行和维护. 尽管说数据库设计的周期比較长将近用了三周左右,可是每一步做的还是非常认真的对待.我选择的是舰队

Oracle SQL 调优健康检查脚本

Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性能问题的有力保证. 在CBO时代,一个SQL的执行计划是多样的.影响执行计划的因素也从过去RBO时代的SQL书写规则变为综合性因素.这为我们生成更加优秀执行计划提供了基础,同时也给我们进行调优带来的很多麻烦. 目前我们通常的做法,是通过AWR报告或者调试手段,发现某某SQL有问题,之后从Librar

Oracle学习(三):单行函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --字符函数 SQL> --字符串的转换 SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写 2 from dual; SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符 SQL> select substr('Hello World',4) from dual; SQL&

oracle sql优化

第一掌 避免对列的操作 任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数.计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数. 例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢: select * from record where  substrb(CardNo,1,4)='5378'(13秒) select * from record where  amount/30< 1000(11秒) select * from recor

Oracle SQL执行计划基线总结(SQL Plan Baseline)

一.基础概念 Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PROFILE的改进版本,基本上它的主要作用可以归纳为如下两个: 1.稳定给定SQL语句的执行计划,防止执行环境或对象统计信息等等因子的改变对SQL语句的执行计划产生影响! 2.减少数据库中出现SQL语句性能退化的概率,理论上不允许一条语句切换到一个比已经执行过的执行计划慢很多的新的执行计划上! 注意: