oracle笔记5 建表 修改表 删除主键 约束
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_i d)REFERENCES customers(id));5. CHECK Constraint(检查约束)CHECK约束用于限制一列中的值必须满足特定的条件。
Oracle删除和重建由primary约束建立的索引
Oracle 删除和重建由primary 约束建立的索引drop index时出现如下错误:SQL> drop index oos_index;drop index oos_indexERROR at line 1:ORA-02429: cannot drop index used for enforcement ofunique/primary key我们知道当创建Primary key和unique约束时,如果在该key上不存在索引,则Oracle会自动创建对应的unique索引,而当你要删除该索引时,必须先Disable或Drop该约束。
看下面的例子:SQL>CREATE TABLE employees2 (3 empno NUMBER(6) PRIMARY KEY,4 name VARCHAR2(30),5 dept_no NUMBER(2)6 );Table created.SQL> select index_name,owner,table_NAME from all_indexes where owner=’SFA’ AND table_name=’EMPLOYEES’;INDEX_NAME OWNER TABLE_NAME———————- ——————- —————–SYS_C007594 SFA EMPLOYEESSQL> SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,INDE X_NAME FROM ALL_CONSTRAINTS WHERETABLE_NAME=’EMPLOYEES’;CONSTRAINT_NAME C TABLE_NAME INDEX_NAME ———————————————————- ——————SYS_C007594 P EMPLOYEES SYS_C007594SQL> DROP INDEX SYS_C007594;DROP INDEX SYS_C007594*ERROR at line 1:ORA-02429: cannot drop index used for enforcement ofunique/primary keySQL> ALTER TABLE employees MODIFY PRIMARY KEY DISABLE;Table altered.SQL> select index_name,owner,table_NAME from all_indexes where owner=’SFA’ AND table_name=’EMPLOYEES’;no rows selected这时看到由约束建立的索引已经删除了。
Oracle之主键的创建、添加、删除操作
Oracle之主键的创建、添加、删除操作⼀、创建表的同时创建主键约束1.1、⽆命名SQL> create table jack (id int primary key not null,name varchar2(20));Table createdSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK SYS_C00111001.2、有命名SQL> create table jack (id int ,name varchar2(20),constraint ixd_id primary key(id));Table createdSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK IXD_ID⼆、向表中添加主键约束SQL> create table jack as select * from dba_objects;Table createdSQL> desc jack;Name Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VARCHAR2(30) YOBJECT_ID NUMBER YDATA_OBJECT_ID NUMBER YOBJECT_TYPE VARCHAR2(19) YCREATED DATE YLAST_DDL_TIME DATE YTIMESTAMP VARCHAR2(19) YSTATUS VARCHAR2(7) YTEMPORARY VARCHAR2(1) YGENERATED VARCHAR2(1) YSECONDARY VARCHAR2(1) YNAMESPACE NUMBER YEDITION_NAME VARCHAR2(30) YSQL> alter table jack add constraint pk_id primary key(object_id);Table alteredSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK PK_ID----另外当索引创建好以后再添加主键的效果:SQL> create table jack as select * from dba_objects;Table createdSQL> create index ind_object_id on jack(object_id);Index createdSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK IND_OBJECT_IDSQL> desc jack;Name Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VARCHAR2(30) YOBJECT_ID NUMBER YDATA_OBJECT_ID NUMBER YOBJECT_TYPE VARCHAR2(19) YCREATED DATE YLAST_DDL_TIME DATE YTIMESTAMP VARCHAR2(19) YSTATUS VARCHAR2(7) YTEMPORARY VARCHAR2(1) YGENERATED VARCHAR2(1) YSECONDARY VARCHAR2(1) YNAMESPACE NUMBER YEDITION_NAME VARCHAR2(30) YSQL> alter table jack add constraint pk_id primary key(object_id);Table alteredSQL> desc jack;Name Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VARCHAR2(30) YOBJECT_ID NUMBERDATA_OBJECT_ID NUMBER YOBJECT_TYPE VARCHAR2(19) YCREATED DATE YLAST_DDL_TIME DATE YTIMESTAMP VARCHAR2(19) YSTATUS VARCHAR2(7) YTEMPORARY VARCHAR2(1) YGENERATED VARCHAR2(1) YSECONDARY VARCHAR2(1) YNAMESPACE NUMBER YEDITION_NAME VARCHAR2(30) YSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK IND_OBJECT_ID三、修改主键约束3.1、禁⽤/启⽤主键SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_ID P ENABLEDSQL> alter table jack disable primary key;Table alteredSQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------SQL> alter table jack enable primary key;Table alteredSQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_ID P ENABLED3.2、重命名主键SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_ID P ENABLEDSQL> alter table jack rename constraint pk_id to pk_jack_id;Table alteredSQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_JACK_ID P ENABLED四、删除表中已有的主键约束4.1、⽆命名----先利⽤user_cons_columns表查得主键名:SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME------------------------------ ------------------------------ ------------------------------ ----------------JACK SYS_C0011105 JACK IDSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK SYS_C0011105SQL> alter table jack drop constraint SYS_C0011105;Table altered4.2、有命名SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME------------------------------ ------------------------------ ------------------------------ ------------------------JACK IXD_ID JACK IDSQL> alter table jack drop constraint IXD_ID;Table alteredSQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME------------------------------ ------------------------------ ------------------------------ ------------------------。
修改和删除表里面的约束条件
修改和删除表里面的约束条件听好啦!一、修改表里面的约束条件1. 首先呢,你得知道你要修改的是啥约束。
是主键约束、外键约束,还是啥唯一性约束之类的。
比如说你想修改一个表名为“students”里面关于学号(student_id)字段的主键约束。
- 如果是在MySQL里,你得先看看这个约束是怎么定义的。
要是这个主键约束当初定义得有点简单,现在想加点东西,像让它自动增长之类的。
那你可能得用ALTER TABLE语句。
- 例如:原来创建表的时候是“CREATE TABLE students (student_id INT, name VARCHAR(50));”,现在想把student_id设为主键并且自动增长。
你就得这么写:“ALTER TABLE students MODIFY student_id INT AUTO_INCREMENT, ADD PRIMARY KEY (student_id);”。
这就像是给一个小盒子(student_id这个字段)加了个特殊功能(自动增长),还告诉大家这个小盒子很重要(设为主键)呢。
2. 如果是修改外键约束,那就更复杂一点啦。
假设我们有两张表,“classes”和“students”,“students”表有个字段“class_id”是指向“classes”表的主键“id”的外键。
- 要是想修改这个外键约束的一些属性,比如关联的动作(像ON DELETE CASCADE,就是当“classes”表中的记录被删除时,“students”表中相关的记录也跟着删除)。
你得先把原来的外键约束删掉(就像先把两根绳子之间不完美的连接解开),然后再重新创建一个符合新要求的外键约束(再用一根更好的绳子把它们重新连接起来,而且连接的方式更合理)。
- 在MySQL里大概是这样:先“ALTER TABLE students DROP FOREIGN KEY [外键约束名];”(这个外键约束名你可以通过查看表结构找到哦),然后再“ALTERTABLE students ADD CONSTRAINT new_fk_name FOREIGN KEY (class_id) REFERENCES classes (id) ON DELETE CASCADE;”。
Oracle的主键约束、唯一约束与外键约束
Oracle的主键约束、唯⼀约束与外键约束/jingyan/122163.html主键:1.主键约束:⼀个表只能有⼀个主键约束。
主键可以是单个字段,也可以是多个字段。
⽆论是哪种情况,其所有字段都是NOT NULL。
2.Unique约束:⼀个表可以有多个Unique约束,Unique的字段可以为NULL。
3.主键与Unique:不同点在于⼀个表只能有⼀个主键约束,但是可以有多个Unique约束;主键所有字段都是not null,unique可以是null;相同点在于都能保证唯⼀性。
4.主键、Unique与索引:主键约束与Unique约束默认会成为索引。
当主键和Unique有多个字段时,有索引前缀性问题,即where语句中的条件必须有主键或者unique的第⼀个字段,否则不会使⽤索引。
5. 外键与主键、Unique:外键必须为另外⼀张表(⽗表)的主键或者唯⼀索引。
如果要添加记录,⽽⽗表中没有则报错。
反之,如果要删除⽗表中的记录,⽽⼦表中有记录,也会报错。
但是如果在创建外键约束时,如果使⽤on delete cascade,则删除⽗表中数据时,不报错⽽直接把⼦表关联的数据删除。
如果要删除⽗表,则需要加上cascade constraints,此时⼦表的foreign key被去除,表中记录保持不变。
外键:1. 外键是该表是另⼀个表之间联接的字段2. 外键必须为另⼀个表中的主键3. 外键的⽤途是确保数据的完整性。
它通常包括以下⼏种:实体完整性,确保每个实体是唯⼀的(通过主键来实施)。
oracle主键的设置⽅法有2种:⼀种是设置⾃增长主键,另⼀种是⽣成唯⼀序列;。
Oracle主键约束的创建,添加和删除
Oracle主键约束的创建,添加和删除learningoracle的主键约束添加删除1、创建表的同时创建主键约束一、无命名create table accounts (accounts_number number primary key,accounts_balance number);二、有命名create table accounts (accounts_number number primary key,accounts_balance number,constraint yy primary key(accounts_number));2、删除表中已有的主键约束一、无命名SELECT * FROM USER_CONS_COLUMNS WHERE TALBE_NAME='accounts';找出主键名ALTER TABLE ACCOUNTS DROP CONSTRAINT SYS_C003063;二、有命名ALTER TABLE ACCOUNTS DROP CONTRAINT yy;3、向表中添加主键约束ALTER TABLE ACCOUNTS ADD CONSTRAINT PK_ACCOUNTS PRIMARY KEY(ACCOUNTS_NUMBER);oracle中not null约束是我们用到的最多的约束之一了。
我们可以在创建表时让系统自动指定not null约束的名字来创建,也可以手动的的指定not null约束的名字来创建,也可以在表创建好后手动的修改表已达到增加not null约束的目的。
下面是一个例子create table test_not_null(id number not null,name varchar2(30) ,tel varchar2(20) constraint test_not_null_tel not null);在这里我们创建了一个表,并分别给id 和tel两列创建了not null的约束,其中id的约束是系统自动命名的,而tel的约束使我们手动命名的。
ORACLE增删改查以及casewhen的基本用法
ORACLE增删改查以及casewhen的基本⽤法1.创建tablecreate table test01(id int not null primary key,name varchar(8) not null,gender varchar2(2) not null,age int not null,address varchar2(20) default ‘地址不详’ not null,regdata date);约束⾮空约束 not null主键约束 primary key外键约束唯⼀约束 unique检查约束 check联合主键constraint pk_id_username primary key(id,username);查看数据字典desc user_constraint修改表时重命名rename constraint a to b;--修改表删除约束--禁⽤约束 disable constraint 约束名字;删除约束 drop constraint 约束名字; drop primary key;直接删除主键外键约束create table typeinfo(typeid varchar2(20) primary key, typename varchar2(20));create table userinfo_f( id varchar2(10) primary key,username varchar2(20),typeid_new varchar2(10) references typeinfo(typeid));insert into typeinfo values(1,1);创建表时设置外键约束constraint 名字 foregincreate table userinfo_f2 (id varchar2(20) primary key,username varchar2(20),typeid_new varchar2(10),constraint fk_typeid_new foreign key(typeid_new) references typeinfo(typeid));create table userinfo_f3 (id varchar2(20) primary key,username varchar2(20),typeid_new varchar2(10),constraint fk_typeid_new1 foreign key(typeid_new) references typeinfo(typeid) on delete cascade外键约束包含删除外键约束禁⽤约束 disable constraint 约束名字;删除约束 drop constraint 约束名字;唯⼀约束与主键区别唯⼀约束可以有多个,只能有⼀个nullcreate table userinfo_u( id varchar2(20) primary key,username varchar2(20) unique,userpwd varchar2(20));创建表时添加约束constraint 约束名字 unique(列名);修改表时添加唯⼀约束 add constraint 约束名字 unique(列名);检查约束create table userinfo_c( id varchar2(20) primary key,username varchar2(20), salary number(5,0) check(salary>50));constraint ck_salary check(salary>50);/* 获取表:*/select table_name from user_tables; //当前⽤户的表select table_name from all_tables; //所有⽤户的表select table_name from dba_tables; //包括系统表select table_name from dba_tables where owner=’zfxfzb’/*2.修改表alter table test01 add constraint s_id primary key;alter table test01 add constraint CK_INFOS_GENDER check(gender=’男’ or gender=’⼥’)alter table test01 add constraint CK_INFOS_AGE(age>=0 and age<=50)alter table 表名 modify 字段名 default 默认值; //更改字段类型alter table 表名 add 列名字段类型; //增加字段类型alter table 表名 drop column 字段名; //删除字段名alter table 表名 rename column 列名 to 列名 //修改字段名rename 表名 to 表名 //修改表名3.删除表格truncate table 表名 //删除表中的所有数据,速度⽐delete快很多,截断表delete from table 条件//drop table 表名 //删除表4.插⼊语句insert into 表名(值1,值2) values(值1,值2);5.修改语句update 表名 set 字段=值 [修改条件]update t_scrm_db_app_user set password = :pwd where login_name = :user6.查询语句带条件的查询where模糊查询like % _范围查询in对查询结果进⾏排序order by desc||asc7.case whenselect username,case username when ‘aaa’ then ‘计算机部门’ when ‘bbb’ then ‘市场部门’ else ‘其他部门’ end as 部门 from users; select username,case username=’aaa’ then ‘计算机部门’ when username=’bbb’ then ‘市场部门’ else ‘其他部门’ as 部门 from users;8.运算符和表达式算数运算符和⽐较运算符 distinct 去除多余的⾏ column 可以为字段设置别名⽐如 column column_name heading new_name decode 函数的使⽤类似于case…when select username,decode(username,’aaa’,’计算机部门’,’bbb’,’市场部门’,’其他’) as 部门 from users;9.复制表create table 表名 as ⼀个查询结果 //复制查询结果insert into 表名值⼀个查询结果 //添加时查询10.查看表空间desc test01;11.创建表空间永久表空间create tablespace test1_tablespace datafile ‘testfile.dbf’ size 10m;临时表空间create temporary tablespace temptest1_tablespace tempfile ‘tempfile.dbf’ size 10m;desc dba_data_files;select file_name from dba_data_files where tablespace_name=’TEST1_TABLESPACE’;。
oracle数据库表的操作(约束和事务)
oracle数据库表的操作(约束和事务)(一)约束:oracle提供的自动保持数据库完整性的一种方法,他通过限制字段中数据,记录中数据和表之间的数据来保证数据的完整性(二)完整性约束语法格式:constraint constraint_name constraint_style说明:约束不指定名称时,系统会给定一个名称(三)oracle中约束的分类:(1)主键约束:定义表的主键,它是唯一确定表中每一条记录的标识符特点:(1)唯一性,不能为null,不能重复,(以此来保证实体的完整性)(2)主键只能有一个,但可以由多个列构成如:primary 可以(学号,科目编号)例1:修改表结构,为表添加主键约束创建学生信息表create table student(sid number(8,0),name varchar2(20),sex char(2),birthday date,address varchar2(50));--修改表结构,为学生信息表添加主键约束alter table studentadd constraint sid_pk primary key(sid);例2:创建表时添加主键约束--创建表时添加主键约束(1)create table student(sid number(8,0) primary key,name varchar2(20),sex char(2),birthday date,address varchar2(50));(2)create table student(sid number(8,0),name varchar2(20),sex char(2),birthday date,address varchar2(50),constraint sid_pk primary key(sid));--------------------------------------------------------------------------------Oracle的表操作--非空约束(一)非空约束:确保列不能为空,当插入入数据时,必须为该列提供数据,更新数据市不能将其值设置为null注:非空约束是列级约束(1)列级约束语法格式:column constraint contraint_nameconstaint_type说明:列级约束必须跟在列的定义后面(2)表级约束语法格式:column,...constraint constraint_name constrain_type说明:表级约束不与列一起,单独定义非空约束训练例1:修改表结构,添加非空约束--创建学生信息表(1)create table student(sid number(8,0) primary key,name varchar2(20),sex char(2),birthday date,address varchar2(50));(2)ALTER TABLE student modify (name varchar2(20) NOT NULL);------------------------------------------------------------------------例2:创建表时添加非空约束表级约束:语法:constraint contraint_name constraint_type(colum_name)create table student(sid number(8,0),name varchar2(20) not null,sex char(2) constraint nn_sex not null,birthday date,address varchar2(50),constraint sid_pk primary key(sid));------------------------------------------------------------------------例3:删除非空约束的方式思路:将非空属性置空: alter......modify......null语法:ALTER TABLE student modify 列名数据类型 NULL(置空);ALTER TABLE student modify sex char(2) NULL;----------------------------------------------------------------------------禁用主键约束(无效化约束)语法:alter......disable constraint constraint_nameALTER TABLE student disable CONSTRAINT sid_pk(约束名);--激活主键约束语法:alter......enable constraint constraint_nameALTER TABLE student enable CONSTRAINT sid_pk(约束名);--删除主键约束(彻底删除)语法:alter......drop constraint constraint_name方法1:ALTER TABLE student DROP CONSTRAINT sid_pk(约束名);方法2:ALTER TABLE student DROP PRIMARY KEY;(主键约束只有一个,所以也可如此操作)---------------------------------------------------------------------------------oracle的表操作--唯一约束(一)唯一性约束:指定一个或多个列的组合值具有唯一性,防止在列中输入重复的值(二)唯一性特点:(1)唯一性约束的列允许为空(2)一个表允许有多个唯一性约束(3)可以把唯一性约束定义在多个列上,(如果是定义在多个列上,必须定义为表级约束)例1:创建表时添加唯一性约束--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50),-- email varchar2(50) unique,-- cardid varchar2(18),-- constraint uk_cardid unique(cardid)--);-----------------------------------------------------------------------例2:修改表时添加唯一性约束--创建学生信息表--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50),-- email varchar2(50) unique,-- cardid varchar2(18)--);--更改表结构,添加唯一性约束--alter table student add constraint uk_student_cardid unique(cardid);----------------------------------------------------------------------------禁用约束alter table student disable constraint uk_student_cardid;--彻底删除alter table student drop constraint uk_student_cardid;-------------------------------------------------------------------------Oracle的表操作--检查约束检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50)--);例1:修改表添加检查约束的方式--alter table student add constraint ck_sex check(sex='男' or sex='女');---------------------------------------------------------------------------例2:创建表时设置检查约束的方式:(列级约束)-- create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2) check(sex='男' or sex='女'),-- birthday date,-- address varchar2(50)--);----------------------------------------------------------------------------例3:创建表时设置检查约束的方式:(表级约束)--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50),-- constraint ck_sex check(sex='男' or sex='女')--);------------------------------------------------------------------------------禁用约束--alter table student disable constraint ck_sex;--彻底删除alter table student drop constraint ck_sex;-----------------------------------------------------------------------------数据库表的操作--外键约束(一)外键约束(foreign key):用来建立和加强两个表数据之间的链接的一列或多列,外键约束是唯一涉及两个表关系的约束(二)语法格式:(三)实例--主表--create table department(-- depid varchar2(10) primary key,-- depname varchar2(30)--);--从表--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50),-- depid varchar2(10)--);--修改表时添加约束(外键约束)--alter table student add constraint fk_depid foreign key(depid) references department(depid) on delete cascade;-----------------------------------------------------------------------------------创建列级约束--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50),-- depid varchar2(10) references department(depid)--);-----------------------------------------------------------------------------创建表级约束--create table student (-- sid number(8,0),-- name varchar2(20),-- sex char(2),-- birthday date,-- address varchar2(50),-- depid varchar2(10),-- constraint fk_depid foreign key(depid) references department(depid) on delete cascade--);------------------------------------------------------------------------------------禁用约束--alter table student disable constraint fk_depid;--彻底删除alter table student drop constraint fk_depid;--------------------------------------------------------------------------------Oracle的表操作--事务(一)事务:对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求(二)事务的组成:一条或多条DML(需要使用commit提交事务或使用rollback回滚事务)一条DDL(自动提交事务)一条DCL(自动提交事务)当使用事务操作(DML语句)时,oracle会在被作用表上加表锁,防止其他用户改变表结构,同时会在被作用行上加上行锁,以防止其他事务在相应行上执行DML操作(三)为什么要使用事务?(保证数据的安全有效)(四)事务的控制命令(1)提交事务(commit)(2)通过commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁(3)当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据(4)回滚事务(rollback)savepoint(5)rollback只能对为提交的数据撤销,已经commit的数据是无法撤销的,因为commit之后已经持久化到数据库中(6)保存点(savepoint)是事务中的一点,用于取消部分事务(7)当结束事务时,会自动的删除该事务所定义的所有保存点(8)当执行rollback时,通过指定保存点可以回退到指定的点设置保存点:savepoint a;回滚部分事务:rollback to a;回滚全部事务:rollback;--update emp_bak set sal=6000 where empno=7369;--演示事务的三个语句(commit,savepoint,rollback)的作用--delete from emp_bak where empno=7369;--commit;update emp_bak set sal=5555 where empno=7499;savepoint a;update emp_bak set sal=6666 where empno=7499;savepoint b;select * from emp_bak;rollback to a;rollback;--------------------------------------------------------------------------------。
oracle解除字段的约束条件
在Oracle数据库中,要解除字段的约束条件,可以使用`ALTER TABLE`语句以及相应的子句来完成。
以下是一些常见的约束条件及其解除方法:1. 主键约束(Primary Key Constraint):解除主键约束的语法如下:```ALTER TABLE table_name DROP CONSTRAINT constraint_name;```其中,`table_name`是要操作的表名,`constraint_name`是主键约束的名称。
2. 唯一约束(Unique Constraint):解除唯一约束的语法如下:```ALTER TABLE table_name DROP CONSTRAINT constraint_name;```其中,`table_name`是要操作的表名,`constraint_name`是唯一约束的名称。
3. 外键约束(Foreign Key Constraint):解除外键约束的语法如下:```ALTER TABLE table_name DROP CONSTRAINT constraint_name;```其中,`table_name`是要操作的表名,`constraint_name`是外键约束的名称。
4. 检查约束(Check Constraint):解除检查约束的语法如下:```ALTER TABLE table_name DROP CONSTRAINT constraint_name;```其中,`table_name`是要操作的表名,`constraint_name`是检查约束的名称。
需要注意的是,解除约束前应该确保数据的完整性,否则可能会导致数据不一致的问题。
在解除约束之前,可以使用`SELECT`语句和其他方法先验证数据的正确性。
此外,如果要修改字段的约束条件,可以使用`ALTER TABLE`语句和相应的子句来实现。
例如,要修改字段的数据类型、长度等属性,可以使用`MODIFY`子句。
oracle数据库中的模式
maxvalue 最大值
cycle/nocy
cle
create sequence 序列名
increment 步长(负数)
start with 初值
minvalue 最小值
一、创建表
create table 表名
(字段名 数据类型 约束,....)
二、约束添加、修改、删除
1. alter table 表名 add constraint 约束名
约束类型(约束表达式)
4.创建主键约束和唯一约束时会自动生成唯一索引
5.drop index 索引名
五、其他模式对象
1. 簇
create cluster 簇名 (公共字段名 字段类型)
size 最大字节数
[tablespace 表空间名
storage (initial 簇的初始大小 next 增长方式
3. 修改约束的状态
(1)禁用/启用
(2)立即检查/延迟检查 直到执行commit
三、表结构的修改
1.字段的增、删、改(字段名、字段类型)
(1) alter table 表名 add 字段名 字段类型 约束
(2)alter table 表名 drop column 字段名列表
(3)alter table 表名 rename column 原字段名 to
on commit delete rows
AS SELECT sno,sname,sage from scott.student
/
2. 视图
3. 序列
4. 同义词
5. 数据库连接
oracle数据库增删改使用注意事项
Oracle数据库是一种关系型数据库管理系统,被广泛应用于企业级应用的开发和管理中。
在使用Oracle数据库进行增删改操作时,需要注意一些事项,以保证数据的完整性和安全性。
下面将详细介绍Oracle数据库增删改操作的注意事项:一、增加数据时的注意事项:1. 插入数据时,需要确保插入的数据符合表结构的约束条件,包括主键、外键、唯一约束、非空约束等。
否则会出现插入失败的情况。
2. 在进行大批量数据插入时,建议使用批量插入的方式,例如使用INSERT INTO VALUES方式插入多条数据,而不是逐条插入,以提高插入效率。
3. 插入数据时,需要注意数据库的并发控制,确保插入的数据不会造成数据冲突和并发访问的问题。
二、删除数据时的注意事项:1. 删除数据前需要谨慎确认,确保删除操作不会对数据库的完整性和业务逻辑产生影响。
2. 在删除数据时,需要注意是否有其他表与当前表存在外键约束关系,避免因为删除主表数据而导致外键约束错误。
3. 删除大量数据时,建议使用DELETE语句加上条件进行删除,以避免误删整个表的数据。
三、修改数据时的注意事项:1. 在更新数据时,需要确保更新的数据符合表结构的约束条件,避免数据不一致性和错误的情况发生。
2. 修改数据时,需要考虑数据库的事务管理,确保更新操作的原子性和一致性。
3. 修改数据时,需要注意是否有其他表与当前表存在外键约束关系,以避免修改数据导致外键约束错误。
四、事务管理的注意事项:1. 在进行数据操作时,需要考虑事务管理,确保数据库操作的原子性、一致性、隔离性和持久性。
2. 在使用事务时,需要谨慎处理事务回滚和提交操作,以避免数据操作错误导致数据丢失或不一致的问题。
总结:在使用Oracle数据库进行增删改操作时,需要注意数据的完整性、约束条件、事务管理等方面的问题,以确保数据的安全性和一致性。
同时也需要考虑数据操作的效率和性能,以提高数据库的运行效率和可靠性。
希望以上内容能够帮助您更好地理解Oracle数据库增删改操作的注意事项。
oracle删除主键查看主键约束及创建联合主键
2,查看主键约束
SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' AND TABLE_NAME='你要查看的表名' AND OWNER=USER3,创 Nhomakorabea联合主键
ALTER TABLE ADD CONSTRAINTS '约束名' PRIMARY KEY (COLUMN,COLUMN,...);
这篇文章主要给大家介绍了关于oraclemerge合并更新函数的相关资料文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面来一起学习学习吧
oracle删 除 主 键 查 看 主 键 约 束 及 创 建 联 合 主 键
1,主键的删除
ALTER TABLE TABLENAME DROP PRIMARY_KEY 执行上面的SQL可以删除主键;如果不成功可以用 ALTER TABLE TABLENAME DROP CONSTRAINTS COLUMN CASCADE; --删除约束 ALTER TABLE TABLENAME DISABLE PRIMARY_COLUMN ; --设置被设置为主键的列为无效 DROP INDEX INDEX_NAME; --删除主键索引
第16讲 对象:约束的类型,建立,修改,删除,使用
第16讲对象:约束的类型,建立,修改,删除,使用目的:1.掌握表的约束的类型。
以及每种类型约束的作用和意义。
2.掌握各种约束的建立,修改,删除。
授课内容:1.什么是约束,约束的作用。
2.约束的类型:Oracle9i中表的约束有4中:1)主键Primary Key2)外键Foreign Key3)非空not null4)唯一性unique5)检查约束:check3.约束的创建1)约束创建的2中方法1>列约束:创建表时在列的定义中定义约束2>表约束:在创建表时,在表定义的末尾定义约束,称为表约束。
限制多个列的约束必须是表约束。
注:一般情况下约束即可以在表级约束,也可以在列级约束下建立。
NOT NULL约束只能在列级约束下建立。
当主键约束由多个列组合成时,必须在表级约束建立。
2)唯一性(unique)1>列约束:CREATE TABLE department(deptno number(4),deptname varchar2(50) unique –定义唯一性约束)2>表约束:CREATE TABLE department(deptno number(4),deptname varchar2(50),CONSTRAINT unique01 UNIQUE (deptname))语法:CONSTRAINT constaint_name UNIQUE (column_name)3)主键约束:PRIMARY KEY CONSTAINT1>列约束:语法:列名数据类型PRIMARY KEY列名数据类型CONSTRAINT constaint_name PRIMARY KEY create table dept02(deptno number(10)PRIMARY KEY,deptname varchar2(50),deptloc varchar2(50))ORACLE自动给出约束的名称: SYS_Cnnnnnn 格式create table dept02(deptno number(10) CONSTRAINT PK_001 PRIMARY KEY,deptname varchar2(50),deptloc varchar2(50))注:当表只有一个主键列时,可以使用列约束的主键定义方式。
04_02_Oracle约束
删除主键约束
Alter table 表名 drop constraint 约束名;
外键约束
主键的作用是保证数据完整性——即保证数据的唯 一性。外键约束可以保证使用外键约束的列与所引 用的主键约束的列一致。主键可以看做表中数据之 间的区分。而外键约束则适用于不同的表之间的相 互参照关系。
-什么是外键 外键实际是一个引用。一个数据表有自己的主键,而向外部其
创建主键约束
4.测试主键的作用 当在一个表上创建主键之后,向表中添加数据就有 了约束。此时,输入数据时表中的所有数据在主键 列上的值(或值的组合)不能重复,并且主键列上 的值不能为空。 【尝试】尝试向表student中插入已存在的sid的记录 ,Oracle将抛出错误提示,并禁止用户的插入操作。 【尝试】除不能向表student中插入sid 冲突的数据之 外,同样不能插入sid为空的数据。
-创建外键约束 外键是约束的一种,外键约束创建后即可在数据字典中获得相 应信息。 1.创建外键约束 创建外键约束的语法如下所示。 表名 add constraint 约束名 alter table student add constraint 约束名 foreign key(外键列名) references 主表 (主表主键列) 其中,alter table用于修改从表的属性;add constraint用于为表添 加约束;foreign key指定约束的具体类型——外键;references 主表(主表主键列)用于指定外键引用的另一端——主表及主 表的主键列。 【示例11-16】外键约束必然存在主表与从表。对于student表和 book的主从关系,我们需要student和表books。
创建主键约束
【示例1】创建表book1,并为表建立主键,主键列 为book_id。 【示例2】对于单列主键,可以在列的描述中定义主 键。但是对于多列主键,则必须将主键描述与列的 描述并列进行。例如,在表book2中,希望将book_id 、name两列作为主键。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
配置PL/SQL
Tools-Preference首选项 地址栏中分别写
D:\company\Installation Package\Linux\instantclient_11_2(plsql link)
如果两个表结构不一样:
insert into y(字段1,字段2) select 字段1,字段2 from x
只复制表结构
create table 用户名.表名 as select * from 用户名.表名 where 1=2
删除users这个表 drop table users;
BEGIN
EXCEPTION
END
查询表有多少行数据的程序
declare 声明变量cout
2 cout number;
3 begin
4 select count(*) into cout from twotable; into cout把查出来的number值赋给变量cout
显示oracle系统时间
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
复制表
如果两个表结构一样
insert into table_name_new select * from table_name_old
(删除主表emp的时候相关联的dept表怎么变换 设为空/级联删除)
alter table dept2 add constraint pk_dept primary key(deptno); 添加deptno为主键
删除约束
alter table customer drop constraint addressCheck(约束名);
列级定义 :就是再字段后面直接加约束 (主键字段名)primary key
他们的最大却别就是表级定义可以给约束自定义取名,而列级定义系统自动分配
•修改表:
约束
查看一个表有哪些约束
select * from USER_CONSTRAINTS where TABLE_NAME='HTP_EMP';
添加信息insert into student (xh,xm,sex,birthday,sal) VALUES (1,1,1,to_date('2000-10-10','YYYY-MM-DD'),1) 月
修改 update students set number='2',sal=200 where name='htp';
nums number(10) check (nums between 1 and 30))
删除表中主键被个、另一张表作为外键被引用的表
删除主键 alter aa1 drop primary key cascade;
有外键的表
create table aa1(
xh number primary key,
向表中添加主键约束 alter table student add constraint pk_student primary key(studentid);
4、向表中添加外键约束 ALTER TABLE table_A ADD CONSTRAINT FK_name FOREIGN KEY(id) REFERENCES table_B(id);
删除一个带有主键的约束(后面加个cascade) alter table customer drop primary key cascade
添加字段(学生所在班级classid)
alter table student add (classId number(2));
cardId char(18)
)
create table purchase (customerId char(8) references customer(customerId),
goodsId char(8) references goods(goodsId),
select * from students where (sal>500 or classid=10) and xm like 'hu%'; %写字母前面代表从尾字母开始
把一张表里的数据赋值到另一张表 insert into table2 select * from table1;
按工资从低到高排序 select * from users order by sal(默认asc); desc是从高到低排序
删除:
1.只删除表中数据 delete from users;可以恢复但是必须在你删除之前写保存点savapoint 名字(htp1):rollback to 字名
2.删除表的结构和数据 drop table users;
例子
查询工资高于500或是班级为10班,同时还要满足xm姓名的前两位是hu
5 dbms_output.put_line(cout);
6 end;
oracle 输出语句dbms_output.put_line('');
:=赋值
declare
ALTER TABLE emp2 ADD CONSTRAINT FK_name FOREIGN KEY(deptno) REFERENCES dept2(deptno);
select * from user_col_comments ;查看有注释的
创建三个表
create table goods (goodsId char(8) primary key,
goodsName varchar2(20),
unitprice number(10,2) check(unitprice>0),
category varchar2(20),
provider varchar2(20))
create table customer(customerId char(8) primary key,
name varchar2(50) not null,
查看表主键
select a.constraint_name, a.table_name, b.constraint_name
from user_constraints a, user_constraints b
where a.constraint_type = 'R' --R表示外键
and b.constraint_type = 'P' --P表示主键 两个选一个
添加约束
alter table customer add constraint addressCheck check(address in ('沈阳','北京'));
ALTER TABLE emp ADD CONSTRAINT k1 FOREIGN KEY(DEPTNO) REFERENCES dept(DEPTNO) on delete set null/on delete cascade;
primary key 只能唯一 最多一个主键
foreign key 外键
check 条件约束
主键被外表引用的不可以直接删除 例emp的主键 被dept表引用 想删除
向表中添加注释
comment on table test is 'hehe';
comment on column test.a is 'hehe';
address varchar2(50),
email varchar2(20) unique,
sex char(2) default '男' check (sex in ('男','女')),
一张表中建立联合主键 constraint pk_name primary key(col1,col2)
设置默认值 create table tablename(flag CHAR(1) default’N’);
表级定义 :就是再定义完字段后在最后定义约束 例:constraint 别名 primary key(主键字段名)
2. 或者 先删除再添加
1) alter table student drop column sal;
2) b)alter table student add (salary number(7,2));
插入日期格式to_date(2011-2-12,'yyyy-mm-dd')
显示oracle系统时间
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
修改格式日期 alert session set nls_date_format=‘yyyy-mm-dd’;
查看表desc 表名;
查看表插入的数据 select * from users;
查询某项为空或不是为空的人 select * from users where birthday is null/is not null;
建表的几个约束
not null
unique 唯一 不能重复但是可以为空 可以为多个
D:\company\Installation Package\Linux\instantclient_11_2(plsql link)\oci.dll