postgresql删除主键的操作

 更新时间:2021年01月06日 15:33:20   作者:Thornger  
这篇文章主要介绍了postgresql删除主键的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

ALTER TABLE tablename DROP CONSTRAINT primaryname。

talbename:表示表名

primaryname:表示主键名

例子:

postgres=# \d c_tab;
     Table "public.c_tab"
 Column  |   Type    | Modifiers 
---------------+-----------------------------+-----------
 uptime  | timestamp without time zone | not null
 temp   | integer      | 
Indexes:
 "c_tab_pkey" PRIMARY KEY, btree (uptime)

上面的c_tab_pkey就是主键名。

postgres=# alter table c_tab drop constraint c_tab_pkey;
ALTER TABLE

补充:PostgreSQL的级联删除(主键删除则外键数据记录同时删除)

背景描述:

最近的一个项目中,所涉及的数据库表之间有设置级联关系,即表legal_positionsinfo中的id是表legal_approval的外键。

现在有一个功能是根据id删除表legal_positionsinfo中的一条记录。

但是在程序调试删除时,报错如下:

update or delete on table "legal_positionsinfo" violates foreign key constraint "legal_approval_position_id_fkey" on table "legal_approval" DETAIL: Key (id)=(1) is still referenced from table "legal_approval".

主要是因为两表之间存在级联关系,主键记录删除则外键记录也应该同时删除。

解决办法:

这里使用的是强大的数据库管理和设计工具Navicat,需要在数据库中设置级联删除,即将NO ACTION 改为 CASCADE即可:

那外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL都代表着什么意思呢?区别是什么呢?

CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;

SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;

RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;

NO ACTION:同 RESTRICT,也是首先先检查外键;

SET DEFAULT:父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别。

外键约束使用最多有两种情况:

1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;

2)父表更新时子表也更新,父表删除时子表匹配的项也删除。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • postgresql 获取两个时间类型小时差值案例

    postgresql 获取两个时间类型小时差值案例

    这篇文章主要介绍了postgresql 获取两个时间类型小时差值案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL利用递归优化求稀疏列唯一值的方法

    PostgreSQL利用递归优化求稀疏列唯一值的方法

    这篇文章主要介绍了PostgreSQL利用递归优化求稀疏列唯一值的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • GP如何查询并删除重复数据

    GP如何查询并删除重复数据

    这篇文章主要介绍了GP如何查询并删除重复数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 关于PostgreSql数据库与mysql数据库的不同点以及注意事项

    关于PostgreSql数据库与mysql数据库的不同点以及注意事项

    PostgreSQL和MySQL是两种流行的关系型数据库管理系统(RDBMS),它们都可以用来存储和管理数据,但是它们在某些方面有所不同,下面这篇文章主要给大家介绍了关于PostgreSql数据库与mysql数据库的不同点以及注意事项的相关资料,需要的朋友可以参考下
    2023-05-05
  • PostgreSQL 数据同步到ES 搭建操作

    PostgreSQL 数据同步到ES 搭建操作

    这篇文章主要介绍了PostgreSQL 数据同步到ES 搭建操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • SQLite教程(七):数据类型详解

    SQLite教程(七):数据类型详解

    这篇文章主要介绍了SQLite教程(七):数据类型详解,本文讲解了存储种类和数据类型、类型亲缘性、比较表达式、操作符等内容,需要的朋友可以参考下
    2015-05-05
  • PostgreSQL中常用的时间日期脚本使用教程

    PostgreSQL中常用的时间日期脚本使用教程

    PostgreSQL是一款简介而又性能强大的数据库应用程序,其在日期时间数据方面所支持的功能也都非常给力,下面就来看一下PostgreSQL中常用的日期时间脚本使用教程.
    2016-05-05
  • 在postgresql中运行sql文件并导出结果的操作

    在postgresql中运行sql文件并导出结果的操作

    这篇文章主要介绍了在postgresql中运行sql文件并导出结果的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Postgresql中json和jsonb类型区别解析

    Postgresql中json和jsonb类型区别解析

    在我们的业务开发中,可能会因为特殊【历史,偷懒,防止表连接】经常会有JSON或者JSONArray类的数据存储到某列中,这个时候再PG数据库中有两种数据格式可以直接一对多或者一对一的映射对象,接下来通过本文介绍Postgresql中json和jsonb类型区别,需要的朋友可以参考下
    2024-06-06
  • postgresql 12版本搭建及主备部署操作

    postgresql 12版本搭建及主备部署操作

    这篇文章主要介绍了postgresql 12版本搭建及主备部署操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论