主键约束

主键约束(primary key)
特点 不能为空 不重复
##没有约束
create table stu0(
id int,
name varchar(50)
)
insert into stu0(name) value(“张三丰”);

##方式一:创建表,并且添加主键约束
create table stu1(
id int primary key,
name varchar(50)
)
##方式二:
create table stu2(
id int ,
name varchar(50),
primary key(id,name)
)
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
±------±------------±-----±----±--------±------+
成功:insert into stu1(id,name) value(2,“张三丰”); #成功

测试一:insert into stu1(id,name) value(null,“张三丰”); #失败。提示不能为空
ERROR 1048 (23000): Column ‘id’ cannot be null
测试二:
插入重复值:报错
Duplicate entry ‘2’ for key ‘PRIMARY’
select *from stu1;

### 修改 SQL 主键约束的实现方式 在 SQL 中,修改主键约束的操作并不像添加或删除列那样直接,因为大多数数据库系统不支持直接修改主键约束的语法。实现主键约束的“修改”通常需要通过删除旧的主键约束并重新添加新的主键约束来完成。 #### 删除主键约束 若要修改主键字段,首先需要删除原有的主键约束。可以通过系统视图获取主键约束的名称,然后使用 `ALTER TABLE ... DROP CONSTRAINT` 语句进行删除。例如: ```sql DECLARE @csname VARCHAR(100) SET @csname = '' SELECT @csname = NAME FROM sysobjects WHERE xtype = 'PK' AND parent_obj = OBJECT_ID('表名')[^1] ``` 随后执行删除约束的语句: ```sql EXEC('ALTER TABLE 表名 DROP CONSTRAINT ' + @csname)[^1] ``` #### 添加新的主键约束 在删除原有主键后,可以使用 `ALTER TABLE ... ADD CONSTRAINT` 语法添加新的主键约束。例如,若要将字段 `id` 设置为主键,并命名为 `PK_表名`,可执行以下语句: ```sql ALTER TABLE 表名 ADD CONSTRAINT PK_表名 PRIMARY KEY (id)[^1] ``` 如果表中尚不存在主键字段(如需要新增一个自增列作为主键),可先使用 `ALTER TABLE ... ADD` 添加字段,再添加主键约束: ```sql IF NOT EXISTS ( SELECT * FROM syscolumns WHERE id = OBJECT_ID('表名') AND name = 'id' ) ALTER TABLE 表名 ADD id INT IDENTITY(1,1) CONSTRAINT PK_表名 PRIMARY KEY (id)[^1] ``` #### 禁用与启用主键约束 在某些场景下,可能需要临时禁用主键约束以进行数据操作,可以使用以下语句: 禁用主键约束: ```sql EXEC('ALTER TABLE 表名 NOCHECK CONSTRAINT ' + @csname)[^1] ``` 启用主键约束: ```sql EXEC('ALTER TABLE 表名 CHECK CONSTRAINT ' + @csname) ``` 这些操作通常用于数据导入、批量更新等场景,但在执行后应确保数据完整性不受影响。 ### 注意事项 - 修改主键约束前,应确保目标字段的数据满足主键的唯一性和非空要求。 - 若存在外键引用该主键的其他表,则删除主键前需先处理这些外键约束[^2]。 - 修改主键约束可能导致索引重建,影响数据库性能,建议在低峰期操作。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值