5、创建外键约束
ALTER TABLE students
ADD CONSTRAINT fk_students_state
FOREIGN KEY (state) REFERENCES state_lookup (state);
6. 约束..
Alter table table_name add constrants BID primary key (bookno);
ALERT TABLE table_name MODIFY( column1 PRIMARY KEY);
1、创建表的同时创建主键约束
(1)无命名 create table student (studentid int primary key not null,
studentname varchar(8),age int);
(2)有命名 create table students (studentid int ,studentname varchar(8),
age int,constraint yy primary key(studentid));
2、删除表中已有的主键约束
(1)有命名 alter table students drop constraint yy;
(2)无命名 可用 SELECT * from user_cons_columns where ..;
查找表中主键名称得student表中的主键名为SYS_C002715
alter table student drop constraint SYS_C002715;
(3) 使约束失效:
alter table tbl_employee disable constraint fk_emp;
删除约束:
alter table tbl_department drop constraint pk_dept;
查询约束:
select CONSTRAINT_NAME from user_constraints where table_name='TBL_EMPLOYEE';
select CONSTRAINT_NAME,COLUMN_NAME from user_cons_columns where table_name='TBL_EMPLOYEE';
-------------------------------------------
select * from sys_org;
alter table SYS_ORG disable constraint REFSYS_ORG1;
alter table SYS_ORG drop constraint REFSYS_ORG1;
delete from sys_org;
commit;
--REFSYS_ORG45
<1>. select CONSTRAINT_NAME, COLUMN_NAME from user_cons_columns where table_name='SYS_ORG';
查出外键名称
<2>. alter table SYS_ORG disable constraint PK3 cascade;
使外键级联失效
<3>. 删除数据
delete from sys_org;
commit;
<4>. 恢复生效状态
alter table SYS_ORG enable constraint PK3;
-----------------------------------------------------
3. 删除表.
Drop table table_name;
4、操作表数据
插入表记录:
①. a. insert into table_name col1,col2 values (val1,val2);
例:Insrt into xs(xh,xm,) values (‘09’,to_date(‘19860210’,’yyyymmdd’));
insert into depto values('100','xieyunchao','m','22',to_date('19861104','yyyy-mm-dd'),10000)
b.从一个表中向另一个表中插入数据
Insert into table1(col1,col2,col3) select (col1,col2,col3)
from othertable
c.使用子查询插入数据
insert into employee (empno,ename,sal,deptno)
select empno,ename,sal,depto from emp;
d.INSERT INTO EMP (ENAME,HIREDATE) VALUE(‘AA’,TO_DATE(‘1980-12-09’,’YYYY-MM-DD’))
③. 删除表数据:
Delete from table_name where condition;
④. 修改表记录
Update table_name set column_name=expression,…where condition.
基于一张表修改另一张表的数据
UPDATE EMPLEE SET DEPTNO=(SELECT DENPNO FROM EMP WHERE EMPNO=7788)
WHERE JOB=(SELECT JOB FROM EMP WHERE EMPNO=7788)
⑤. 删除所有记录但保留表结构.
Truncate table table_name;
⑥.查询数据
查询表结构:DESC table_name
Select ename,sal,12*sal+100 from emp
注:select count(dinstinct(deptno)) from emp
a.查询大于平均的:
select empno from emp a,(select avg(sal) as sal_sal from emp) b
where a.sal>b.sal_sal;
如果列中有空值时,则结果也为空(关于null值的处理(p47)).
如:select ename,name,12*sal+comm如果comm的值为null,结果也为null;
如上所示,comm为null时.则12*sal+comm也为null;解决方法是用nvl方法替换.
在两个表中查询:以下两种方式都是一样的.
a.select t_phone_operation.operation_name
from t_phone_operation ,t_phone_operation_charge
where t_phone_operation.operation_id=t_phone_operation_charge.operation_id and
t_phone_operation_charge.phone_num=’159..’;
b.select operation_name from t_phone_operation where operation_id in (select operation_id from t_phone_operation_charge where phone_num='159...'
使用日期格式显示日期:
select ename,to_char(hiredate,’yyyy—mm---dd’) from emp
select ename where hiredate>to_date(‘1999-12-31’,’yyyy-mm-dd’);
使用别名的三种方式:
a. select ename as name,sal salary,from emp
b. select ename ” name”, sal*12 ”annual salary”
使用连接操作符:
Select ename || job as “employees” from emp
用连接字符:
Select ename ||’ ’||’ is a ’||’ ’||job as “employee details”
限制重复的行:
Select distinct deptno from emp
注意大小写:
Select ename,job,deptno from emp where job=’CLERK’
使用between ….and 运算符
Select ename,sal from emp where sal between 1000 and 1500;
使用in 运算符
Select empno,ename,sal,mgr from emp where mgr in(23,231,2345);
Like运算符:(模糊查询)
%代表至多任意字符
_代表一个任意字符
如:select ename from emp where ename like ’s%’;
显示第三个字符为大写A的所有信息
SELECT ENAME ,SAL FROM EMP WHERE ENAME LIKE '__A%';
显示雇员名包含"_"的雇员信息(其中ESCAPE后的字符a为转义字符)
SELECT ENAME,SAL WHERE ENAME LIKE '%a_% ESCAPE 'a';
Null运算符(关于null值的处理(p47):)
测试一个值是否为空:
Select ename,mgr from emp where mgr is null (注意是is null ,不是=null)
使用NVL函数处理NULL值
NVL函数用于将NULL转换为实际值,其语法为NVL(exp1,exp2).如果是exp1 是null,则返回
exp2,如果exp1不为null,则返回exp1,参数exp1和exp2是任意相同的数据类型.
如:
SELECT ENAME, SAL,SAL+NVL(COM,0) AS "月收入" from EMP;
使用NVL2函数处理NULL值
语法为NVL(exp1,exp2,exp3),如果exp1不是null,则返回exp2,如果exp1是null,则返回exp3;
用WHERE语句限制日期
示例一.符合默认日期格式
select * from emp where hiredate>'01-1月-82'
示例2:不符合默认日期格式(需要用TO_DATE函数转换)
SELECT * FROM EMP WHERE HIREDATE>TO_DATE('1994-9-24','yyyy-mm-dd');
逻辑操作符:And or not
Order by 子句
a. 使用order by 子句对查询数据排序
―――asc:升序,默认
―――desc:降序:
依据多列进行排序:
Select ename,deptno,sal from emp order by deptno,sal desc
总结:
SELECT [DISTINCT] {*,COLUMN[ALIAS],…..} //DISTINCT不重复
FROM tablename
WHERE condition
ORDER BY {column,expr,alias} [ASC|DESC]
分组查询:
常用分组函数:
MAX , MIN ,AVG ,SUM,COUNT,VARIANCE(取方差),STDDEV(取标准差)
● 当使用分组函数时,分组函数只能出现在选择列表,order by ,和having子句中,而不能出现在where 和group by子句中.
● 当执行SELECT 语句时,如果选择列表同时包含列,表达式,和分组函数,那么这些列和表达式必须出现在GROUP BY子句中.
select deptno,avg(sal),count(*) from emp group by deptno;
having avg(sal)<2000;
●如果在select 语句中同时包含group by , having ,以及order by子句,则必须将order by子句放在最后.
●当限制分组结果时,必须要使用having ,而不能在WHERE 子句中使用分函数限制分组显示结果.
子查询:
子查询的作用:
● 在insert 或create table 语句中使用子查询,可以将表数据插入到目标表中.
● 通过update 子句中使用子查询,可以修改一列事多列数据.
● 通过在where ,having,start with 子句中使用子查询,可以提供条件值.
单行子查询:
select ename ,sal,deptno from emp where deptno=(select deptno from emp where ename=’scott’)
多行子查询:
select ename ,job,sal,deptno from emp where job in
(select distinct job from emp where deptno=10)
使用比较符:
IN:匹配子查询结果中的任何一个就可以(见上例).
ALL:必须要符合子查询结果中的所有值.
ANY:只要符合子查询结果中的任何一个就可以.
ALL的使用:
SELECT ENAME,SAL,DEPTNO FROM EMP WHERE SAL>ALL
(SELECT SAL FROM EMP WHERE DEPTNO=30)
ANY 的使用:
SELECT ENAME,SAL,DEPTNO FROM EMP WHERE SAL>ANY
(SELECT SAL FROM EMP WHERE DEPT=’30’)
多列子查询:
SELECT ENAME ,JOB,SAL,DEPTNO FROM EMP WHERE (DEPTNO,JOB) =
(SELECT DEPTNO,JOB FROM EMP WHERE ENAME =’SMITH’)
SELECT ENAME,SAL ,COMM,DEPTNO FROM EMP WHERE (SAL,NVL(COMM,-1)) IN (SELECT SAL,NVL(COMM,-1)FROM EMP WHERE DEPTNO=30)
⑦.删除表数据:
Delete from table_name where condition;
DELETE FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME=’SALES’)
⑧. 修改表记录
Update table_name set column_name=expression,…where condition.
UPDATE TABLE_NAME SET COL1=A*1.1,COL2=B*2 WHERE
更新日期:
UPDATE TABLE_NAME SET HIREDATE =TO_DATE(‘1987/12/1’,’YYYY/MM/DD’);
更新关连数据
UPDATE EMP SET (ENAME,SAL,COMM)=(SELECT ENAME,SAL,COMM FROM EMP WHERE ENAME=’XX’)WHERE ENAME=’YY’
复制其他表数据
UPDATE EMPLEYEE SET DEPTNO=(SELECT DEPT FROM EMP WHERE EMPNO=7788)WHERE JOB=(SELECT JOB FROM EMP WHERE EMPNO=7788)
⑨.删除所有记录但保留表结构.
Truncate table table_name;
⑩.事务
a. 当出现下面的事件时,事务便结束
①. commit or rollback 被执行时.
②. Ddl or dcl被执行时.create or drop 等
③. 用户退出.
④. 系统中止或当机.
b. 事务保存点.
update ....
savepoint update_done
insert ....
rollback TO update_done
主外键失效
alter table table_name disable constraint constraint_name
相关推荐
在添加主键约束时,Oracle会检查主键列是否存在重复值。如果存在,将会抛出错误。为了避免这个问题,可以先进行重复数据的检查: ```sql SELECT * FROM jk_upczyd_max WHERE Id IN ( SELECT Id FROM jk_upczyd_max...
其次,如果我们已经创建了表,然后想要删除主键约束,可以采用以下方法: 1. **删除已有主键约束**: - **有命名**:当你知道主键约束的名字时,可以直接使用`alter table`语句删除,例如: ```sql alter table ...
### Oracle的约束(Constraint)详解 #### 约束类型介绍与管理 Oracle数据库通过约束(Constraint)确保数据的一致性和完整性,这是数据库设计的重要组成部分。对于初学者而言,理解Oracle中的不同约束类型及其...
本文将深入探讨Oracle字段约束的五种主要类型:主键约束、唯一性约束、非空约束、检查约束以及外键约束。 首先,主键约束(PRIMARY KEY)是表的核心组成部分,它定义了一个或一组列,其值必须唯一且不能为NULL。...
主键约束保证了主表中的唯一性,而外键约束则维护了子表与主表之间的关联,`ON DELETE CASCADE` 规则使得删除操作能自动更新相关联的子表。在实际数据库设计中,要充分考虑这些约束的设置,以确保数据的完整性和业务...
**示例**:删除`student`表中的主键约束。 ```sql ALTER TABLE student DROP CONSTRAINT SYS_C002715; ``` 通过以上内容,我们可以了解到在Oracle数据库中如何灵活地管理表结构。无论是增加、修改还是删除字段,又...
- **主键约束(PRIMARY KEY)**: 主键是一个或多个字段的组合,它们共同定义表中的唯一记录。主键约束同时包含了非空和唯一约束,不允许有重复或NULL值。 - **外键约束(FOREIGN KEY)**: 外键约束用于建立表之间的...
在子表中添加主键和其他必要的约束。 ```sql ALTER TABLE students ADD CONSTRAINT pk_students PRIMARY KEY (student_id) USING INDEX TABLESPACE student_index; ALTER TABLE students ADD CONSTRAINT uk...
在外键约束中,还可以指定`ON DELETE`行为来处理删除操作,例如`ON DELETE CASCADE`表示当删除父表中的行时自动删除子表中的对应行。 #### 非空约束(Not Null) 非空约束确保字段值不能为空。例如: ```sql ...
此外,文章还介绍了基本的Oracle操作语句,包括创建表、修改列属性、添加列、添加主键约束和非空约束、删除主键约束、失效约束、有效约束等。这些语句对于初学者非常重要,因为它们可以帮助初学者快速地掌握Oracle...
通过定义主键约束,Oracle可以确保数据的唯一性,例如:`CREATE TABLE books (book_id NUMBER(10) PRIMARY KEY)`。同时,主键可以被用来创建索引,以加速数据检索。 3. 参照完整性(Referential Integrity): ...
3. **保证数据完整性**:主键约束确保了在尝试插入或更新记录时,不会出现重复的主键值,防止了数据的混乱。 在Oracle中,创建主键有以下两种方式: 1. **创建表时指定主键**:在CREATE TABLE语句中使用`PRIMARY ...
3. **主键约束(PRIMARY KEY)**:主键是一个或一组列,其值唯一标识表中的每一行,并且不允许有NULL值。一个表只能有一个主键。 4. **外键约束(FOREIGN KEY)**:外键关联两个表,确保参照完整性,即一个表的外键...
如果删除的是主键约束并且想要级联删除相关的外键约束,可以在`DROP`命令后加上`CASCADE`关键字: ```sql ALTER TABLE i_top DROP PRIMARY KEY CASCADE; ``` #### 禁用约束 在某些情况下,可能需要临时禁用约束...
本文将深入探讨Oracle约束的基本语法以及如何修改表结构。 首先,Oracle约束可以分为五种类型: 1. **NOT NULL约束**:不允许字段值为空,确保了字段必须有值。 2. **UNIQUE约束**:确保字段中的值是唯一的,但...
- **主键约束**:唯一标识表中的每一行,不允许有重复值,且不能为空。 - **非空约束(NOT NULL)**:确保列中的值不能为NULL。 - **唯一约束(UNIQUE)**:保证列中的值唯一,但允许有NULL值。 - **检查约束...