Oracle与MySQL删除字段时对索引与约束的处理对照
2008-06-05 12:43:06 来源:WEB开发网现在,我们先删除索引上的字段,其实并没有物理删除,只是设置为unused:
SQL10G>ALTERTABLEtestSETUNUSED(c);
Tablealtered.
SQL10G>selectt.index_name,t.column_name,t.column_position,i.status
2fromuser_ind_columnst,user_indexesi
3wheret.index_name=i.index_name
4andt.table_name='TEST'
5orderbyindex_name,column_position;
norowsselected
发现了什么,索引也删除了。那我们再删除约束上的字段呢?
SQL10G>ALTERTABLEtestSETUNUSED(b);
ALTERTABLEtestSETUNUSED(b)
*
ERRORatline1:
ORA-12991:columnisreferencedinamulti-columnconstraint
SQL10G>ALTERTABLEtestSETUNUSED(b)CASCADECONSTRAINTS;
Tablealtered.
SQL10G>selectt.constraint_name,c.constraint_type,t.column_name,t.position,c.status,c.validated
2fromuser_cons_columnst,user_constraintsc
3wherec.constraint_name=t.constraint_name
4andc.constraint_type!='C'
5andt.table_name='TEST'
6orderbyconstraint_name,position;
norowsselected
我们可以看到,正常的删除会报一个错误,如果我们指定了cascade,将会把对应的约束也删除。
我们看完了Oracle的处理过程,再看看mysql是这么处理删除索引上字段这个事情的
mysql>createtabletest(aint,bint,cint);
QueryOK,0rowsaffected(0.72sec)
mysql>altertabletestaddprimarykey(a,b);
QueryOK,0rowsaffected(0.27sec)
Records:0Duplicates:0Warnings:0
mysql>createindexind_testontest(b,c);
QueryOK,0rowsaffected(0.32sec)
Records:0Duplicates:0Warnings:0
- ››Mysql高性能备份方案解决数据不间断访问
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››删除Win8自带中文输入法方法
- ››mysql 定时更新表字段列的值状态(存储过程+定时任...
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
赞助商链接