SQL语句删除和添加外键、主键的方法


在SQL中,添加和删除主键以及外键的语句依赖于你使用的数据库系统(如MySQL, PostgreSQL, SQL Server等),但基本的概念是相似的。以下是一些通用的SQL语句示例,用于展示如何在表中添加和删除主键及外键。

### 添加主键

在添加主键时,通常是在创建表时指定,但也可以在表已存在时添加。假设你有一个表`users`,并想将`user_id`列设为主键:

**创建表时添加主键**:


CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(255),
    email VARCHAR(255)
);

**已存在的表中添加主键(如果表中数据允许)**:

注意:在已存在的表中添加主键,如果列值不是唯一的或者包含NULL值,则无法成功。


ALTER TABLE users ADD PRIMARY KEY (user_id);

### 删除主键

删除主键通常比添加主键复杂,因为你需要先找到主键的约束名(这取决于数据库系统如何命名约束)。以下是一个通用的概念,但具体细节可能因数据库而异:


ALTER TABLE users DROP PRIMARY KEY;

但请注意,上面的语句在某些数据库系统(如MySQL)中可能不直接工作,因为你需要指定主键约束的确切名称。在MySQL中,你可以通过查询`information_schema.table_constraints`表来找到主键约束的名称,然后使用`ALTER TABLE ... DROP CONSTRAINT ...`语句来删除它(注意,MySQL实际上不直接使用`DROP CONSTRAINT`,而是使用`DROP PRIMARY KEY`,但直接使用时可能需要其他步骤或条件,或者先删除并重建表)。

### 添加外键

添加外键涉及到引用另一个表的主键。假设我们还有一个`orders`表,它应该通过`user_id`与`users`表的`user_id`相关联:


ALTER TABLE orders ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id);

这里,`fk_user_id`是外键约束的名称,`orders`表中的`user_id`列被设置为外键,它引用了`users`表中的`user_id`列。

### 删除外键

与删除主键类似,删除外键也需要知道外键约束的名称:


ALTER TABLE orders DROP FOREIGN KEY fk_user_id;

确保替换`fk_user_id`为你实际的外键约束名称。

以上就是在SQL中添加和删除主键及外键的基本方法。请注意,根据你的数据库系统(如MySQL, PostgreSQL, SQL Server等),具体的语法和步骤可能有所不同。