oracle中constraint用法
oracle中constraint用法
Oracle中Constraint用法
在Oracle数据库中,Constraint(约束)是用于限制表中数据的完整性的规则。它可以帮助我们保持数据的准确性和一致性。下面是一些常用的Constraint用法。
1. NOT NULL Constraint(非空约束)
NOT NULL约束用于确保某一列的值不为空。当试图插入或更新该列中的值时,如果为空,则会触发一个错误。
示例:
CREATE TABLE students (
id NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
age NUMBER
);
2. UNIQUE Constraint(唯一约束)
UNIQUE约束用于确保某一列中的值是唯一的,即不重复。这可以用于避免重复数据的插入。
示例: CREATE TABLE employees (
id NUMBER PRIMARY KEY,
email VARCHAR2(50) UNIQUE,
phone VARCHAR2(20),
...
);
3. PRIMARY KEY Constraint(主键约束)
PRIMARY KEY约束用于定义一列或一组列作为表的主键,主键的值在表中必须是唯一的,并且不能为空。
示例:
CREATE TABLE customers (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
email VARCHAR2(50),
...
);
4. FOREIGN KEY Constraint(外键约束)
FOREIGN KEY约束用于定义与其他表之间的关联关系,确保数据的一致性。一个表的外键关联到另一个表的主键。
示例:
CREATE TABLE orders (
id NUMBER PRIMARY KEY, customer_id NUMBER,
...
CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id)
REFERENCES customers(id)
);
5. CHECK Constraint(检查约束)
CHECK约束用于限制一列中的值必须满足特定的条件。如果条件为假,则插入或更新操作会触发错误。
示例:
CREATE TABLE products (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
price NUMBER,
...
CONSTRAINT chk_products_price CHECK (price > 0)
);
6. DEFAULT Constraint(默认约束)
DEFAULT约束用于在插入数据时为列提供默认值,如果插入语句未指定列的值,则会使用默认值。
示例: CREATE TABLE orders (
id NUMBER PRIMARY KEY,
date_ordered DATE DEFAULT SYSDATE,
...
);
以上是Oracle中一些常用的Constraint用法。它们可以帮助我们确保数据的完整性和一致性,提高数据库的可靠性和性能。
7. ENABLE/DISABLE Constraint(启用/禁用约束)
ENABLE和DISABLE关键字可以用来启用或禁用约束。这可以在需要时临时禁用约束,进行数据操作,并在操作完成后重新启用约束。
示例:
-- 禁用约束
ALTER TABLE employees
DISABLE CONSTRAINT employees_salary_check;
-- 启用约束
ALTER TABLE employees
ENABLE CONSTRAINT employees_salary_check;
8. CASCADE Constraint(级联约束)
CASCADE关键字用于当删除或更新主表的记录时,级联更新或删除相关联的外键表中的记录。
示例: -- 创建表时定义级联删除外键约束
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
department_id NUMBER,
...
CONSTRAINT fk_employees_departments
FOREIGN KEY (department_id)
REFERENCES departments(id)
ON DELETE CASCADE
);
-- 更新主表记录时级联更新外键表
UPDATE departments
SET id = 5
WHERE id = 1;
-- 删除主表记录时级联删除外键表
DELETE FROM departments
WHERE id = 5;
9. NOVALIDATE Constraint(无效约束)
NOVALIDATE关键字用于创建约束时不执行验证操作,可以加快创建表的速度。但是需要注意,这可能会导致数据完整性不被强制执行。
示例: -- 创建唯一约束时使用NOVALIDATE
ALTER TABLE employees
ADD CONSTRAINT unique_email
UNIQUE (email)
NOVALIDATE;
10. DEFERRABLE Constraint(延迟约束)
DEFERRABLE关键字用于在事务执行时,暂时推迟约束的检查,可以在事务结束时进行检查。这对于需要在事务中更新多个表时,确保数据的完整性非常有用。
示例:
-- 创建延迟检查的外键约束
ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers(id)
DEFERRABLE INITIALLY DEFERRED;
以上是更高级的Constraint用法。它们提供了更灵活的数据约束功能,可以根据实际需求进行配置,以实现更精确的数据管理。
Oracle中常用查询用户、角色、权限等SQL
Oracle中常⽤查询⽤户、⾓⾊、权限等SQL
连带表间的外键关系⼀起删除所有某个⽤户下的所有表:SELECT 'DROP TABLE '||TNAME||' CASCADE CONSTRAINT ;' FROM DBA_OBJECTS FROM DBA_OBJECTS WHERE
OWNER='YOUR_USER' AND OBJECT_TYPE='TABLE'
然后将选出的结果粘贴到SQLPLUS⾥执⾏
1.查看所有⽤户:
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看⽤户或⾓⾊系统权限(直接赋值给⽤户或⾓⾊的系统权限):
select * from dba_sys_privs;
select * from user_sys_privs; (查看当前⽤户所拥有的权限)
3.查看⾓⾊(只能查看登陆⽤户拥有的⾓⾊)所包含的权限
sql>select * from role_sys_privs;
4.查看⽤户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
5.查看所有⾓⾊: select * from dba_roles;
6.查看⽤户或⾓⾊所拥有的⾓⾊:
select * from dba_role_privs;
select * from user_role_privs;
7.查看哪些⽤户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS
8.SqlPlus中查看⼀个⽤户所拥有权限
SQL>select * from dba_sys_privs where grantee='username'; 其中的username即⽤户名要⼤写才⾏。
第四章理论课数据库对象
《Oracle数据库应用 》理论课
数据库对象
本章技能目标
使用同义词
使用序列
创建视图
创建索引
1. 数据库对象
Oracle 数据库对象又称模式对象。数据库对象是逻辑结构的集合,最基本的数据库对象是表。其他数据库
对象包括:同义词,序列,视图,索引。下面我们依次讲解这几个数据库对象的使用。
2. 同义词
同义词是数据库对象的一个别名,这些对象可以是表,视图,序列,过程,函数,程序包,甚
至其它同义词,通过使用同义词,用户可以访问其它模式的数据库对象而无需指定模式前缀,
例如用户USER1要访问用户USER2的表EMP,必须使用USER2.EMP,那么USER1就可以使
用同义词像访问自己的表一样引用USER2.EMP了。
同义词有以下用途:
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
为分布式数据库德远程对象提供了位置透明性
同义词允许应用程序访问数据库对象,不论那个用户或哪个数据库拥有该对象。但是同义词不
能代替权限,在使用同义词之前确保用户已得到访问对象的权限。
可以通过同义词执行SELECT,INSERT,UPDATE,DELETE,LOCK TABLE ,GRANT和REVOKE
等语句。同义词只是表的一个别名,因此对它的操作都会影响到表。
同义词共有两种类型:
公有同义词。
私有同义词。
2.1 私有同义词和公有同义词 第4章 数据库对象
- 2 - 2
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
要在自身的模式创建私有同义词,用户必须拥有CREATE SYNONYM 系统权限。要在其
它用户模式的创建私有同义词,用户必须CREATE ANY SYNONYM系统权限.。
创建私有同义词语法如下: Create [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name;
oracle操作常见错误
1.[Err] ORA-02438: Column check constraint cannot reference other columns
ORA-02438: 列检查约束条件无法引用其它列
--通常可能是constraint 拼写错误
2. [Err] ORA-02250: missing or invalid constraint name
约束条件名缺失或者无效。
比如:
alter table tbl_school
add s_level number(7) constraint unique; //错误的
====add s_level number(7) unique; 正确的
4. [Err] ORA-01861: literal does not match format string
ORA-01861: 文字与格式字符串不匹配
比如:
insert into tbl_school(id,s_name,address,establish_time,style)
values(1,'清华','北京','1976-05-05','理');
日期的输入,要有固定的格式
=====values(1,'清华','北京',to_date('1976-05-01','rrrr-mm-dd'),'理');
5:select index_name,table_name from user_indexes
Where table_name=’s_emp’;
提示错误:为选定行。
‘ ’里面的就变成了字符串,是区分大小写的,
select index_name,table_name from user_indexes
Where table_name=’S_EMP’;
6:Ora-02290【】违反检查约束条件
oracle 10g中unique与index的问题
oracle 10g中unique与index的问题
create table test
(
x integer,
y integer,
z integer
);
alter table test add constraint primary key (x); --产生一个约束,并产生一个同名索引
create unique index index01 on test(x,y);
--create unique index index02 on test(x,y); --不允许完全相同的索引,即使索引名称不同
create unique index index03 on test(y,z);
create unique index index04 on test(z,y); --index04 是与index03互不相同的索引
alter table test add constraint cons01 unique(x,y,z) ; --产生一个约束,并自动产生一个名为cons01 的UNIQUE索引
alter table test add constraint cons01 unique(x,y) ; --产生一个约束,但因与index01
重复(自动产生的索引不区分顺序),因此不能自动产生索引
alter table test add constraint cons01 unique(y,x) ; --产生一个约束,但因与index01
重复,因此不能自动产生索引
--create unique index cons01 on test(x,y); --不能执行,因为索引cons01 已经被约束cons01 自动创建的索引占用
alter table test add constraint cons012 check (x>100);
alter table test add constraint cons013 check (x>100); --check可以内容完全相同
oracle中查询用户表索引视图创建语句
oracle中查询⽤户表索引视图创建语句
不多说,直接上⼲货
1、查询当前⽤户下表的创建语句
select dbms_metadata.get_ddl('TABLE','ux_future') from dual;
2、查询其他⽤户下表的创建语句
select dbms_metadata.get_ddl('TABLE','ux_future','Admin') from dual;
3、查询表的index
select index_name,index_type,table_name from user_indexes where table_name = 'ux_future';
4、查询当前⽤户下索引的创建语句
select dbms_metadata.get_ddl('INDEX','ux_future_xx') from dual;
5、查询其他⽤户下索引的创建语句
select dbms_metadata.get_ddl('INDEX','ux_future_xx','Admin') from dual;
6、查询当前⽤户下视图的创建语句
select dbms_metadata.get_ddl('VIEW','ux_future') from dual;
7、查询其他⽤户下视图的创建语句
select dbms_metadata.get_ddl('VIEW','ux_future','Admin') from dual;
8、查询表的约束
select owner,table_name,constraint_name,constraint_tpye from user_cinstraints where table_name = 'ux_future';
9、查询创建主键的语句
select dbms_metadata.get_ddl('CONSTRAINT','ux_future_xp') from dual;
10、查询创建外键的语句
ORACLE数据库中查看所有表的外键信息SQL
ORACLE数据库中查看所有表的外键信息SQL
ORACLE 数据库中查看所有表的外键信息SQL
a.OWNER "外键拥有者",
a.Table_Name "外键表",
c.Column_Name "外键列",
b.OWNER "主键拥有者",
b.Table_Name "主键表",
d.Column_Name "主键列",
c.Constraint_Name "外键名",
d.Constraint_Name "主键名"
user_Constraints a,
user_Constraints b,
user_Cons_Columns c,-- 外键表
user_Cons_Columns d -- 主键表
a.r_Constraint_Name = b.Constraint_Name
a.Constraint_Type = 'R'
b.Constraint_Type = 'P'
a.r_Owner = b.OWNER
a.Constraint_Name = c.Constraint_Name
b.Constraint_Name = d.Constraint_Name
a.OWNER = c.OWNER
a.Table_Name = c.Table_Name
b.OWNER = d.OWNER
b.Table_Name = d.Table_`Name`
a.Table_Name ;
如何查询Oracle中用户
如何查询Oracle中所有用户信息
如何查询Oracle中所有用户信息
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 1.查看所有用户:
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select * from dba_sys_privs;
select * from user_sys_privs; (查看当前用户所拥有的权限)
3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sql>select * from role_sys_privs;
4.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
5.查看所有角色: select * from dba_roles;
6.查看用户或角色所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS
8.SqlPlus中查看一个用户所拥有权限 40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
quartz框架 oracle建表
Quartz框架是一个开源的任务调度框架,它可以让我们在Java应用程序中实现定时任务的
调度和执行。在使用Quartz框架时,我们需要在数据库中创建相应的表来存储任务的相关
信息。本文将介绍如何在Oracle数据库中创建Quartz框架所需的表。
一、Quartz框架的表结构
Quartz框架需要在数据库中创建以下表:
1. QRTZ_JOB_DETAILS:存储任务的详细信息,包括任务名称、任务所在的组、任务类名
等。
2. QRTZ_TRIGGERS:存储触发器的详细信息,包括触发器名称、触发器所在的组、触发
器类型等。
3. QRTZ_CRON_TRIGGERS:存储Cron表达式触发器的详细信息,包括Cron表达式、时
区等。
4. QRTZ_SIMPLE_TRIGGERS:存储简单触发器的详细信息,包括触发器的重复次数、间
隔时间等。
5. QRTZ_TRIGGERS_HISTORY:存储触发器的历史信息,包括触发时间、完成时间、执
行状态等。
6. QRTZ_BLOB_TRIGGERS:存储Blob类型的触发器。
7. QRTZ_CALENDARS:存储日历信息,包括工作日、非工作日等。
8. QRTZ_PAUSED_TRIGGER_GRPS:存储暂停的触发器组。
9. QRTZ_LOCKS:存储Quartz框架的锁信息。
二、在Oracle数据库中创建Quartz框架所需的表
1. 创建用户
在Oracle数据库中,我们需要先创建一个用户来存储Quartz框架所需的表。以sysdba身份登录Oracle数据库,在SQL Plus中执行以下命令:
CREATE USER quartz IDENTIFIED BY quartz;
GRANT CONNECT, RESOURCE, DBA TO quartz;
这里创建了一个名为quartz的用户,并授予了CONNECT、RESOURCE和DBA权限。
2. 创建表空间
在创建表之前,我们需要先创建一个表空间。在SQL Plus中执行以下命令:
oracle modify用法 -回复
oracle modify用法 -回复
Oracle Modify 用法
Oracle Modify 是 Oracle 数据库中的一个关键字,用来修改已存在的数据库表或视图的结构和数据。在本文中,我们将逐步探讨 Oracle Modify
的用法和示例。
在使用 Oracle 数据库进行开发和管理时,经常需要对已存在的表或视图进行修改。这可能是为了增加新的列,删除现有的列,修改数据类型,更新约束条件,或者进行其他结构和数据的更改。Oracle Modify 提供了一种方便和高效的方法来实现这些需求。
首先,让我们了解一些基本的 Oracle Modify 语法。下面是一个典型的
Oracle Modify 语句的基本结构:
ALTER TABLE table_name
MODIFY (column_name1 data_type1 constraint1,
column_name2 data_type2 constraint2,
...
column_nameN data_typeN constraintN);
在这个语句中,你需要指定表名(table_name)以及需要修改的列名、数据类型和约束条件。可以一次性修改多个列。
现在让我们通过一个实际的示例来说明 Oracle Modify 的用法。假设我们有一个名为 "employees" 的表,其中包含 "employee_id"、"first_name" 和 "last_name" 等列。我们想要将 "first_name" 和
"last_name" 列的数据类型从 VARCHAR2 改为 NVARCHAR2。
以下是对应的 Oracle Modify 语句:
ALTER TABLE employees
MODIFY (first_name NVARCHAR2(100),
last_name NVARCHAR2(100));
oracle删除表字段和oracle表增加字段
oracle删除表字段和oracle表增加字段
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….);
修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],….);
删除字段的语法:alter table tablename drop (column);
添加、修改、删除多列的话,⽤逗号隔开。
使⽤alter table 来增加、删除和修改⼀个列的例⼦。
创建表结构:create table test1
(id varchar2(20) not null);
增加⼀个字段:
复制代码 代码如下:
alter table test1
add (name varchar2(30) default ‘⽆名⽒' not null);
使⽤⼀个SQL语句同时添加三个字段:
复制代码 代码如下:
alter table test1
add (name varchar2(30) default ‘⽆名⽒' not null,
age integer default 22 not null,
has_money number(9,2)
);
修改⼀个字段
复制代码 代码如下:
alter table test1
modify (name varchar2(16) default ‘unknown');
另:⽐较正规的写法是:
复制代码 代码如下:
-- Add/modify columns
alter table TABLE_NAME rename column FIELD_NAME to NEW_FIELD_NAME;
删除⼀个字段
复制代码 代码如下:
alter table test1
drop column name;
需要注意的是如果某⼀列中已经存在值,如果你要修改的为⽐这些值还要⼩的列宽这样将会出现⼀个错误。
