primary key 用于标识主键,字段被设置为主键后该字段所有值不可重复且不能为null ,每个表仅可有一个主键。unique 设置字段不可重复,但不包括null 值,每张表可以有多个unique 字段,null 并不包括空值

简单来说primary key = unique + not null

一、用法

1.1 在创建表时创建约束

CREATE TABLE unique_primary_key_test(
  id int PRIMARY KEY,
  mobile VARCHAR(11) UNIQUE
);

1.2 已经创建好的表添加约束

ALTER TABLE unique_primary_key_test
    add CONSTRAINT pk_id PRIMARY KEY (id)  -- pk_id是主键名,id是字段名
ALTER TABLE unique_primary_key_test
    add CONSTRAINT uk_mobile UNIQUE (mobile);  -- uk_mobile是unique键名,mobile是字段名

二、案例

根据上面1.1 创建好测试表,执行测试:

INSERT into unique_primary_key_test(id, mobile) VALUES (1, "123456789");
INSERT into unique_primary_key_test(id, mobile) VALUES (2, "");
-- unique不能插入重复的非null数据:23000 Duplicate entry "" for key "mobile"
INSERT into unique_primary_key_test(id, mobile) VALUES (3, "");
-- unique字段可以出现重复的null
INSERT into unique_primary_key_test(id, mobile) VALUES (3, null);
INSERT into unique_primary_key_test(id, mobile) VALUES (4, null);
-- 主键插入null值报错:[23000][1048] Column "id" cannot be null
INSERT into unique_primary_key_test(id, mobile) VALUES (null, null);

一个表可以多个unique 字段:

-- 添加一个新字段,拥有unique约束
ALTER TABLE unique_primary_key_test
    add COLUMN name VARCHAR(20) UNIQUE ;
-- 也可以使用以下方式添加
ALTER TABLE unique_primary_key_test
    add COLUMN name VARCHAR(20);
ALTER TABLE unique_primary_key_test
    add CONSTRAINT uk_name UNIQUE (name);
最后修改:2017 年 12 月 28 日
如果觉得我的文章对你有用,请随意赞赏