Oracle 12c连接PDB时listener和tnsnames.ora配置

Oracle 12c连接PDB时listener和tnsnames.ora配置
Oracle 12c连接PDB时listener和tnsnames.ora配置

Oracle 12c连接PDB时,listener和tnsnames.ora配置1、配置监听

首先要明确,所有的PDB都使用1个监听,配置多个实际上启动时也只有第1个有意义。

LISTENER =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )

接下来使用SID_LIST_LISTENER来进行静态注册服务。

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = ora12c) #该服务是我配置的cdb信息

(SID_NAME = ora12c)

)

(SID_DESC =

(GLOBAL_DBNAME = pdborcl)#该服务是我配置的pdb信息

(SID_NAME = ora12c)

)

)

ADR_BASE_LISTENER = /opt/oracle

2、tnsnames.ora配置

观察发现,在tnsnames中配置pdb跟CDB,即原来11g的配置完全一样。这里SERVICE_NAME = pdborcl使用得是PDB的名字,可以在v$pdbs中查看。

ORA12C =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )

(CONNECT_DATA =

(SERVICE_NAME = ora12c)

)

)

pdborcl =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )

(CONNECT_DATA =

(SERVICE_NAME = pdborcl)

)

)

3、为了保险,检查下sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

这一句是为了保证优先使用TNSNAMES解析。

配置完,在PDB启动的情况下(怎么启动这里不多讲了),就可以直接连接到PDB了。(Oracle12c是没有scott用户的,我自己在PDB下面新建的)。

oracle创建表与增删改

-- 数据准备:创建工资等级表 CREATE TABLE salgrade_test ( grade NUMBER (2), lowsal NUMBER (7, 2), hisal NUMBER (7, 2) ); -- 查看工资等级表结构 DESC salgrade; -- 查看工资等级表数据 SELECT * FROM salgrade_test; -- 插入数据 INSERT INTO salgrade_test VALUES (1, 10001, 99999); INSERT INTO salgrade_test VALUES (2, 8001, 10000); INSERT INTO salgrade_test VALUES (3, 6001, 8000); INSERT INTO salgrade_test VALUES (4, 4001, 6000); INSERT INTO salgrade_test VALUES (5, 1, 4000); -- 计算员工的薪水等级 SELECT NAME, salary, grade FROM emp_test, salgrade_test WHERE emp_test.salary BETWEEN salgrade_test.lowsal AND salgrade_test.hisal; -- ------------------------------------------------------SELECT NAME, salary, grade FROM emp_test

FULL JOIN salgrade_test ON emp_test.salary BETWEEN salgrade_test.lowsal AND salgrade_test.hisal; -- 复制表:只复制结构 , 不复制数据 CREATE TABLE salgrade_copy AS ( SELECT * FROM salgrade_test WHERE 1 <> 1 ); SELECT * FROM salgrade_copy; -- 复制表:复制一部分数据----通过设置别名的方式 , 指定新表中的列名(year_sal) CREATE TABLE emp_test_copy AS ( SELECT emp_id, NAME, salary * 12 year_sal FROM emp_test WHERE dept_test_id = 10 ); SELECT * FROM emp_test_copy; -- 复制表:复制一部分数据 -- 新表中的列名 CREATE TABLE emp_count (did, emp_num) AS ( SELECT dept_test_id, COUNT (*) FROM emp_test GROUP BY dept_test_id ); SELECT * FROM emp_count; -- 创建一个同 emp 表结构相同的空表 , 将部门号为 10 的员工信息放入该表 -- 如果有一张表 emp 的数据量为一百万条 , 此时需要建立 1 张测试表只放入少量测试数据( 如 100条 ) , 执行步骤如下所示: -- 第 1 步创建一个空表 CREATE TABLE emp_copy AS (

oracle数据库的5种约束类型

oracle 数据库的 5 种约束类型 oracle 数据库数据表的 5 个约束类型: 1.主键约束 2.外键约束 3.唯一约束 4.检查约束 5. 非空约束 F 主键约束:用来唯一标示表中的一个列, 一个表中的主键约束只能有一个,但是可以在一个主键约束 中包含多个列,也称为联合约束。外键约束:用来约束两 个表中列之间的关系。唯一约束:用来唯一标示表中的 列。与主键约束不同的是,在一个数据表中可以有多个唯一约束。检查约束:用来约束表中列的输入值得范围,比如 在输入性别时,要求数据库中只能输入男或者女,就可以使用检查约束来约束该列。非空约束:约束该列一定要输入值。 ----- 创建一个带检查约束的表:使用PL/SQL 语句创建检查约束的语法如下所示:CONSTRAINT constraint_name CHECK(condition) [ 语法说明:] CONSTRAINT: 关键词constraint_name: 约束名称condition: 约束条件列如:创建BOOKINFO 表时,给图书 价格加上一个检查约束,要求图书价格在10 元到100 元之间。CREATE TABLE BOOKINFO ( BOOKID

INT, BOOKNAME CAHR, PUBLISH

char, publish varchar2(20), pubdate varchar2(20), CHECK(PRICE>=10 AND PRICE ----- 创建一个带非空约束的表: 举例 :在创建 BOOKINFO 表时,给图书名称加上一个非空约束。 CREATE TABLE BOOKINFO ( BOOKID INT NOT NULL, BOOKNAME CHAR NOT NULL, PUBLISH PUBDATE VARCHAR2(20), AUTHOR CHAR, STORE ----- 创建一个带唯一约束的表 语法格式: CONSTRAINT constraint_name UNIQUE(column_name) 【语法说明】 UNIQUE: 唯一约束的关键词 column_name: 唯一约束的名称。 举例 :创建 BOOKINFO 表时,为图书名称( BOOKNAME )列添加唯一约束 create table bookinfo ( bookid int, bookname PRICE DECIMAL, AUTHOR CHAR, STORE VARCHAR2(1), READER INT, REMARKS VARCHAR2(50), CONSTRAINT CK_PRICE ); VARCHAR2(20), PRICE DECIMAL, VARCHAR2(1), VARCHAR2(50) READER INT, REMAERKS );

Oracle 建表(一对多)代码及相关约束示例

建表(一对多)代码及相关约束 create table t_class( c_id number(3) primary key, c_name varchar2(20) not null ); create table t_stu( s_id number(5) primary key, s_name varchar2(8) not null, sex char(2) default '男', birthday date, school_age number(2) check(school_age>0), school_score number(5,2), c_id number(3), id_card char(18) unique, foreign key(c_id) references t_class(c_id) ); 附:测试数据: insert into t_class values(1,'订单班'); insert into t_class values(2,'开发班'); insert into t_class values(3,'美工班'); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (1, 'a', '男', to_date('01-01-1980', 'dd-mm-yyyy'), 24, 90, 1, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (2, 'b', '男', to_date('11-05-1981', 'dd-mm-yyyy'), 23, 80, 1, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (3, 'c', '女', to_date('19-09-1982', 'dd-mm-yyyy'), 22, 50, 1, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (4, 'd', '女', to_date('28-01-1984', 'dd-mm-yyyy'), 21, 80, 2, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD)

Oracle基础练习题及答案(表约束)

练习作业 创建表emp1,字段如下 eno char(3), ename char(6) sex char(2) age number(2) dno char(3) 并插入如下数据 1 ,TOM ,男,21 ,’001’ 2 ,JERRY ,男,21 ,’002’ 3 ,KATE ,女,21 ,’003’ 4 ,MARY ,女,21 ,’004’ 5 ,JACK ,男,21 ,’005’ i.在eno字段上创建主键约束 ii.在ename字段上创建非空约束 iii.创建检查约束判断age在18到60岁之间的男性或者age在18到55岁之间的女性iv.在dno字段上创建唯一性约束 create table emp1( eno char(3) primary key, ename char(6) not null, sex char(2), age number(2), dno char(3) unique, constraint sex_age check( ((age between18and60) and sex='男') or ((age between18and55) and sex='女')) ) insert into emp1 values('1','TOM','男',21,'001') insert into emp1 values('2','JERRY','男',21,'002');

insert into emp1 values('3','KATE','女',21,'003'); insert into emp1 values('4','MARY','女',21,'004'); insert into emp1 values('5','JACK','男',21,'005'); v.创建和emp1表字段相同的emp_bak表,将emp_bak表的eno字段与emp表的eno字段创建外键约束 create table emp_bak as select * from emp1 where1=2 alter table emp_bak add constraint v foreign key(eno) references emp1(eno); 1、请创建一个表,表名为phone,表结构如下 电话号码(PHONENUM VARCHAR2(8)) 电话费(PAY number(8,2)) 号码等级(NUMLEVEL VARCHAR2(4)) 费用日期(PAYDATE varchar2(12) create table phone ( phonenum varchar2(8), pay number(8,2), numlevel varchar2(4), paydate varchar2(12) ) 1)插入以下两条数据. 123456, 600, pt04, 20051220 888888, 900, pt05, 20051019. insert into phone values('123456',600,'pt04', '20051220'); insert into phone values('888888',900,'pt05', '20050919');

Oracle DB 使用DDL语句创建和管理表

? 对主要的数据库对象进行分类 ? 查看表结构 ? 列举列可以使用的数据类型 ? 创建简单的表 ? 说明创建表时如何创建约束条件 ? 描述方案对象如何工作 ? 数据库对象 –命名规则 ? CREATE TABLE语句: –访问另一个用户的表 – DEFAULT选项 ? 数据类型 ? 约束条件概览:NOT NULL、UNIQUE、PRIMARY KEY、 FOREIGN KEY、CHECK约束条件 ? 使用子查询创建表 ? ALTER TABLE –只读表 ? DROP TABLE语句 数据库对象 Oracle DB 可以包含多种数据结构。在数据库设计中应对每种结构加以概述,以便可在数据库开发的构建阶段创建数据库结构。 ? 表:用于存储数据 ? 视图:一个或多个表中数据的子集

? 序列:用于生成数字值 ? 索引:提高某些查询的性能 ? 同义词:给出对象的替代名称 Oracle 表结构 ? 在任何时候都可以创建表,即使用户正在使用数据库时也是如此。 ? 无需指定表的大小。表的大小最终由全部分配给数据库的空间量确定。但是,需要估计一个表将要使用的空间大小,这一点非常重要。 ? 可以联机修改表结构。 ?命名规则 表名和列名必须满足以下条件: ? 以字母开头 ? 长度为1-30 个字符 ? 只包含A-Z、a-z、0-9、_、$ 和# ? 不与同一用户拥有的其它对象重名 ? 不是Oracle Server 的保留字 应根据命名任意Oracle DB 对象的标准规则来命名数据库表和列: ? 表名和列名必须以字母开头,长度必须为1-30 个字符。 ? 名称中只能包含字符A-Z、a-z、0-9、_(下划线)、$ 和#(这两个字符是合法字符,但建议不要使用它们)。 ? 不能与同一Oracle Server 用户拥有的其它对象重名。 ? 不能是Oracle Server 的保留字。 - 还可以使用加引号的标识符来表示对象名称。加引号的标识符以双引号(“”) 开始和结束。如果使用加双引号的标识符为方案命名,那么,只要引用该对象,就必 须使用双引号。加引号的标识符可以是保留字,不过建议不要这样做。 命名准则 对于表和其它数据库对象,应使用描述性名称。 注:名称不区分大小写,例如,EMPLOYEES与eMPloyees或eMpLOYEES被认为是同一名称。但是,加引号的标识符区分大小写。 ?CREA TE TABLE语句

Oracle 外键约束

Oracle 外键约束 外键FOREIGN KEY约束是几种约束是最复杂的,外键约束可以使两个表进行关联。外键是指引用另一个表中的某个列或某几个列,或者本表中另一个列或另几个列的列。被引用的列应该具有主键约束,或者惟一性约束。 在外键的定义中,涉及到外键表、外键列、被引用表和被引用列等几个概念。如果成功地创建了外键约束,那么系统将要求外键列中的数据必须来自被引用列中的数据。被引用列中不存在的数据不能存储于外键列中。在一般情况下,当删除被引用表中的数据时,该数据也不能出现在外键列中。如果外键列存储了将要在被引用表中删除的数据,那么对被引用表删除数据的操作将失败。 最典型的外键约束是HR模式中的EMPLOYEES和DEPARTMENT表,在该外键约束中,外键表EMPLOYEES中的外键列DEMPARTMENT_ID将引用被引用表DEPARTMENTS 中的DEMPARTMENT_ID列。 例如,在以下的示例中,将以HR身份连接到数据库,并创建一个新表ADMINISTRATION_EMP,并为其添加到DEPATRMENT表的外键约束:SQL> connect hr/hr 已连接。 SQL> create table administration_emp 2 as select * from hr.employees 3 where department_id=10; 表已创建。 SQL> alter table administration_emp 2 add constraint admin_dep_fk 3 foreign key(department_id) 4 references departments(department_id); 表已更改。 为验证创建的外键约束的有效性,可以向ADMINISTRATION_EMP表添加一条记录,并且它的DEPARTMENT_ID列值不存在DEPARTMENTS表中,那么插入操作将会因为违反外键约束而失败: SQL> insert into administration_emp( 2 employee_id,last_name,email,hire_date,job_id,department_id) 3 values(120,'刘丽','li@https://www.360docs.net/doc/2d16140747.html,',sysdate,'HR_REP',360); insert into administration_emp( * 第 1 行出现错误: ORA-02291: 违反完整约束条件(HR.ADMIN_DEP_FK) - 未找到父项关键字 注意在一个表上创建外键约束时,被引用表必须已经存在,并且必须为该表的引用列定义惟一性约束或主键约束。

Oracle创建表的语法详解

Oracle创建表语句(Create table)语法详解及示例 创建表(Create table)语法详解 1. ORACLE常用的字段类型 ORACLE常用的字段类型有 VARCHAR2 (size) 可变长度的字符串, 必须规定长度 CHAR(size) 固定长度的字符串, 不规定长度默认值为1 NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数 最长38位. 不够位时会四舍五入. DATE 日期和时间类型 LOB 超长字符, 最大可达4G CLOB 超长文本字符串 BLOB 超长二进制字符串 BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的. 数字字段类型位数及其四舍五入的结果 原始数值1234567.89 数字字段类型位数存储的值 Number 1234567.89 Number(8) 12345678 Number(6) 错 Number(9,1) 1234567.9 Number(9,3) 错 Number(7,2) 错 Number(5,-2) 1234600 Number(5,-4) 1230000 Number(*,1) 1234567.9 2. 创建表时给字段加默认值和约束条件 创建表时可以给字段加上默认值 例如 : 日期字段 DEFAULT SYSDATE

这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 创建表时可以给字段加上约束条件 例如: 非空 NOT NULL 不允许重复 UNIQUE 关键字 PRIMARY KEY 按条件检查 CHECK (条件) 外键 REFERENCES 表名(字段名) 3. 创建表的例子 CREATE TABLE DEPT( EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13)) ; CREATE TABLE region( ID number(2) NOT NULL PRIMARY KEY, postcode number(6) default '0' NOT NULL, areaname varchar2(30) default ' ' NOT NULL); 4. 创建表时的命名规则和注意事项 1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,# 2)大小写不区分 3)不用SQL里的保留字, 一定要用时可用双引号把字符串括起来. 4)用和实体或属性相关的英文符号长度有一定的限制 注意事项: 1)建表时可以用中文的字段名, 但最好还是用英文的字段名 2)创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 3)建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引 4)一个表的最多字段个数也是有限制的,254个. 5. 约束名的命名规则和语法

Oracle 禁止和激活约束

Oracle 禁止和激活约束 在默认情况下,约束创建之后就一直起作用。但是,也可以根据具体应用情况,临时禁用某个约束。当某个约束被禁用后,访约束就不再起作用了,但它还存在数据库中。 为什么要禁用约束呢?这是因为约束的存在会降低插入和更改数据的效率,系统必须确认这些数据是否满足定义的约束条件。当执行一些特殊操作时,如使用SQL*Loader从外部数据源向表中导入大量数据,并且事先知道操作的数据满足了定义的约束,为提高运行效率,就可以禁用这些约束。 但是,禁用约束只是一种暂时现象,某些在禁用约束状态下完成的操作完成之后,还应该激活约束。如果约束没有必要存在,则可以删除约束。 禁用约束即可以在定义约束时执行,也可以对现有的约束执行禁用操作。在使用CREATE TABLE或ALTER TABLE语句定义约束时,默认情况下约束是激活的。如果在定义约束时使用关键字DISABLE,则约束的是被禁用的。如果希望禁用已经存在的约束,则可以在ALTER TABLE语句中使用DISABLE CONSTRAINT子句。其语法形式如下:alter table table_name disable constraint constraint_name; 如果希望激活被禁用的约束,则可以在ALTER TABLE语句中使有ENABLE CONSTRAINT子句激活约束。激活约束的语法形式如下: alter table table_name enable [novalidate | validate] constraint constraint_name; 关键字NOV ALIDATE表示在激活约束时不验证表中已经存在的数据是否满足约束,如果没有使用该关键字,或者使用V ALIDATE关键字,则在激活约束时系统将要验证表中的数据是否满足约束的定义。 例如,下面的语句在创建EMPLOYEES表时将定义的约束置为禁用状态: create table employee_history( ... salary number(8,2) constraint emp_sal_ck check (salary>0) disable, ... ) 需要注意,在禁用主键约束时,Oracle默认会删除约束对应的惟一索引,而在重新激活约束时,Oracle将会为重新建立惟一索引。如果希望在删除约束时保留对应的惟一索引,可以在禁用约束时使用关键字KEEY INDEX。例如,下面的语句在禁用主键约束时保留在相应的索引: alter table employees disable constraint emp_pk keep index; 在禁用惟一性约束或主键约束时,如果有外键约束正在引用该列,则无法禁用惟一性约束或主键约束。这时可以先禁用外键约束,然后再禁用惟一性约束或主键约束;或者在禁用惟一性约束或主键约束时使用CASCADE关键字,这样可以级联禁用引用这些列的外键约束。 例如,在下面的示例中,将禁用EMPLOYEES表的EMP_PK主键约束,然后再重新激活该约束。 (1)以SCOTT身份连接数据库系统。

oracle 5种约束条件使用方法

1 约束 约束是操作表数据的强制规定 有以下五种约束: ?NOT NULL ;非空约束 ?UNIQUE :唯一值约束 ?PRIMARY KEY:主键约束 ?FOREIGN KEY:外键约束 ?CHECK:检查约束 约束:建表的时候可以加约束,建表后也可加约束 注意事项 、如果不指定约束名 Oracle server 自动按照 S、YS_C n 的格式指定约束名 、在什么时候创建约束: ?建表的同时 ?建表之后 、可以在表级或列级定义约束 、可以通过数据字典视图查看约束 create table newdept as select * from departments create table newemp

as select * from employees 2 定义约束 CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], ... [table_constraint][,...]); CREATE TABLE employees( employee_id NUMBER(6), first_name VARCHAR2(20), ... job_id VARCHAR2(10) NOT NULL, CONSTRAINT emp_emp_id_pk P RIMARY KEY (EMPLOYEE_ID)); 列级 column[CONSTRAINT constraint_name] constraint_type, 表级

column,... [CONSTRAINT constraint_name] constraint_type (column, ...), 3 NOT NULL 约束 只能定义在列级: 保证列值不能为空: 修改first_name 非空 alter table newemp modify (first_name NOT NULL) 取消非空约束 alter table newemp modify (first_name NULL) 增加约束 定义每一行必须满足的条件 以下的表达式是不允许的: ?出现CURRVAL, NEXTVAL, LEVEL, 和ROWNUM 伪列 ?使用 SYSDATE, UID, USER, 和 USERENV 函数 ?在查询中涉及到其它列的值

Oracle+创建删除用户

Oracle 创建删除用户、角色、表空间、导入导出、备份命令总结导入导出实用程序用于实施数据库的逻辑备份和恢复 导出实用将数据库中的对象定义和数据备份到一个操作系统二进制文件中 导入使用程序读取二进制导出文件并将对象和数据载入数据库中 导出额导入实用程序的特点有: 1.可以按时间保存表结构和数据 2.允许导出指定的表,并重新导入到新的数据库中 3.可以吧数据库迁移到另外一台异构服务器上 4.在两个不同版本的Oracle数据库之间传输数据 5.在联机状态下进行备份和恢复 6.可以重新组织表的存储结构,减少链接及磁盘碎片 调用导入导出的三种方法: 在命令执行程序的参数和参数值 已交互的方式提示用户逐个输入参数的值 允许用户将运行参数和参数值存储在参数文件中,以便重复使用参数 导入导出数据库对象的四种模式:完全数据库、表、用户、表空间 导入导出整个数据库的所有对象 导入导出一个或多个指定的表或表空间 导入导出一个用户模式中的所有对象 导入导出一个或多个指定的表空间中的所有对象 导出使用程序有以下常用的命令参数 参数说明 USERID 确定执行导出实用程序的用户名和口令 BUFFER 确定导出数据时所使用的缓冲区大小,其大小用字节表示 FILE 指定导出的二进制文件名称,默认的扩展名是.dmp FULL 指定是否以全部数据库方式导出,只有授权用户才可使用此参数OWNER 要导出的数据库用户列表 HELP 指定是否显示帮助消息和参数说明 ROWS 确定是否要导出表中的数据 TABLES 按表方式导出时,指定需导出的表和分区的名称 PARFILE 指定传递给导出实用程序的参数文件名

Oracle 主键约束

Oracle 主键约束 主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。对于表中的每一行数据,主键约束列都是不同的,主键约束同时也具有非空约束。 如果主键约束由一列组成时,该主键约束被称为行级约束。如果主键约束由两个或两个以列组成时,则该主键约束被称为表级约束。这两种不同类型的主键,在定义上有一点差异。 例如,在定义EMPLOYEES表时,为表定义了一个表级主键约束EMP_PK,该主键约束由EMPNO列组成: SQL> create table employees( 2 empno number(10), 3 ename varchar2(20) not null, 4 sex char(2), 5 salary number(8,2), 6 hiredate date default sysdate, 7 job varchar2(10), 8 email varchar2(50), 9 deptno number(3) not null, 10 constraint EMP_PK primary key (empno,ename)); 表已创建。 使用ALTER TABLE语句增加主键约束的部分语法形式如下: alter table table_name add constraint constraint_name primary key(column1[,column2]); 如果表上已经存在主键约束,那么当试图在该表上再增加一个主键约束时,系统就会生生一个错误信息。即使在不同的列上增加约束也是如此。例如,当在EMPLOYEES表的EMAIL列上再增加一个约束时,系统将产生“表中能具有一个主键”的错误消息。如下所示: SQL> alter table employees 2 add constraint emp_email_pk primary key (email); add constraint emp_email_pk primary key (email) * 第 2 行出现错误: ORA-02260: 表只能具有一个主键 与NOT NULL约束相同,当为表添加主键约束时,如果该表中已经存在数据,并且主键列具有相同的值或存在NULL值,则添加主键约束的操作将失败。 如果要为PRIMARY KEY约束指定名称,则必须使用CONSTRAINT关键字,如上面的示例所示。如果要使用系统自动为其分配的名称,则可以省略CONSTRAINT关键字。例如,下面的语句在创建EMPLOYEES表时在EMPNO列上定义了一个主键约束: create table employees( empno number(10) primary key, …

ORACLE的索引和约束详解

ORACLE的索引和约束详解 博客分类: 数据库 Oracle数据结构 Oracle的约束-- primary key, not null, unique,foreign key, check 约束 * 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约束,但如果某个约束作用于多个字段, 必须在表级定义约束 * 在定义约束时可以通过CONSTRAINT关键字为约束命名,如果没有指定,ORACLE 将自动为约束建立默认的名称 PRIMARY KEY 定义primary key约束(单个字段) create table employees (empno number(5) primary key,...) 指定约束名 create table employees (empno number(5) constraint emp_pk primary key,...) 定义primary key约束(多个字段,在表级定义约束) create table employees (empno number(5), deptno number(3) not null, constraint emp_pk primary key(empno,deptno) using index tablespace indx storage (initial 64K next 64K ) ) ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和 一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引指定存储位置和存储参数 alter table employees add primary key (empno) alter table employees add constraint emp_pk primary key (empno) alter table employees add constraint emp_pk primary key (empno,deptno)

oracle约束键解析

oracle约束键解析 一、数据库约束的作用和分类 primarykey 和unique他们的作用是为了不让表中有重复的数据(一个表)check表示表中列的数据的范畴性的定义(一个表) defult表示表中的默认值 foreignkey 表与表之间的联系(两个或两个以上的表) 【unique是能够包含null值的,同时一个表中能够有多个unique constraint 而primarykey在一个表中只能有一个.同时不能有null值】 二、针对约束创建有两种不同的思想 第一、创建标的时候一同将约束创建了 第二、你的表差不多创建好了,向表中添加约束 三、下面我就一一的介绍他们 一、primary key 主键约束 Ⅰ两种写法 ①在差不多创建的表中添加约束 说明:添加约束的时候一定要修改表故用(alter[修改]) Alter table table1 Add primary key (列名1,列名2) ②同表一起创建 Create table table1 (列名1 数据类型是否为空primary key , 列名1 数据类型是否为空 ) 上面的是两种情形为一个字段设置主键,接下来是以多个列作为主键。 Create table table1 ( 列名1 数据类型是否为空, 列名2 数据类型是否为空, 列名3 数据类型是否为空, Primary key (列名1 ,列名2) ) 二、Check约束 那个和主键约束差不多

Alter table table1 Add unique(列名) 三、外键约束 好多的同学一直也都不明白得外键约束,到底什么才是外键?主键在那个表上?外键在那个表上?用T-SQL语句写的时候是主表在前,依旧外间表在前?等等一系列的问题! 接下来我讲给大伙儿说说那个主外键到底如何弄的。 事实上,主外键之间正如它的名字一样,他们之间有一个主从关系,一个主表,一个从表,主表上面设置的是主键,从表上面设置的是外键(foreign key),主键表中的数据发生变化的时,外键(foreign key)表的数据赶忙就发生改变。 Ⅰ向已有的表中添加一个主键(没有确实是添加,添加确实是修改表) Alter table table1 Add foreign key (列名1)references table2(列名2) Ⅱ创建表的时候一同创建外键 Create table table1 (列名4 数据类型是否为空primary key, 列名3 数据类型是否为空, 列名1 数据类型references table2 (列名2) ) 注: Table1外键表 Table2主键表 列名1是主表列 列名2是外键表列 最一样常用的是主表的列和外键表的列的字段是一样的 一样多为ID 能够作为主键的。这是两个之间的交互。 四、Check约束 他也是基于一个表中的约束,限定表中列直截了当爱你数据的参照关系。 Ⅰ向一个以创建的表中添加约束 Alter tabel table1 Add constraint 约束名check(列名关于列的限制条件) 多是一些能够找到范畴的数据,例如年龄,身高,体重。 五、default 默认约束 他是一个关于某一个值的约束,他是唯独的一个用for关联词的句子 向表中添加一个默认约束 Alter tabletable1 Add default ‘默认值’for 列名

【IT专家】无法在Oracle中删除默认约束。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 无法在Oracle 中删除默认约束。 无法在Oracle 中删除默认约束。[英]Unable to drop default constraint in Oracle 5 Your ALTER statement is wrong and you cannot use two ALTER commands in one statement. And we never drop default value instead we set it to NULL. 您的ALTER 语句是错误的,并且不能在一条语句中使用两个ALTER 命令。我们 从不放弃默认值,而是将它设置为NULL。 If a column has a default value, then you can use the DEFAULT clause to change the default to NULL, but you cannot remove the default value completely. If a column has ever had a default value assigned to it, then the DATA_DEFAULT column of the USER_TAB_COLUMNS data dictionary view will always display either a default value or NULL. 如果列有一个默认值,那么可以使用default 子句将默认值更改为NULL,但是 不能完全删除默认值。如果一个列曾经有一个默认值分配给它,那么 USER_TAB_COLUMNS 数据字典视图的DATA_DEFAULT 列将始终显示一个默认 值或NULL。 ALTER TABLE ALTER TABLE Use the following SQL command to drop the default. 使用下面的SQL 命令删除默认值。 ALTER TABLE constomers MODIFY age DEFAULT NULL;tips:感谢大家的阅读, 本文由我司收集整编。仅供参阅!

oracle中创建unique唯一约束(单列和多列)

oracle中创建unique唯一约束(单列和多列) oracle中的unique约束是用来保证表中的某一类,或者表中的某一类组合起来不重复的一种手段。我们在可以在创建表时或者创建好后通过修改表的方式来创建oracle中的unique约束。 下面是一些创建unique约束的例子: create table unique_test (id number, fname varchar2(20), lname varchar2(20), address varchar2(100), email varchar2(40), constraint name_unique unique(fname,lname)) 在这里我们建立了一个表unique_test,并将其中的fname和lname组合起来建立了一个唯一约束。 我们也还可以在表创建完成后手动的通过修改表的方式来增加约束,例如: alter table unique_test add constraint email_unique unique(email); 下面我们来往表里面插入数据, insert i nto unique_test(id,fname,lname) values(1,’德华’,'刘’) 这一行可以正常的被插入 因为我们在建立表时曾把fname和lname联合起来作为一个约束,因为如果我们希望再次插入刘德华, insert into unique_test(id,fname,lname) values(2,’德华’,'刘’) 是会出现如下错误的:

ORA-00001: 违反唯一约束条件 (https://www.360docs.net/doc/2d16140747.html,_UNIQUE) 但我们如果改为如下值: insert in to unique_test(id,fname,lname) values(2,’学友’,'张’); 又可以正常插入了。 有些朋友可能会有疑问,我们不是为email也建立的一个唯一约束吗?为什么这两行数据都没有为email列赋值,也就是或两行的email列都是空值,而插入也成功了呢? 这是因为一个空值(null)的含义是该列当前的状态是不存在,他永远不可能会与另外一个空值相等。所以也就不存在违反唯一约束之说了。

Oracle 惟一性约束

Oracle 惟一性约束 惟一性约束强调所在的列不允许有相同的值。但是,它的定义比主键约束弱,即它所在的列允许空值。UNIQUE约束的主要作用是在保证除主键列外、其他列值的惟一性。 在一个表中,根据实际情况可能有多个列的数据都不允许存在相同值。例如,在EMPLOYEES表中的EMAIL等列是不允许重复的,但是由于在一个表中最多只能有一个主键约束存在,那么如何解决这种多个列都不允许重复数据存在的问题?这就是惟一性约束的作用。 例如,下面的语句重新定义了EMPLOYEES表,并为该表的EMIL列定义名为EMP_UK 的惟一性约束: SQL> create table employees( 2 empno number(10) primary key, 3 ename varchar2(20) not null, 4 sex char(2), 5 salary number(8,2), 6 hiredate date default sysdate, 7 job varchar2(10), 8 email varchar2(50) constraint emp_uk unique, 9 deptno number(3) not null); 表已创建。 前面曾介绍过,UNIQUE约束可以保证列中不存在重复的值,但是可以插入多个NULL 值。下面的示例将试图在EMPLOYEES表的EMAIL列添加两行NULL值:SQL> insert into employees(empno,ename,email,deptno) 2 values(1220,'刘丽',null,10); 已创建 1 行。 SQL> insert into employees(empno,ename,email,deptno) 2 values(1221,'王丽',null,10); 已创建 1 行。 为了防止向UNIQUE约束列添加NULL值,可以在该列上再添加NOT NULL约束。在向UNIQUE约束列添加NOT NULL约束后,其功能基本上就相当于主键PRIMARY KEY 约束。 使用ALTER TABLE语句添加UNIQUE约束的语句形式如下: alter table table_name add constraint constraint_name unique (column1[,column2]); 同样,使用ALTER TABLE语句也可以删除UNIQUE约束。例如,下面的语句删除创建的UNIQUE约束EMP_UK: SQL> alter table employees 2 drop constraint emp_uk;

相关文档
最新文档