首页 > 数据库 >Oracle(12)什么是主键(Primary Key)?

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

时间:2024-07-20 09:29:28浏览次数:15  
标签:12 name NUMBER Primary 主键 VARCHAR2 TABLE id

主键(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', '[email protected]');
    

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

标签:12,name,NUMBER,Primary,主键,VARCHAR2,TABLE,id
From: https://blog.csdn.net/qq_43012298/article/details/139438816

相关文章

  • 芯片SOP8之读写Flash固件XM25QH128CHIQ
    学习使用简易编程器刷写Flash芯片朗读全文Yourbrowserdoesnotsupporttheaudioelement.有什么用救砖修改Flash芯片内容,刷写芯片内容BIOS刷写拯救各种不开机怎么用焊下芯片,或者使用烧录夹(实测这玩意特容易损坏芯片针脚)连接到编程器(下面以CH341A为例)进度2024......
  • 洛谷P1012 拼数 C语言
    这个题可以用字符串去做,接受字符来去计算大小,这里可以用到strcmp函数str1="123"str2="124"strcmp(str1,str2)如果说str1比str2大就会返回大于0的数,一般是1;如果相等返回0,小于返回-1.它是比较这两个字符串的ascll值来比较的,比方说3的ascll值就比4小,那么前面的都相同,那......
  • SOLA4012 2024 Commercial PV
    SOLA40122024CommercialPVproject1 Scope summaryYouarea graduateengineerinalargeengineeringdepartmentof a well-knownPVinstaller (SPREEnergy).Thecompanyhasreceivedatenderrequestfromalargeretailer,fortheinstallation ofa non......
  • mybatis 插入时 返回主键
    在MyBatis中,如果你希望在插入数据时返回主键值,可以通过在<insert>标签中使用useGeneratedKeys="true"属性和keyProperty属性来实现。useGeneratedKeys属性表示使用数据库生成的主键,而keyProperty属性则指定用来接收这个生成主键的属性名。以下是一个简单的例子:假设你有一个用户......
  • 代码随想录算法训练营第30天 | 贪心算法 2: 122.买卖股票的最佳时机II、55. 跳跃游戏
    代码随想录算法训练营第30天|贪心算法2:122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和122.买卖股票的最佳时机IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/代码随想录https://programmerca......
  • [AGC012E] Camel and Oases 题解
    题目链接题目链接题目解法可能并没有那么难(?首先\(V\)的取值只有\(\logV\)种,即\(\lfloor\frac{V}{2^k}\rfloor\)称\(\lfloor\frac{V}{2^k}\rfloor\)为第\(k\)层,先预处理出每一层的极大连通区间我们可以把问题抽象成:每一层中选一个区间,要求覆盖\([1,n]\),且第\(0......
  • 基于java+springboot+vue实现的学生选课系统(文末源码+Lw)129
     系统角色:学生、教师、管理员系统功能:管理员管理专业,教师,学生,课程,查看学生选课以及学生成绩信息。教师查询学生,查询课程,审核学生选课信息,为学生学习的课程进行成绩打分学生参与课程选课,查询选课信息,查询已选课程的成绩信息。技术栈:开发语言:JavaJDK版本:JDK8前端技......
  • 基于java+springboot+vue实现的中小企业人事管理系统(文末源码+Lw)128
     基于SpringBoot+Vue的实现的中小企业人事管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+ppt+演示视频+软件包)系统角色:员工、管理员系统功能:管理员登录进入中小企业人事管理系统可以查看首页、个人中心、员工管理、部门信息管理、职位信息管理、福利信息管理、培......
  • 基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127
     基于SpringBoot+Vue的实现的实验室管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:实验室管理系统管理员功能有个人中心,学生管理,教师管理,公告信息管理,知识库管理,实验课程管理,实验室信息管理,实验室预约管理,实验设备管理,采购记录管理,维修记录管......
  • 题解:CF1912D Divisibility Test
    又是一道水绿。刚刚小学毕业的数学idiot——我释怀地笑了。第一种很好判断,当$b^k$为$n$的倍数时,取基数为$b$的能被$n$整除的整数$c$的最后$k$位数显然能被$n$整除。第二种也不难,当$b^k\equiv1\pmodn$时,取以$b$为底数的能被$n$整除的整数$c$的$k$......