今天看书整理笔记的时候,无意发现一个问题,记录下来: 前段时间做练习曾经创建过一个tbl_student的表,     
   create table tbl_student(
           snum number not null,
           sname varchar2(100),
           age number,
           constraint pk_student primary key(snum)
    );
这个表格一直都存放在PL/SQL里面,今天看 SQL必知必会这本书,对现有表添加主键约束这个知识点,我想跟着做练习,就重新建立个表student(因为之前的tbl_student以后还会用,所以新建表来做练习)
    create table student(
           snum number not null,
           sname varchar2(100),
           age number
    ); 接着就添加主键约束,
alter table student add constraint pk_student primary key(snum);        /* 这个报错,报错ORA-02264:名称已被一现有约束条件占用*/
alter table student add constraint pk_student_snum primary key(snum);          /* 这个ok  */ 一开始我以为constraint 必须跟pk_表名,也曾怀疑是不是以前的tbl_student影响了。
折腾一番,终于知道添加主键约束的公式是:alter table 表名 add constraint 约束名 primary key(主键字段名); 
只不过主键约束名我们常常这样来设定:pk_表名_主键标识,这样一看就明白意思。
同一个系统下,约束名不能重复。我又做了下面的实验:

create table t1(
    id number not null ,
    name    char(50) not null 
);
 
create table t2(
    id number not null ,
    name    char(50) not null ,
    address char(50) null
);
建完表之后再增加主键约束,
alter table t1 add constraint pk_id primary key(id);
alter table t2 add constraint pk_id primary key(id);    /* 执行这行就报错ORA-02264:名称已被一现有约束条件占用*/
 

但是要是这么写就可以运行了:

alter table t1 add constraint pk_t1_id primary key(id);

alter table t2 add constraint pk_t2_id primary key(id);

 
这一折腾,我又发现根据约束名反过来查询表名(比如上面例子,你知道约束名pk_t1_id,你想看看它是属于哪一个表的),sql语句这么来写:
select TABLE_NAME from all_constraints where CONSTRAINT_NAME='PK_T1_ID';

注意:

1.表应为:all_constraints

2.主键约束“PK_T1_ID ”必须大写

问题集-- SQL 约束名不能重复的更多相关文章

  1. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  2. SQL约束

    SQL约束: 非空约束:就是不能为null: 主键约束(PK):唯一,不重复,并且不为空: 唯一约束:唯一,允许为空,但只能出现一次: 默认约束:如果不给值,默认值: 检查约束:范围以及格式限制: 外 ...

  3. SQL查询语句去除重复行

    1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录 ...

  4. 创建与删除SQL约束或字段约束

    1)禁止所有表约束的SQLselect 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'2)删除 ...

  5. SQL约束和字段约束的创建和删除

    1)禁止所有表约束的SQLselect 'alter table '+name+' nocheck constraint all' from sysobjects where type='U' 2)删 ...

  6. 删除SQL约束的方法

    在SQL数据库中,如果需要删除表约束,应该如何操作呢?下面就将为您介绍删除SQL表约束的方法,供您参考,希望对您有所帮助. --1)禁止所有表约束的SQL select 'alter table '+ ...

  7. 用SQL语句,删除掉重复项只保留一条

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...

  8. Oracle表名、列名、约束名的长度限制

    Oracle数据库版本11.2.0.1.0 Oracle表名.列名.约束名的长度限制 1.查询用户所有的表 select * from USER_TABLES; 2.查询用户所有表的列 select ...

  9. Mysql笔记【3】-SQL约束

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

随机推荐

  1. Model&Animation

    [Model&Animation] 1.FBX文件是一个完整的模型,通常内含Mesh,Material,Texture,Animation,即内含构成一个完成GameObject所需要的一切组 ...

  2. inputs

    inputs.bind({ keyup:function(){$(this).val($(this).val().replace(/\D/g,''));}, focus:function(){if($ ...

  3. Linux下安装protobuf并实现简单的客户端服务器端通信

    http://code.google.com/p/protobuf/downloads/list上可以下载Protobuf的源代码. 安装步骤如下所示: 1>tar -xzf protobuf- ...

  4. RecyclerView 下拉刷新上拉加载

    步骤: 首先直接定义一个XRecyclerView继承RecyclerView,重写他的三个构造方法. init(Context mContext)方法用来初始化底部加载的view 回到XRecycl ...

  5. Opencv2系列学习笔记10(提取连通区域轮廓)

    连通区域指的是二值图像中相连像素组成的形状.而内.外轮廓的概念及opencv1中如何提取二值图像的轮廓见我的这篇博客:http://blog.csdn.net/lu597203933/article/ ...

  6. C#中利用委托实现多线程跨线程操作

    在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个 ...

  7. android ViewConfiguration

    ViewConfiguration 1.有时候要获取一些android UI的中一些默认参数的来进行操作设置,就要用到ViewConfiguration 官方飞解释是:ViewConfiguratio ...

  8. ActiveMQ的消息确认问题

    http://riddickbryant.iteye.com/blog/441890 [发送端] session = connection.createSession(Boolean.FALSE,   ...

  9. (剑指Offer)面试题31:连续子数组的最大和

    题目: 输入一个整型数组,数组里有正数也有负数,数组中一个或连续多个整数组成一个子数组,求所有子数组的和的最大值.要求时间复杂度为O(n) 思路: 1.数组累加 从头到尾逐个累加数组中的每个数字,当累 ...

  10. JavaScript 跨域:window.postMessage 实现跨域通信

    JavaScript 跨域方式实现方式有很多,之前,一篇文章中提到了 JSONP 形式实现跨域.本文将介绍 HTML5 新增的 api 实现跨域:window.postMessage . 1 othe ...