ORACLE新增主键问题【CREATE PRIMARY KEY AFTER CREATED A TABLE】

简介:
  我们都遇到过需要在已建立的表上新增主键的问题(设计发生变化时), 在建立主键时我们有些问题需要注意。
    1.最好指定主键名称和其他存储的属性
    
SQL> alter table larry_test add primary key (terminal_id);

Table altered.
    
    这样的SQL语句没有问题,但是将会有两个问题比较“讨厌”:
    主键名称不知,由系统生成。在DBA[USER]_INDEXES中INDEX_NAME显示的'SYS'开头的基本上就是由系统自动产生的。
    另外一点,我认为更重要一些。即建立的主键存储的表空间和原始表的相同。不利于平衡I/O(当然从某些存储的观点来看,值得商榷。),最起码还是应该将数据和索引分布在不同的表空间上会好些。
    建议使用:
    
  SQL> ALTER TABLE larry_test ADD CONSTRAINT pk_larry_test PRIMARY KEY (terminal_id)USING INDEX  TABLESPACE indx;

Table altered.
    
    当然如果再灵活些,还可以指定索引的存储参数等等。
    同时还有两个小问题:
    首先我们都知道所谓主键就是,该字段或多个字段上为唯一(unique)索引 且字段不为空
    那么问题1:在允许为空的字段上是否可以创建索引?
    答案是:可以也不可以。
     可以的情况是该字段虽允许为空,但所有被存储的数据中,该字段没有为空的!字段可以创建索引。反之,不可以。
    2.这个问题很有意思,在允许为空的字段上创建了主键,如果主键被删除,该字段又是怎样的属性呢?
    答案是:我们通过实验发现,一旦主键被建立,该字段属性变为非空(NOT NULL),当主键被删除后,该字段属性恢复建立主键建立前属性,即允许为空。
     

    -:)

本文转自Be the miracle!博客51CTO博客,原文链接http://blog.51cto.com/miracle/55315如需转载请自行联系原作者


Larry.Yue

相关文章
|
8月前
|
Oracle 关系型数据库 MySQL
Oracle与MySQL的主键自增方式
Oracle与MySQL的主键自增方式
|
4小时前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
94 0
|
6月前
|
Oracle Java 关系型数据库
oracle实现主键自增长及自动生成策略
oracle实现主键自增长及自动生成策略
221 0
|
4小时前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
北京某国企客户Oracle 11g R2数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表数据。 Oracle数据库执行Truncate命令的原理:在执行Truncate命令后ORACLE会在数据字典和Segment Header中更新表的Data Object ID,但不会修改实际数据部分的块。由于数据字典与段头的DATA_OBJECT_ID与后续的数据块中的并不一致,所以ORACLE服务进程在读取全表数据时不会读取到已经被TRUNCATE的记录,但是实际数据未被覆盖。
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
|
4小时前
|
Oracle 关系型数据库 索引
Oracle-维护存在主键的分区表时的注意事项
Oracle-维护存在主键的分区表时的注意事项
75 0
|
10月前
|
SQL 存储 Oracle
Oracle数据库中日期的操作、主键自增与分页查询
Oracle数据库中日期的操作、主键自增与分页查询
82 0
|
6月前
|
Oracle 关系型数据库 数据库
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
57 1
|
12月前
|
Oracle 关系型数据库
oracle 12c新功能 recover table恢复单个表
不支持sys用户和system表空间的表
100 0
|
12月前
|
SQL XML Oracle
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(下)
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(下)
|
12月前
|
SQL XML Oracle
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(中)
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(中)