SQL键简介
#sql #database #datascience #data

在用于存储和检索数据的数据库中,密钥非常重要。 SQL和NOSQL数据库都具有密钥的概念。
在SQL中,键是表中用于识别特定行并在表之间找到或创建关系的表中的字段。

密钥被认为有用,因为以下

  1. 在两个表之间建立关系。
  2. 在数据库中保持数据一致和有效。
  3. 有助于快速检索数据。
  4. 保持表中的独特性

SQL支持各种类型的密钥:

  • 主键
  • 候选钥匙
  • 唯一键
  • 复合键
  • 超钥匙
  • 替代键
  • 外键

注意:您应该安装 mysql 关系数据库管理系统(RDBMS)


首要的关键

创建一个主键是为了在表中唯一识别每个记录。标记为主键的列不允许具有零值。它在整列中保持独特的值。
一张表只有一个主键,尽管在某些情况下可以使用两个列来得出其主键。

提示:请参见下面 - 复合键
创建表时可以使用创建语句定义主键。

将主键添加到一个表

CREATE TABLE Product(
  product_id INT NOT NULL PRIMARY KEY,
  product_name VARCHAR(200) NOT NULL
)

用主键创建表的另一种方法

CREATE TABLE Product(
  product_id INT NOT NULL,
  product_name VARCHAR(200) NOT NULL,
  PRIMARY KEY (product_id)
)

假设您在第一次创建表时没有定义主键,您可以使用Alter Tabt命令以后定义它:

ALTER TABLE Product
ADD CONSTRAINT PK_Product PRIMARY KEY (product_id);

候选密钥

候选键是可以用作主键的表的键。表可以由多个候选密钥组成;其中,可以选择一个主要键。任何可以选择为主要键的列,该列或列是候选密钥。

CREATE TABLE Students(
  id PRIMARY KEY NOT NULL,
  first_name VARCHAR(100),
  last_name VARCHAR(100),
  email VARCHAR(255) NOT NULL,
  registration_number NOT NULL,
  ssn integer NOT NULL,
  residence VARCHAR(200)
)

ID,注册_number和社会保险号(SSN)是候选密钥。我们已经确定了ID作为主要密钥。如果我们从表中删除/删除ID,则可以作为主要键。这是因为每个属性都是每个学生独有的。有两个具有相同注册号或社会保险号的学生是不对的。

独特的钥匙

唯一的键可以像主键一样唯一地识别表中的每一行。但是,与主键不同,唯一键只能具有一个空值,并且不允许在列中重复值。在学生表中,注册_nos被确定为唯一的键。我们不能有两个学生拥有相同的注册号。

CREATE TABLE Students( 
  id PRIMARY KEY NOT NULL,
  first_name VARCHAR(100),
  last_name VARCHAR(100),
  email VARCHAR(100) NOT NULL,
  registration_number VARCHAR(100) NOT NULL UNIQUE,
  ssn INT NOT NULL,
  residence VARCHAR(200)
)

复合键

创建表格时,可能会出现一个情况,而单列没有提供足够的独特信息来充当主要键。在这种情况下,表中的两列将被合并为主要键。
当表中的主要键由两个或多个列组成时,我们有一个复合键。
复合键也可以称为化合物或串联键。

CREATE TABLE sales_order( 
  customer_id VARCHAR(150) NOT NULL,
  order_id INT NOT NULL,
  product_code VARCHAR(150) NOT NULL,

  PRIMARY KEY (customer_id, product_code)
)

customer_id    order_id    product_code
 --------   --------    ------------
   C01        O001         P007
   C02        O123         P007
   C02        O123         P230
   C01        O001         P890

单独的这些列都无法作为主要键的角色。
customer_id不能成为关键,因为同一客户可以下达多个订单,因此相同的客户可以具有多个条目。
order_id本身不能是主要键,因为相同的顺序可以包含多个产品的顺序,因此可以多次出现相同的订单_id。
product_code不能成为主要键,因为一个以上的客户可以下订单相同的产品。

基于此,可以肯定地假设主键应从一个以上的列中得出:上表中的主键可以从:{customer_id,product_code}

中。

超键

这是一组列,可以唯一地标识表中的每一行。它是两个或多个列的组合,可用于在表中唯一识别记录。

备用密钥

备用密钥是一个候选密钥,目前尚未选择为主键。它可以用作主要密钥,但目前不是主要键。备用键也可以称为辅助键。
SSN,上述学生表中的registration_number是替代键的示例。

外键

外键是表中的一列,该列被用作另一个表中的主要键。它可以接受多个零值和重复值。在学生表中,DEPT_ID列将其标识为外键,因为它是部门表中的主要钥匙,并且将每个学生与部门联系起来(每个学生都必须属于部门)。

CREATE TABLE Department (
  dept_id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  location VARCHAR(200) NOT NULL
)

CREATE TABLE Students (
  id PRIMARY KEY NOT NULL,
  first_name VARCHAR(100),
  last_name VARCHAR(100),
  email VARCHAR(255) not null,
  registration_nos NOT NULL UNIQUE,
  ssn INT NOT NULL,
  residence VARCHAR(200),
  dept_id INT FOREIGN KEY REFERENCES Department(dept_id)
)

结论

对关系数据库中密钥的知识以及如何定义和使用它们是任何SQL开发人员或管理员的重要概念。
在本文中,我们研究了不同类型的密钥,如何使用它们以及它们如何相互关系。

请留下您的评论和评论,这对我有帮助。

Linkedin Twitter

上与我联系