草庐IT

5.1 SQL Server主键约束

Michael Shen 2023-03-28 原文

主键约束(PRIMARY KEY)

SQL Server PRIMARY KEY(主键)约束简介

主键是唯一标识表中每一行的一列或一组列。您可以使用主键约束为表创建主键。
如果主键仅包含一列,你可以使用PRIMARY KEY约束作为列约束:

CREATE TABLE table_name (
    pk_column data_type PRIMARY KEY,
    ...
);

如果主键有两列或多列,则必须将主键约束用作表约束:

CREATE TABLE table_name (
    pk_column_1 data_type,
    pk_column_2 data type,
    ...
    PRIMARY KEY (pk_column_1, pk_column_2)
);

每个表只能包含一个主键,一个主键可以包含多个列,即多个列的组合不能重复。参与主键的所有列必须定义为NOT NULL。如果未为所有主键列指定NOT NULL约束,SQL Server会自动为这些列设置非空约束。

SQL Server PRIMARY KEY约束示例

以下示例创建了一个具有主键的表,主键由一列组成:

CREATE TABLE dbo.activities (
    activity_id INT PRIMARY KEY IDENTITY,--主键
    activity_name VARCHAR (255) NOT NULL,
    activity_date DATE NOT NULL
);

在表dbo.activities中,activity_id列是主键列,意味着这一列的值不能重复

IDENTITY属性用于activity_id列自动生成唯一的整数值。

下面创建一个由两列组成外键的新表:

CREATE TABLE dbo.participants(
    activity_id int,
    customer_id int,
    PRIMARY KEY(activity_id, customer_id)
);

在本例中,activity_idcustomer_id列中的值可以重复,但两列中的每个值组合都必须是唯一的。

通常,表总是在创建时定义主键。然而,有时,现有表可能没有定义主键。在这种情况下,可以使用ALTER TABLE语句向表中添加主键。比如示例:

先创建一个没有主键列的表:

CREATE TABLE dbo.events(
    event_id INT NOT NULL,
    event_name VARCHAR(255),
    start_date DATE NOT NULL,
    duration DEC(5,2)
);

然后使event_id列成为主键:

ALTER TABLE sales.events 
ADD PRIMARY KEY(event_id);

注意,如果 sales.events 表已经有数据,在将 event_id 列提升为主键之前,必须确保 event_id 中的值是不重复的。

有关5.1 SQL Server主键约束的更多相关文章

  1. 软约束、硬约束、Minimum Snap的轨迹优化方法 - 2

    文章目录前言约束硬约束的轨迹优化Corridor-BasedTrajectoryOptimizationBezierCurveOptimizationOtherOptions软约束的轨迹优化Distance-BasedTrajectoryOptimization优化方法前言可以看看我的这几篇Blog1,Blog2,Blog3。上次基于MinimumSnap的轨迹生成,有许多优点,比如:轨迹让机器人可以在某个时间点抵达某个航点。任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。MinimumSnap可以把问题转换为凸优化问题。缺点:MnimumSnap可以控制轨迹一定经过中间的

  2. ruby-on-rails - 子域约束并排除某些子域 - 2

    在我的routes.rb文件中,我想使用rails3中的子域约束功能,但是我想从catchall路由中排除某些域。我不想在特定的子域中有特定的Controller。这样做的最佳做法是什么。#thissubdomainidontwantallofthecatchallroutesconstraints:subdomain=>"signup"doresources:usersend#hereIwanttocatchallbutexcludethe"signup"subdomainconstraints:subdomain=>/.+/doresources:carsresources:sta

  3. ruby-on-rails - 在 Rails 4 迁移中设置自定义主键时出现问题 - 2

    我使用postgresql9.3、Ruby2.0、Rails4.0.0。在阅读了很多有关在表上设置主键的问题后,我生成并添加了以下迁移:classCreateShareholders我还在我的模型中添加了self.primary_key="uid"。迁移成功运行,但是当我使用pgAdminIII连接到数据库时,我看到uid列未设置为主键。我错过了什么? 最佳答案 看看thisanswer.尝试执行“ALTERTABLEshareholdersADDPRIMARYKEY(uid);”,而不在create_tableblock中指定pr

  4. ruby-on-rails - 在rails中创建一个表并添加外键约束 - 2

    我有一个表students,字段为ward_id,我必须创建一个名为guardian_users的表,字段为id,ward_id,email,guardian_id,hashed_pa​​ssword等现在我必须添加约束外键。学生中的任何更新/删除/编辑/插入应该对guardian_users具有相同的效果。我如何在Rails2.3.5中做到这一点?students表存在,但其他表还不存在。 最佳答案 您要么需要foreign_key_migrations插件或#execute方法。假设您使用插件:classCreateGuardi

  5. ruby-on-rails - routes.rb,如何为路径设置不同的主键? - 2

    给定像Thread(id,uuid)这样的模型,uuid是一个唯一生成的标识符。我想更改默认路由:edit_threadGET/threads/:id/edit(.:format){:action=>"edit",:controller=>"threads"}threadGET/threads/:id(.:format){:action=>"show",:controller=>"threads"}PUT/threads/:id(.:format){:action=>"update",:controller=>"threads"}不使用:id而是使用用户:uuid---这在Rails/

  6. ruby-on-rails - 如何在 Rails 中实现复合主键 - 2

    我有一个如下所示的User模型:classUser数据库中的users表有两个外键organization_id和department_id。如何使这两列成为复合主键?到目前为止,我在网上看到了两种方法:选项1使用composite_primary_keysgem选项2使用如下方式为两列中的每一列添加索引:add_index:users,[:organization_id,:department_id],unique:true我的问题在users表中唯一标识一行的最佳方法是什么,其中一行必须按顺序具有department_id和organization_id被唯一识别?索引两列和简单地

  7. ruby - Rails 中的 FactoryGirl - 具有唯一约束的关联 - 2

    这个问题是对这里提出的问题的扩展:Usingfactory_girlinRailswithassociationsthathaveuniqueconstraints.Gettingduplicateerrors所提供的答案对我来说非常有效。这是它的样子:#Createsaclassvariableforfactoriesthatshouldbeonlycreatedonce.moduleFactoryGirlclassSingleton@@singletons={}defself.execute(factory_key)begin@@singletons[factory_key]=Fa

  8. ruby-on-rails - 使用 rspec 测试具有子域约束的​​路由 - 2

    我在使用子域约束进行rspec路由测试时遇到问题。特别是我有一条路线constraints:subdomain=>"api"doresources:sign_ups,:only=>[:create]end和(除其他外)测试it"doesallowcreationofsignups"do{:post=>"/sign_ups"}.shouldroute_to(:controller=>"sign_ups",:action=>"create",)end如果我删除子域约束,则此测试通过,但它会失败。我必须告诉rspec使用子域,但我不知道如何使用TIA安迪 最佳答案

  9. ruby - 是否可以使用事件记录为表定义复合主键? - 2

    这个问题在这里已经有了答案:HowtosetcompositekeyinRailsapplication(2个答案)关闭8年前。我在没有Rails的ruby​​项目中使用ActiveRecord。我需要为表定义复合主键。通常迁移会自动创建主键。是否可以使用事件记录为表定义我自己的复合主键?

  10. ruby-on-rails - 使用基于已安装引擎的 url_for 获取基于约束的 url - 2

    有什么方法可以让url_for在Action调度路由期间根据request.host返回url吗?mountCollaborate::Engine=>'/apps/collaborate',:constraints=>{:host=>'example.com'}mountCollaborate::Engine=>'/apps/worktogether'示例:当用户在example.com主机上时collaborate_path=>/apps/collaborate当用户在任何其他主机上时collaborate_path=>/apps/worktogether经过大量研究,我意识到Rou

随机推荐