mysql唯一约束

本文介绍如何在MySQL中为表的字段添加、查看及删除唯一约束。通过实例演示了如何创建带有联合唯一约束的表,以及如何给现有表的字段添加唯一约束并为其命名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表结构

[sql]  view plain  copy
  1. FIELD          TYPE          COLLATION       NULL    KEY     DEFAULT  Extra           PRIVILEGES            COMMENT  
  2. -------------  ------------  --------------  ------  ------  -------  --------------  --------------------  -------  
  3. id             BIGINT(20)    (NULL)          NO      PRI     (NULL)   AUTO_INCREMENT  SELECT,INSERT,UPDATE           
  4. resource_name  VARCHAR(128)  gbk_chinese_ci  YES             (NULL)                   SELECT,INSERT,UPDATE           
  5. resource_type  TINYINT(4)    (NULL)          YES             (NULL)                   SELECT,INSERT,UPDATE   

给resource_name和resource_type添加联合唯一约束

[sql]  view plain  copy
  1. ALTER TABLE jw_resource  
  2. ADD UNIQUE KEY(resource_name, resource_type);  

结果 show create table jw_resource;

[javascript]  view plain  copy
  1. CREATE TABLE `jw_resource` (  
  2.   `id` BIGINT(20) NOT NULL AUTO_INCREMENT,  
  3.   `resource_name` VARCHAR(128) DEFAULT NULL,  
  4.   `resource_type` TINYINT(4) DEFAULT NULL,  
  5.   PRIMARY KEY (`id`),  
  6.   UNIQUE KEY `resource_name` (`resource_name`,`resource_type`)  
  7. ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk  

删除唯一约束

[sql]  view plain  copy
  1. ALTER TABLE jw_role DROP INDEX resource_name;  


增加一个唯一约束,并且给唯一约束起名字?

原表结构:

[html]  view plain  copy
  1. mysql> show create table test_table;  
  2. +------------+--------------------------------------------------------------------------------------------------------------------------------------------  
  3. ---------------------------------+  
  4. | Table      | Create Table  
  5.                                  |  
  6. +------------+--------------------------------------------------------------------------------------------------------------------------------------------  
  7. ---------------------------------+  
  8. | test_table | CREATE TABLE `test_table` (  
  9.   `id` int(50) NOT NULL AUTO_INCREMENT,  
  10.   `kk` varchar(30) DEFAULT NULL,  
  11.   PRIMARY KEY (`id`)  
  12. ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |  
  13. +------------+--------------------------------------------------------------------------------------------------------------------------------------------  
  14. ---------------------------------+  
  15. 1 row in set (0.00 sec)  
增加唯一约束的语句,给唯一约束起名叫做 kk_uq:

[html]  view plain  copy
  1. mysql> alter table test_table add unique key `kk_uq` ( kk);  
查看结果

[html]  view plain  copy
  1. mysql> show create table test_table;  
  2. +------------+--------------------------------------------------------------------------------------------------------------------------------------------  
  3. --------------------------------------------------------------+  
  4. | Table      | Create Table  
  5.                                                               |  
  6. +------------+--------------------------------------------------------------------------------------------------------------------------------------------  
  7. --------------------------------------------------------------+  
  8. | test_table | CREATE TABLE `test_table` (  
  9.   `id` int(50) NOT NULL AUTO_INCREMENT,  
  10.   `kk` varchar(30) DEFAULT NULL,  
  11.   PRIMARY KEY (`id`),  
  12.   UNIQUE KEY `kk_uq` (`kk`)  
  13. ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |  
  14. +------------+--------------------------------------------------------------------------------------------------------------------------------------------  
  15. --------------------------------------------------------------+  
  16. 1 row in set (0.00 sec)  
### MySQL 唯一约束的使用方法与问题排查 #### 什么是唯一约束唯一约束(Unique Constraint)用于确保表中的某一列或多列组合的值在整个表范围内具有唯一性。这意味着对于设置了唯一约束的字段,任何两行数据都不能拥有相同的值[^1]。 #### 创建带有唯一约束的表 可以通过 `CREATE TABLE` 或者 `ALTER TABLE` 来定义唯一约束。以下是创建带唯一约束的表的例子: ```sql CREATE TABLE employees ( id INT PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, name VARCHAR(100) ); ``` 在此示例中,`email` 列被设置为唯一约束,表示该表中不允许存在两个相同邮箱地址的记录[^1]。 如果需要对多个列联合施加唯一约束,则可以如下操作: ```sql CREATE TABLE orders ( order_id INT, product_id INT, customer_id INT, CONSTRAINT uc_order_product UNIQUE (order_id, product_id) ); ``` 此例子表明 `(order_id, product_id)` 的组合必须在整张表内保持唯一性。 #### 添加或删除唯一约束 通过 `ALTER TABLE` 可以向已存在的表添加或者移除唯一约束。例如增加一个唯一索引到现有表格上的某列: ```sql ALTER TABLE employees ADD UNIQUE (email); ``` 而要移除这个独特限制则执行下面命令: ```sql ALTER TABLE employees DROP INDEX email; ``` 注意这里我们实际上是在删掉名为 `email` 的索引来实现解除唯一性的目的,因为当指定单个字段作为UNIQUE时会自动建立相应名称的标准B-tree索引。 #### 解决违反唯一约束的问题 当尝试插入重复的数据进入受唯一约束保护的列时会发生错误。为了处理这种情况可以从以下几个方面入手考虑解决方案: - **检查冲突源**: 首先确认哪些具体条目造成了违背条件的情况发生. - **更新而非插入**: 如果新纪录应该替代旧有同名项的话可采用 ON DUPLICATE KEY UPDATE 子句. 例如: ```sql INSERT INTO employees(email,name) VALUES('test@example.com','Test User') ON DUPLICATE KEY UPDATE name=VALUES(name); ``` 这条SQL语句的作用就是在遇到Email已经存在于数据库里的情况下仅仅修改对应的名字而不是再次加入一条新的记录进去[^2]. 另外还可以利用临时变量或者其他逻辑控制手段来规避此类异常状况的发生[^3]. #### 性能影响及其他注意事项 尽管唯一键有助于维护资料库的一致性和准确性,但它也可能带来一些负面影响比如降低写入速度等由于额外增加了验证过程所致。因此,在设计阶段就需要权衡利弊合理选用合适类型的索引结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值