Oracle(12)什么是主键(Primary Key)?

主键(Primary Key)是数据库表中的一个或多个列,它们的值唯一地标识表中的每一行。主键具有以下特点:

  1. 唯一性(Uniqueness):主键的每个值在表中必须是唯一的,不能重复。
  2. 非空性(Not Null):主键列的值不能为空(NULL)。
  3. 单一性(Single Column or Composite Key):主键可以是单个列,也可以是由多个列组成的组合键(Composite Key)。

主键的作用主要是确保数据的完整性和唯一性,并且在数据库操作(如查找、更新、删除)中提高效率。

创建主键的SQL语法

  1. 单列主键

    CREATE TABLE employees (
        employee_id NUMBER PRIMARY KEY,
        first_name VARCHAR2(50),
        last_name VARCHAR2(50)
    );
    
  2. 组合主键

    CREATE TABLE order_items (
        order_id NUMBER,
        item_id NUMBER,
        quantity NUMBER,
        PRIMARY KEY (order_id, item_id)
    );
    
  3. 在表创建后添加主键

    ALTER TABLE employees ADD CONSTRAINT pk_employee_id PRIMARY KEY (employee_id);
    
  4. 设置主键时使用约束名

    CREATE TABLE products (
        product_id NUMBER,
        product_code VARCHAR2(50),
        product_name VARCHAR2(100),
        CONSTRAINT pk_product PRIMARY KEY (product_id)
    );
    

主键示例

示例1:使用单列主键
CREATE TABLE customers (
    customer_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50) NOT NULL,
    last_name VARCHAR2(50) NOT NULL,
    email VARCHAR2(100)
);

在这个示例中,customer_id列被定义为主键,它唯一标识每个客户,并且不能为空。

示例2:使用组合主键
CREATE TABLE enrollment (
    student_id NUMBER,
    course_id NUMBER,
    enrollment_date DATE,
    PRIMARY KEY (student_id, course_id)
);

在这个示例中,student_idcourse_id的组合被定义为主键,这意味着每个学生在同一个课程中只能有一条记录。

示例3:在表创建后添加主键
CREATE TABLE departments (
    dept_id NUMBER,
    dept_name VARCHAR2(100) NOT NULL
);

ALTER TABLE departments ADD CONSTRAINT pk_dept_id PRIMARY KEY (dept_id);

在这个示例中,表创建后使用ALTER TABLE语句添加了主键约束。

注意事项

  • 唯一性保证:主键列的值必须是唯一的。如果尝试插入重复的主键值,数据库将返回错误。
  • 非空性保证:主键列不能为空。如果尝试插入NULL值,数据库将返回错误。
  • 自动递增:在某些数据库中,可以将主键列设置为自动递增(AUTO_INCREMENT),以自动生成唯一的主键值。例如,在Oracle中可以使用序列来实现这一点:
    CREATE SEQUENCE customer_seq START WITH 1 INCREMENT BY 1;
    
    CREATE TABLE customers (
        customer_id NUMBER PRIMARY KEY,
        first_name VARCHAR2(50) NOT NULL,
        last_name VARCHAR2(50) NOT NULL,
        email VARCHAR2(100)
    );
    
    INSERT INTO customers (customer_id, first_name, last_name, email) VALUES (customer_seq.NEXTVAL, 'John', 'Doe', 'john.doe@example.com');
    

通过合理使用主键,可以确保数据库中的数据具有高一致性和完整性,并且在进行数据操作时具有高效的访问性能。

相关推荐

  1. Oracle12什么(Primary Key)?

    2024-07-20 10:38:02       16 阅读
  2. Oracle16什么视图(View)?

    2024-07-20 10:38:02       20 阅读
  3. Oracle15什么索引(Index)?

    2024-07-20 10:38:02       14 阅读
  4. Oracle18什么序列(Sequence)?

    2024-07-20 10:38:02       17 阅读
  5. 什么数据?

    2024-07-20 10:38:02       21 阅读
  6. Oracle17什么物化视图(Materialized View)?

    2024-07-20 10:38:02       15 阅读
  7. Debian 12.5 一安装 Oracle 19C 单机

    2024-07-20 10:38:02       22 阅读
  8. Oracle(8)什么Oracle实例(Instance)?

    2024-07-20 10:38:02       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 10:38:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 10:38:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 10:38:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 10:38:02       55 阅读

热门阅读

  1. 目标检测算法

    2024-07-20 10:38:02       15 阅读
  2. 使用python调用dll库

    2024-07-20 10:38:02       18 阅读
  3. 数据结构之栈、队列和数组的基本概念

    2024-07-20 10:38:02       16 阅读
  4. RoCE(RDMA over Converged Ethernet)网络速率测试工具

    2024-07-20 10:38:02       16 阅读
  5. 读取 Excel 文件

    2024-07-20 10:38:02       14 阅读
  6. 实战:springboot用LocalDateTime快速替换Date

    2024-07-20 10:38:02       15 阅读
  7. Spark的部署模式

    2024-07-20 10:38:02       16 阅读
  8. Shell 构建flutter + Android 生成Apk

    2024-07-20 10:38:02       14 阅读