Skip to content

Oracle

数据库和数据表的基本操作

创建数据表

创建普通Oracle数据表

sql
create table <表名>
(
	字段名1 数据类型 [列级别约束条件] [默认值],
    字段名2 数据类型 [列级别约束条件] [默认值],
    ...
    [表级别的约束条件]
);
sql
/* 举个例子 */
create table db_1
(
	id		number(11),
	name	varchar(25),
	sex		char(2),
	salary	number(9, 2)	--精度9位,小数点后占2位,小数点前占7位
);

desc	db_1;		--查看表的结构

创建带有主键约束的表 PRIMARY KEY

sql
/* 举个例子 */
create table db_1
(
	id		number(11) primary key,		--在定义列的同时指定主键
	name	varchar(25),
	sex		char(2),
	salary	number(9, 2),
    /* 定义完所有列后指定主键 */
    --primary key(id)			单字段主键
    --primary key(name, sex)	多字段联合主键
);

如果创建的时候没有添加主键约束,可以通过alter添加主键约束。

如果已创建主键约束,也可以通过alter删除主键约束

sql
alter table 表名
add constraints 约束名称 primary key(字段名称);

alter table 表名
drop constraints 约束名称;
sql
alter table tb_1
add constraints pk_id primary key(id);

alter table tb_1
drop constraints pk_id;

创建带有外键约束的表 FOREIGN KEY

通过定义froeign key约束来创建外键,一个表可以有一个或者多个外键。外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键值必须等于另一表中主键的某个值。

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表是主表。

从表(自表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表是从表。

sql
[constraint<外键名>]foreign key 字段名1[,字段名2,...]
references<主表名> 主键列1[,主键列2,...]
sql
create table tb_dept (
	id			number(11) primary key,
    name		varchar2(22) not null,
    location 	varchar2(50)
);
sql
create table tb_employee (
	id			number(11) primary key,
    name		varchar2(22) not null,
    deptId		number(11),
    salary		number(9, 2),
    constraint fk_dept foreign key(deptId) references tb_dept(id)
);

上述语句执行成功后,在表tb_employee上添加了名为fk_dept的外键约束,外键字段值为deptId,其依赖于表tb_dept的主键id

修改数据表的时候添加外键约束

sql
alter table 表名
add constraints 约束名称 foreign key(外键约束的字段名称)
references 表名(字段名称)
on  delete cascade;
sql
alter table tb_employee
add constraints fk_dept foreign key(depId)
references tb_dept(id)
on  delete cascade;

移除外键约束

sql
alter table 数据表名称
drop constraints 约束名称
sql
alter table tb_employee
drop constraints fk_dept;

创建带有非空约束的表 NOT NULL

非空约束是指字段的值不能为空值,这个空值(或NULL)不同于零、空白、或长度为0的字符串(如""),NULL 的意思是没有输入。

sql
字段名 数据类型 not null
sql
create table tb_6(
	id NUMBER(11) primary key,
	name varchar(22),
	sex char(2) not null
);

修改表时添加非空约束

sql
alter table 数据表名称 modify 字段名称 not null;	--添加非空约束
alter table 数据表名称 modify 字段名称 null;		--移除非空约束

创建带有唯一性约束的表 UNIQUE

唯一性约束用于强制实施列表集中值的唯一性。根据约束条件,要求该列的值唯一,允许为空,但只能出现一个空值。另外、主键也强制实行唯一性,但主键不允许NULL作为唯一的空值。

sql
字段名 数据类型 unique
sql
create table tb_8(
	id number(10) primary key,
	name varchar(10) unique,		-- 第一种
	sex varchar(2) not null,
	-- constraint uc_name unique(name)		--第二种
);


alter table 数据表名称 add constraint 约束名称 unique(字段名称);	--添加唯一性约束
alter table 数据表名称 drop constraints 约束名称;	-- 移除唯一性约束

创建带有检查约束的表 CHECK

唯一性约束用于强制实施列表集中值的唯一性。根据约束条件,要求该列的值唯一,允许为空,但只能出现一个空值。另外、主键也强制实行唯一性,但主键不允许NULL作为唯一的空值。

sql
字段名 数据类型 unique
sql
create table tb_8(
	id number(10) primary key,
	name varchar(10) unique,		
	sex varchar(2) not null,
    age gender varchar(2)
	constraint chk_gender check(gender='男' or gender='女')		--第二种
);


alter table 数据表名称 add constraint 约束名称 unique(字段名称);	--添加唯一性约束
alter table 数据表名称 drop constraints 约束名称;	-- 移除唯一性约束

查看数据表的结构

sql
describe 表名;		-- 也可以简写desc
desc 表名

修改数据表

sql
alter table 旧表名 rename to 新表名;					   -- 修改数据表名
alter table 表名 rename column 旧字段名 to 新字段名;		-- 修改数据表字段名
alter table 表名 add 新字段名 数据类型 not null;			-- 添加数据字段
alter table 表名 modify 字段名 数据类型;					-- 修改字段类型

删除数据表与数据库

sql
drop table 表名;		-- 删除没有被关联的表
-- 有外键关联的表需要先删除关联的外键约束,再删除该表
-- Oracle删除数据库删除账号就行

数据类型和运算符

Oracle 数据类型

类型描述
DATE日期(日-月-年),DD-MM-YY(HH-MI-SS),用来存储日期和时间,取值范围是公元前4712年到公园9999年12月31
TIMESTAMP日期(日-月-年),DD-MM-YY(HH-MI-SS:FF3),用来存储日期和时间,相比于date显示时间更精确,date精确到秒,timestamp精确到小数秒。timestamp存放日期和时间还能显示上午、下午和时区。
sql
create table tb_emp4 (
	id number(10),
	birthday date
)

 select sysdate from dual;		-- 查看系统时间
 
 insert into tb_emp4(birthday) values('16-12月-2020');		-- 插入时间
 insert into tb_emp4 values(SYSDATE);		-- 插入系统时间
 
 alter session set nls_date_format='yyyy-mm-dd';	-- 修改时间的默认格式

常见运算符

查询数据表中的数据

基本查询语句

sql
在Oracle中查看所bai有的表: select * from tab/dba_tables/dba_objects/cat;
看用户建立的表 : select table_name from user_tables; //
当前用户的表 select table_name from all_tables; //
所有用户的表 select table_name from dba_tables; //包括系统表
可以查询出所有的用户表索引 select * from user_indexes //

单表查询

使用聚合函数查询

多表之间的连接查询

带有附加条件的子查询

带有正则表达式查询

数据的基本操作

插入数据

更新数据

删除数据

视图的基本操作

创建视图

查看视图

修改视图

更新视图

删除视图

限制视图的数据操作

游标的基本操作

显示游标的使用和属性

隐式游标的使用和属性

Oracle触发器的应用

创建触发器

查看触发器

修改触发器

删除触发器

Oracle函数的应用

数学函数

字符串函数

日期和时间函数

转换函数

Oracle的表空间管理

了解表空间

表空间的类型

创建表空间

查看表空间

表空间的管理

数据文件的管理

Oracle的事物与锁

事务管理

锁的应用

Oracle的锁机制主要是执行对多个活动事务的并发控制,他可以控制多个用户对同一数据进行操作,使用锁机制,可以解决数据库的并发问题,从而保证数据库的完整性和一致性。

如果不使用锁机制,对数据的并发操作会带来下面一些问题:

脏读:当一个事务读取的记录式另一个事务的一部分时,如果第一个事务正常完成,就没什么问题。如果此时第一个事务未完成,就产生了脏读。

幻读:

非重复性读取:如果一个事务不止一次读取相同 的记录,但在两次读取中间有另一个事务刚好修改了数据,则两次读取的数据将出现差异。

丢失更新:一个事务更新了数据库之后,另一个事务再次对数据库更新,此时系统只能保留最后一个数据的修改。

在数据库最中有两种基本的锁:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。

  • 排它锁:当数据对象被加上排它锁时,其他事务不能对它读取和修改。
  • 共享锁: 加了共享锁的数据对象可以被其他事务读取,但不能修改。

如果事务T获得了数据对象的排它锁,则事务T可以对数据对象读取和修改,其他事务不可读取和修改。

如果事务T获得了数据对象的共享锁,则所有事务只能读取,不能修改。

在Oracle中最重要的是DML锁,DML锁的目的在于保证并发情况下的数据完整性。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级所,TX锁彻称为事务锁或行级锁。

死锁的发生过程

Oracle数据库安全管理

用户账户管理

用户权限管理

数据库角色管理

概要文件管理

资源限制与口令管理

锁定与解锁用户

Oracle控制文件与日志管理

了解和管理控制文件

了解和管理日志文件

Oracle的数据备份与还原

数据的备份与还原

数据表的导出与导入

Oracle数据库的性能优化

性能优化原则

优化Oracle内存

优化查询操作

优化数据库结构

优化Oracle服务器

Released under the MIT License.