SQL 如何添加带约束的新列

我记得一个周末,我坐在电脑前,面前是一张包含客户信息的数据库表。
突然,我的老板走过来说,我需要在这个表中添加一个新列来存储客户电话号码。
我查看表结构,发现没有电话号码一栏,于是我开始添加一栏。

我打开 SQL 编辑器并开始编写 ALTER TABLE 语句。
我首先确定新列的名称是phone_number,数据类型是VARCHAR(1 5 ),因为电话号码通常为1 5 位或更少。
然后我想了想,意识到这个电话号码不能为空或重复,所以我在最后添加了 NOT NULL 和 UNIQUE 约束。

写完语句后,我执行了它,然后查看屏幕上的提示,新列已成功添加到表中。
我检查了一下,发现所有客户信息都井然有序,没有出现因添加新列而导致的错误。

等等,我突然想到,如果这个表中已经存在数据,那么在添加NOT NULL约束之前我需要确保所有的电话号码字段都有值,否则会报错。
我检查了一下,确认了一下,然后心情平静了。

那天晚上我加班到很晚,回顾了所有这些操作,包括如何添加主键、外键、检查约束等其他类型的约束。
通过这次经历,我对ALTERTABLE语句有了更深入的了解。
不过,我还是有点好奇。
如果表的数据量很大,添加限制会影响数据库的性能吗?

sql 中 unique 约束用法_sql 中 unique 约束确保唯一性技巧

唯一约束确保列值是唯一的。

白话:防止列中数据重复。

示例:电子邮件字段不能重复。

建表时直接添加:
sql 创建表用户(ID INT 主键,电子邮件 VARCHAR(2 5 5 ) UNIQUE);
向现有表添加约束:
MySQL: SQL 更改表用户约束 UNIQUE_EMAIL UNIQUE(电子邮件);
多列的独特组合:
sql 创建表订单(order_id INT PRIMARY KEY,user_id INT,product_id INT,UNIQUE(user_id,product_id));
注意:NULL 值的处理方式不同。

MySQL 允许多个 NULL。
PostgreSQL 将多个 NULL 视为重复项。

与主键的区别:
主键:只能有一个,且必须非空。
唯一约束:多个、零权限(参见数据库)。

示例: SQL 创建表员工(ID INT 主键,ssn VARCHAR(1 1 ) 唯一非空);
实用注意事项:
索引开销:如果数据量较大或者更新频繁,索引会很慢。

冲突管理:
PostgreSQL:关于冲突。
MySQL:忽略或插入重复的密钥更新。

删除约束:如果不再需要则删除它们,否则会影响新添加的内容。

自己掂量一下。