Oracle 入门学习
Oracle 官网
官网下载网址 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
Database Control URL
系统用户
- sys,system
- sysman
- scott - 默认密码是 tiger
使用系统用户登录
1 | [username/password][@server][as sysdba|sysoper] |
使用 system 用户登录
1 | 请输入用户名:system/root |
查看登录用户
1 | show user |
启用 scott 用户
1 | ALTER user username account unlock; |
数据字典
dba_users 系统用户
user_users 普通用户
dba_tablespaces 系统管理员级别的用户对应的表空间(表)
- SYSTEM(存储 system 用户的表、视图以及存储过程等数据库对象,称为系统表空间)
- SYSAUX(EXAMPLE 的辅助表空间)
- UNDOTBS1(存储撤销信息的,属于 UNDO 类型的表空间)
- TEMP(存储 SQL 语句处理的表和索引信息,属于临时表空间)
- USERS(存储数据库用户创建的数据库对象,永久性表空间)
- EXAMPLE(用于安装 Oracle 11g 数据库示例来使用的表空间)
user_tablespaces 普通用户对应的表空间(表)
dba_data_files 表空间文件数据字典
dba_temp_files 临时表空间文件数据字典
user_constraints 约束的数据字典
表空间
数据库的逻辑存储空间,在数据库中开辟的空间用于存储数据库中的对象。
表空间是由一个或多个数据文件构成的。
分类
- 永久表空间(存储表、视图等)
- 临时表空间(存储数据库操作过程中,中间执行的过程,执行结束后会自动释放)
- UNDO 表空间(用于保存事务所修改数据的旧值,即被修改之前的数据)
设置用户的默认/临时表空间
1 | ALTER USER username DEFAULT|TEMPORARY TABLESPACE tablespace_name; |
创建表空间/临时表空间
1 | CREATE [TEMPORARY] TABLESPACE tablespace_name TEMPFILE|DATAFILE 'xxx.dbf' SIZE xx; |
查看表空间文件具体路径
1 | SELECT file_name,tablespace_name FROM dba_data_files; |
修改表空间状态
设置联机或脱机状态
1 | ALTER TABLESPACE tablespace_name ONLINE|OFFLINE; |
设置只读或读写状态
不管是修改成只读还是读写状态,表空间的状态必须是联机状态,即 status = ONLINE。
1 | ALTER TABLESPACE tablespace_name READ ONLY|READ WRITE; |
表空间数据文件
增加数据文件
1 | ALTER TABLESPACE tablespace_name ADD DATAFILE 'xx.dbf' SIZE xx; |
删除数据文件
不能删除表空间创建时第一个数据文件,如果要删除需要把整个表空间删除。
1 | ALTER TABLESPACE tablespace_name DROP DATAFILE 'filename.dbf'; |
删除表空间
1 | DROP TABLESPACE tablespace_name [INCLUDING CONTENTS]; |
表
数据类型
字符型
- CHAR(N)
MAX(N) = 2000 - NCHAR(N)
MAX(N) = 1000
支持按照 unicode 编码方式来存放数据的,一般情况下用 NCHAR 来存储汉字比较多的 - VARCHAR2(N)
MAX(N) = 4000
可变长度的数据类型 - NVARCHAR2(N)
MAX(N) = 2000
支持按照 unicode 编码方式来存放数据的
数值型
- NUMBER(p,s)
p 有效数字;s 小数点后的位数
eg: NUMBER(5,2) 有效数字5位,保留2位小数,如123.45 - FLOAT(N)
主要用来存储二进制数据的,能表示的二进制 1-126位
日期型
- DATE
DATE 类型表示范围:
公元前4712年1月1日到公元9999年12月31日 可以精确到秒 - TIMESTAMP
时间戳类型,可以精确到小数秒
其他类型
- BLOB
可以存放4G的数据,以二进制的形式来存放 - CLOB
可以存放4G的数据,以字符串的形式来存放
管理表
创建表
1 | CREATE TABLE table_name |
添加字段
1 | ALTER TABLE table_name ADD column_name datatype; |
更改字段数据类型
1 | ALTER TABLE table_name MODIFY column_name datatype; |
删除字段
1 | ALTER TABLE table_name DROP COLUMN column_name; |
修改字段名
1 | ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name; |
修改表名
1 | RENAME table_name TO new_table_name; |
删除表
删除表中数据
1 | TRUNCATE TABLE table_name; |
删除表结构和表中数据
1 | DROP TABLE table_name; |
操作表数据
添加数据
如果把表中所有字段都插入数据,那么 table_name 后的列名可以省略,同时 value 值需要与每个字段的数据类型一一匹配。
1 | INSERT INTO table_name(column1,column2,...) VALUES(value1,value2,...); |
复制数据
在创建表时复制表数据
1 | CREATE TABLE table_new AS SELECT column1,... | * FROM table_old; |
在添加数据时复制表数据
1 | INSERT INTO table_new [(column1,...)] SELECT column1,... | * FROM table_old; |
修改数据
1 | UPDATE table_name SET column1=value1,... [WHERE conditions]; |
删除数据
1 | DELETE FROM table_name [WHERE conditions]; |
约束
非空约束
在创建表时设置非空约束
1 | CREATE TABLE table_name( |
在修改表时添加非空约束
1 | ALTER TABLE table_name MODIFY column_name datatype NOT NULL; |
在修改表时去除非空约束
1 | ALTER TABLE table_name MODIFY column_name varchar2(20) NULL; |
主键约束
在创建表时设置主键约束
一张表只能设计一个主键约束。
主键约束可以由多个字段构成(联合主键或复合主键)。
1 | CREATE TABLE table_name( |
1 | CONSTRAINT constraint_name PRIMARY KEY(column_name1,...); |
在修改表时添加主键约束
1 | ADD CONSTRAINT constraint_name PRIMARY KEY(column_name1,...); |
更改约束的名称
1 | RENAME CONSTRAINT old_name TO new_name; |
删除主键约束
禁用主键约束
1 | DISABLE|ENABLE CONSTRAINT constraint_name; |
删除主键约束
1 | DROP CONSTRAINT constraint_name; |
外键约束
在创建表时设置外键约束
列级外键约束
1 | CREATE TABLE table1( |
table1 一般称为从表,table2 一般称为主表,外键约束一般称为主从表的关系。
设置外键约束时,主表的字段必须是主键。
主从表中相应的字段必须是同一个数据类型。
从表中外键字段的值必须来自主表中的相应字段的值,或者为 null 值。
表级外键约束
1 | CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE]; |
在修改表时设置外键约束
1 | ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE]; |
删除外键约束
禁用外键约束
1 | DISABLE|ENABLE CONSTRAINT constraint_name; |
删除外键约束
1 | DROP CONSTRAINT constraint_name; |
唯一约束
在创建表时设置唯一约束
唯一约束和主键约束的区别:
主键字段值必须是非空的,唯一约束允许有一个空值。
主键在每张表中只能有一个,唯一约束在每张表中可以有多个。
列级唯一约束
1 | CREATE TABLE table_name( |
表级唯一约束
1 | CONSTRAINT constraint_name UNIQUE(column_name); |
在修改表时设置唯一约束
1 | ADD CONSTRAINT constraint_name UNIQUE(column_name); |
删除唯一约束
禁用唯一约束
1 | DISABLE|ENABLE CONSTRAINT constraint_name; |
删除唯一约束
1 | DROP CONSTRAINT constraint_name; |
检查约束
在创建表时设置检查约束
列级检查约束
1 | CREATE TABLE table_name( |
表级检查约束
1 | CONSTRAINT constraint_name CHECK(expressions); |
在修改表时设置检查约束
1 | ADD CONSTRAINT constraint_name CHECK(expressions); |
删除检查约束
禁用检查约束
1 | DISABLE|ENABLE CONSTRAINT constraint_name; |
删除检查约束
1 | DROP CONSTRAINT constraint_name; |
查询语句
基本查询语句
1 | SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions]; |
SQL*PLUS 设置
设置用户名
1 | COLUMN column_name HEADING new_name; |
设置结果格式
1 | COLUMN column_name FORMAT dataformat; |
注:字符类型只能设置显示的长度。
清除格式
1 | COLUMN column_name CLEAR; |
给字段设置别名
1 | SELECT column_name AS new_name,... FROM table_name; |
注:AS 可以省略,有空格隔开原来的字段名和新字段名即可。
运算符和表达式
算术运算符 +, -, *, /
1 | SELECT id,username,salary+200 FROM users; |
比较运算符 >, >=, <, <=, =, <>
1 | SELECT username FROM users WHERE salary>800; |
比较运算符的优先级高于逻辑运算符
逻辑运算符 and, or, not
1 | SELECT username FROM users WHERE salary>800 AND salary<>1888.5; |
逻辑运算符的优先级:按 not、and、or 的顺序依次递减
模糊查询
通配符的使用(_ , %)
一个 _ 只能代表一个字符
% 可以代表0到多个任意字符
1 | SELECT * FROM users WHERE username like 'a%'; |
范围查询
1 | SELECT * FROM users WHERE salary>=800 AND salary<=2000; |
结果排序
1 | SELECT ... FROM ... [WHERE ...] ORDER BY column1 DESC/ASC, ... |
CASE … WHEN 语句的使用
1 | CASE column_name WHEN value1 THEN result1, ... [ELSE result] END |
1 | CASE WHEN column_name=value1 THEN result1, ... [ELSE result] END |
decode 函数的使用
1 | decode(column_name, value1, result1, ..., defaultvalue) |