primary-key - 我们如何在表中创建主键
问题描述
如何在表中创建主键。我使用以下命令创建了一个,但似乎没有强制执行该密钥:
ALTER TABLE tablename ADD PRIMARY KEY (column1,column3);
解决方案
虽然 Snowflake 中不强制使用主键,但您可以使用 MERGE 语句插入数据以强制该键的唯一性。这种方法需要确保源数据集不包含重复项,例如使用 QUALIFY 函数。
例子:
CREATE TABLE IF NOT EXISTS test (
col1 VARCHAR(50) NOT NULL,
col2 VARCHAR(50),
col3 VARCHAR(50) NOT NULL,
constraint PK_test primary key (col1, col3) not enforced
);
MERGE INTO TEST AS tgt
USING (
SELECT COL1, COL2, COL3 FROM (
SELECT 'a' COL1, 'b' COL2, 'a' COL3
UNION
SELECT 'a' COL1, 'c' COL2, 'a' COL3
UNION
SELECT 'a' COL1, 'd' COL2, 'a' COL3)
QUALIFY row_number() over (partition by COL1, COL3 order by COL2) = 1
)AS src
ON (tgt.COL1=src.COL1 AND tgt.COL3=src.COL3)
WHEN NOT MATCHED
THEN INSERT (COL1, COL2, COL3)
VALUES (src.COL1, src.COL2, src.COL3);
只插入了 a,b,a 行。
推荐阅读
- mysql - 如何在 SQL 中使用 UNION 时将行源添加为另一列
- python - MatplotlibDeprecationWarning: '.predictImage()' 已被弃用!请改用'classifyImage()'
- javascript - 如何将自定义工具提示放置在绘图条形图中的条形顶部?
- json - 从 JSON 响应 TERADATA 中提取多个值
- javascript - 如何在执行依赖于 setState 值的后续步骤之前等待 setState
- intellij-idea - 如何编写生成成员变量和构造函数参数的IDEA活模板?
- java - Spring State Machine 和 Papyrus 创建默认等待状态
- github - 如何将 Github 操作设置为必需的状态检查
- asciidoc - 修剪包含的源代码片段中的空格
- xamarin - 在 Xamarin 中点击时如何分配属性