Oracle(12)什么是主键(Primary Key)?
主键(Primary Key)是数据库表中的一个或多个列,它们的值唯一地标识表中的每一行。主键的作用主要是确保数据的完整性和唯一性,并且在数据库操作(如查找、更新、删除)中提高效率。
·
主键(Primary Key)是数据库表中的一个或多个列,它们的值唯一地标识表中的每一行。主键具有以下特点:
- 唯一性(Uniqueness):主键的每个值在表中必须是唯一的,不能重复。
- 非空性(Not Null):主键列的值不能为空(NULL)。
- 单一性(Single Column or Composite Key):主键可以是单个列,也可以是由多个列组成的组合键(Composite Key)。
主键的作用主要是确保数据的完整性和唯一性,并且在数据库操作(如查找、更新、删除)中提高效率。
创建主键的SQL语法
-
单列主键:
CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50) );
-
组合主键:
CREATE TABLE order_items ( order_id NUMBER, item_id NUMBER, quantity NUMBER, PRIMARY KEY (order_id, item_id) );
-
在表创建后添加主键:
ALTER TABLE employees ADD CONSTRAINT pk_employee_id PRIMARY KEY (employee_id);
-
设置主键时使用约束名:
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_id
和course_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');
通过合理使用主键,可以确保数据库中的数据具有高一致性和完整性,并且在进行数据操作时具有高效的访问性能。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献11条内容
所有评论(0)