首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原 在PostgreSQL中秒级完成大表添加带有not null属性并带有default值的实验

近期同事在讨论如何在PostgreSQL中一张大表,添加一个带有not null属性的,且具有缺省值的字段,并且要求在秒级完成。...因为此,有了以下的实验记录: 首先我们是在PostgreSQL 10下做的实验: postgres=# select version();...建表,并查询表信息,插入数据: postgres=# create table add_c_d_in_ms(id int, a1 text, a2 text, a3 text, a4 text, a5...,如何快速添加这么一个字段: 首先,在这里我们涉及三张系统表,pg_class(表属性)、pg_attribute(列属性)、pg_attrdef(缺省值信息),接下来依次看一下三张表的信息: #pg_class...postgres=# alter table add_c_d_in_ms add a10 text; ALTER TABLE #如果添加not null属性的字段,则会检测其他字段属性,将会报错 postgres

8.2K130

PostgreSQL 教程

您将在此网站上找到快速有效地开始使用 PostgreSQL 所需的所有信息。 PostgreSQL 教程演示了 PostgreSQL 的许多独特功能,这些功能使其成为最先进的开源数据库管理系统。...使用 SERIAL 自增列 使用 SERIAL 将自动增量列添加到表中。 序列 向您介绍序列并描述如何使用序列生成数字序列。 标识列 向您展示如何使用标识列。 更改表 修改现有表的结构。...重命名表 将表的名称更改为新名称。 添加列 向您展示如何向现有表添加一列或多列。 删除列 演示如何删除表的列。 更改列数据类型 向您展示如何更改列的数据。 重命名列 说明如何重命名表中的一列或多列。...了解 PostgreSQL 约束 主题 描述 主键 说明在创建表或向现有表添加主键时如何定义主键。 外键 展示如何在创建新表时定义外键约束或为现有表添加外键约束。...检查约束 添加逻辑以基于布尔表达式检查值。 唯一约束 确保一列或一组列中的值在整个表中是唯一的。 非空约束 确保列中的值不是NULL。 第 14 节.

59210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编写高效SQL的三个基础原则

    在本文中,我将通过为表命名并通过规范化和约束避免数据错误,为高效的SQL编写奠定基础。 本系列的第二部分将介绍如何构建SQL以使其更易于阅读和调试。因此,让我们首先了解如何奠定基础。...下一步是有效地构建您的表。 规范化您的模式 数据库规范化是从表中删除冗余信息的过程。这避免了数据重复,并使某些类型的数据错误成为不可能。...更改这三列中的任何一列都意味着您还必须更改至少另外两列中的一列。通过从答案表中删除其中一列来避免这种不一致性。 请注意,更新测试存在一个例外。...如果您更改表的主键或其唯一约束之一中的所有列,则会出现这种情况。在这种情况下,您正在更改行的标识符,因此其他值也可能会发生更改。 与糟糕的名称一样,未规范化的表在现有应用程序中难以更改。...一个表只能有一个主键。唯一约束: 与主键类似,唯一约束阻止您存储重复值。与主键不同,您可以在唯一列中存储空值,并且一个表可以有多个唯一约束。外键: 定义父子关系。

    6700

    编写高效SQL的三个基础原则

    在本文中,我将通过为表命名并通过规范化和约束避免数据错误,为高效的SQL编写奠定基础。 本系列的第二部分将介绍如何构建SQL以使其更易于阅读和调试。因此,让我们首先了解如何奠定基础。...下一步是有效地构建您的表。 规范化您的模式 数据库规范化是从表中删除冗余信息的过程。这避免了数据重复,并使某些类型的数据错误成为不可能。...更改这三列中的任何一列都意味着您还必须更改至少另外两列中的一列。通过从答案表中删除其中一列来避免这种不一致性。 请注意,更新测试存在一个例外。...如果您更改表的主键或其唯一约束之一中的所有列,则会出现这种情况。在这种情况下,您正在更改行的标识符,因此其他值也可能会发生更改。 与糟糕的名称一样,未规范化的表在现有应用程序中难以更改。...一个表只能有一个主键。唯一约束: 与主键类似,唯一约束阻止您存储重复值。与主键不同,您可以在唯一列中存储空值,并且一个表可以有多个唯一约束。外键: 定义父子关系。

    8510

    MySQL_库和表的使用(部分未完

    在SC表中的Cno列后面新增一列Grade 如果不加after,默认加在最后一列 新增一列之后,此列的数据默认为NULL 查看一下表结构,发现列信息被加入进去了: 新增列(字段)时设置默认数据填充 由于一般新增列的时候...一张表中只能有一个主键,但是主键可以是由一列构成,也可以由多列复合而成(复合主键),只要复合主键中并不是每一列的数据都是相同的,那么这个数据就是唯一的。...设置现有列(字段)为主键 在添加新字段时设置为主键 前提是表中没有主键 设置复合主键 创建新表时设置 不能用第一种方式创建 会报错“定义了重复主键” 设置现有字段为复合主键 此前表中没有主键 更多...在test表中插入数据Sno、Sage(Sno必填,因为是主键),如果填入的内容与主键发生重复冲突,则更新update语句后面指定字段中的内容 示例中是,如果发生主键/唯一键冲突,则将该主键/唯一键对应的数据中...要插入的数据的主键/唯一键与现有数据冲突时,replace将现有数据所有字段删除,将要插入的数据重新插入。即replace在遇到冲突时,是先删除,后插入。

    12210

    Mysql资料 主键

    一.简介 主键意味着表中每一行都应该有可以唯一标识自己的一列(或一组列)。 一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID 或 雇员社会保险号。...主键(primary key) 一列(或一组列),其值能够唯一区分表中的每个行。 唯一标识表中每行的这个列(或这组列)称为主键。...表中的任何列都可以作为主键,只要它满足以下条件: 1、任何两行都不具有相同的主键值 2、每个行都必须具有一个主键值(主键列不允许NULL值) 除MySQL强制实施的规则外,应该坚持的几个普遍认为的最好习惯为...2、.如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置: 此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉...如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并一次作为主键。 mysql 在频繁的更新、删除操作,会产生碎片。而含碎片比较大的表,查询效率会降低。

    3.8K20

    《MySQL入门很轻松》第5章:数据完整性及其分类

    (3)引用完整性:数据库中的表和表之间的字段值是有联系的,甚至表自身的字段值也是有联系的,其中一个表中的某个字段值不但要符合其数据类型,而且必须是引用另一个表中某个字段现有的值。...例如,在“成绩”表中的“课程编号”列对应“课程”表中的“课程编号”列;在“课程”表中的“教师编号”列对应“教师”表中的“教师编号”列。 3. 主键约束 主键,又称主码,是表中一列或多列的组合。...假如,要在酒店客户管理系统的数据库company中创建一个数据表用于保存房间信息,并给房间编号添加主键约束,表的字段名和数据类型如下表所示。...可以使用 Alter语句为现有表添加主键。...举例说明 在Hotel数据库中定义数据表Roominfo_02,创建完成之后,在该表中的Roomid字段上创建主键约束。

    87420

    SQL笔记(1)——MySQL创建数据库

    因为外键约束的作用是确保参考表中的某一列值必须存在于当前表的某一列中,所以参考表中的该列必须设置为唯一的且非空。...例如,我们可以使用 ALTER TABLE 添加新的列,更新现有的列数据类型,为表添加限制约束条件等等。这个命令是关系型数据库管理系统(RDBMS)中必不可少的一个功能。...需要注意的是,在MySQL中,约束可以在创建表时一起定义,也可以在表创建后通过ALTER TABLE语句来添加和修改。...主键是一种用于唯一标识关系型数据库表中每一个记录的一列或若干列(确保它们的组合值在整个表中是唯一的)。...以下是MySQL约束在开发中的应用: 主键约束:可以保证表中每一行数据都有唯一的标识符,而且这个标识符不能为空。主键约束在查询和排序时也能提高性能。

    3.1K20

    MySQL从删库到跑路_高级(一)——数据完整性

    D、自定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。 ? 2、数据完整性实现方式 ? MySQL不支持Check约束,虽然可以在列上添加check约束,但不起作用。...二、实体完整性实现 1、实体完整性的实现简介 实体完整性的实现有两种方式: A、主键约束:一张表只能有一列设置主键,值必须唯一,不允许为空,innoDB存储引擎,主键就是索引。...B、唯一值约束:一张表可以有多个列添加唯一值约束,一直允许一条记录为空值。 实体完整性,由主键和唯一性约束来实现,确保表中记录有一列唯一标识。...MyISAM类型的存储引擎不会在主键列上创建索引,表中记录的存储顺序与插入顺序相同。 ? InnoDB存储引擎会自动在主键列上创建索引,插入的记录会根据主键的值的顺序排放。...table score add CONSTRAINT uc_sname UNIQUE(sname); 如果表中现有记录有重复值,不允许添加唯一性约束。

    1.9K20

    【MySQL 系列】MySQL 语句篇_DDL 语句

    \ 改语句定义了表中的一列。...您可以通过使用 FIRST 关键字将列添加为表的第一列,或者使用 AFTER existing_column 将新列添加到现有列 existing_column 的后面;⑤ 如果需要在一个语句中添加多个列...在 MySQL 中,主键需要遵循以下规则: 主键是定义在表上的。一个表不强制定义主键,但最多只能定义一个主键。 主键可以包含一个列或者多个列。 主键列的值必须是唯一的。...这样即使一个表被分区在多个服务器上,也不会产生相同的主键的记录; 使用 UUID_SHORT() 函数。UUID_SHORT() 函数返回一个 64 位无符号整数并全局唯一。...如果返回为真,则 MySQL 允许此行插入到表中,否则 MySQL 拒绝此行插入到表中并给出错误。

    32210

    【重学 MySQL】六十四、主键约束的使用

    【重学 MySQL】六十四、主键约束的使用 在MySQL中,主键约束(PRIMARY KEY)用于唯一标识表中的每一行数据。...需要注意的是,一张表只能有一个主键,无论是单列主键还是联合主键。 在表创建后添加主键 如果表已经创建但还没有主键,可以通过ALTER TABLE语句来添加主键。...主键约束对应着表中的一列或者多列(复合主键) 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。 MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。...注意事项 唯一性检查:在插入或更新数据时,MySQL会检查主键约束列的值是否唯一。如果发现有重复的值,则会报错并拒绝插入或更新操作。 非空性检查:在插入数据时,MySQL会检查主键约束列的值是否为空。...因此,在设计表结构时需要权衡利弊。 总之,主键约束是MySQL中非常重要的一种约束类型,它保证了表中数据的唯一性和完整性。在创建表时,应该根据实际需求合理地选择主键列并添加主键约束。

    14610

    mysql小结(1) MYSQL索引特性小结

    即访问频率越高使其距离根节点越近。...一般情况下mysql中使用主键 做聚簇索引一个表只能有一个聚簇索引。(一条记录物理存储只有一份)非聚簇索引中叶子节点的记录中需要保存主键,如需访问记录中其他部分还需要,通过主键回表查询。...当有字符串和数字都能满足代理主键【该主键与业务无关只是添加一列主键保证记录唯一性】需求时,应当优先选择数字做主键,但是如果逻辑主键【业务中有作为主键的列,也可选为主键,即为逻辑主键】是字符串类型,那也应该选择其作为主键.../O,提高速度,所以当分页没有特别指定的列时,指定主键排序即可,另外不需要在联合索引最后一列添加主键,因为它本身包含主键 【非聚簇索引不存储完整记录,通过访问主键索引找到完整记录 】。...Using temporary:当 MySQL 在某些操作中必须使用临时表时,在 Extra 信息中就会出现Using temporary 。

    1.1K30

    数据库入门开发案例,真的是入门级别的!!看了不后悔。

    学生表为A表,档案表为B表) 唯一外键方式:在A和B任意一表中添加唯一外键(注意是添加完外键后,再点唯一键,进行设置)具体方式点此。 主键关联方式:当A和B的主键相同时,我们就认为是一组数据。...(注意是“我们就认为”,数据库中并没有提供主键关联的约束方式。)...中间关系表:创建一张新表作为中间关系表,两个列分别记录A和B,并且每一列的取值中,值均不能重复(即将这两列均设置为唯一外键,注意:将这两列“既设置为主键,又设置为外键”的方式不能实现该功能,因为可能会出现一列相等而另一列不相等的情况...2.数据库中一对多的实现方式: (如一个班级对应多个学生) 1 在多的一方添加外键:在学生表中添加一列,记录该学生是哪一个班的,该列设置成外键,取值为班级表的主键。...两列均为外键,一列取值为学生表中的唯一标识,一列取值为课程中的唯一标识。两列不用设置成为唯一键,因为每一列中均可有重复,但不能有两行数据在两列上完全重复。

    70720

    【Mysql】:linux环境下表的三部曲(数据操作 + 类型解析 + 约束规则)

    –唯一性 有了 主键 可以有 针对性 的 对数据进行增删查改 【案例 2】:表建好之和但没有主键,可以追加主键 基于上面的表,先把原始表中的主键先去掉,然后再添加主键,操作如下: mysql> alter...: 0 Warnings: 0 【复合主键】 虽然一张表中最多只能有一个主键,但是并不意味着一个表中的主键只能添加给一列!...也就是说一个主键可以被添加到一列,或者多列上,而 一个主键被添加到多列上的数据我们就叫做 复合主键 在创建表的时候,在所有字段之后,使用 primary key(主键字段列表) 来创建主键,如果有多个字段作为主键...auto_increment 值,使其成为下次插入的起始值。...索引使用: 快速定位:索引提供了指向存储在表的指定列中的数据值的指针,并根据指定的排序顺序对这些指针排序。

    3600

    看完这篇文章,99%的人都会使用Mysql Explain工具

    如果你不定义为您的表的主键 时,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚集索引。...MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义) union:在 union 中的第二个和随后的所有select 下面这个例子主要来了解(simple)查询类型 EXPLAIN...具体例子可参考,上面第二张图的table列 4.type列 这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。...7.key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...8.ref列 这一列显示了在key列记录的索引中,表查找值所用到的列或常量 9.rows列 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数。

    55210

    【MySql】表的约束

    站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是2....主键 primary key 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个。但是并不意味着一个表中的主键,只能添加给一列。...一个主键可以被添加到一列,或者多列上 主键;主键所在的列通常是整数类型 创建表的时候直接在字段上指定主键 mysql> create table if not exists test_key (...此时,在实际使用的时候,可能会出现什么问题? 有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?

    21530

    MySQL 数据类型的属性 约束 三大范式

    通常在数据表中将一个字段或多个字段组合设置为各种不同的值,以便能唯一的标识表中的每一条记录(保证数据的唯一性),这样的字段或多个字段成为数据表的主键。...简单讲就是 a 表中的一个字段 引用 b表中的主键字段 则引用该数据中的这个字段或字段组合就称为外键。 3、唯一约束(unique) 一个数据表中只能有一个主键。...5、默认值约束 默认值约束表示当数据表中某个字段不输入值时,自动为其添加一个已经设置好的值。...(可自定义默认值) 数据库设计的三大范式 第一范式: 数据表中每一列属性都是不可再分的属性性,确保**每一列的原子性**。...第二范式: 满足第一范式后,要求表中所有列都必须依赖于主键,而不能有任何一列与主键没有联系。 即一张表描述一件事情。

    1.2K20

    MYSQL数据库-表的约束

    零、前言 本章主要讲解学习MYSQl数据库中的表的约束 表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性...在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单 索引的作用相当于图书的目录...具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键 一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整...,不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有,在实际使用的时候,可能会出现有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中,这很明显是有问题的 因为此时两张表在业务上是有相关性的...解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入

    7.5K30

    【MySQL】表的约束

    ) 再为上表添加主键: 注意,一张表中最多只有一个主键,不意味着一个表的主键,只能添加给一列!...一个主键可以被添加到一列,或者多列上,这种叫做复合主键。 在创建表的时候,在所有字段之后,使用 primary key (主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。...我们可以通过 select last_insert_id(); 查看上一次插入的 auto_increment 的值: 索引:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构...,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键。

    15510
    领券