【案例】:测试一个字段的多种联合约束 drop table if exists t_vip ; create table t_vip ( id int , name varchar(255) not null unique ); desc t_vip ; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(255) | NO | PRI | NULL | | PRI表示主键 | email | varchar(255) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) insert into t_vip (id , name) values (1 , 'zhangsan'); insert into t_vip (id , name) values (2 , 'zhangsan'); // 错误 insert into t_vip (id) values (2) ; // 错误
4.3 主键约束
- primary key (pk) :
- 相关概念:
- 主键约束:在主键上加的约束 , 一张表只能添加一个(复合主键也算一个)
- 主键字段:含有主键的字段
- 主键值:主键字段中的每一个值 , 每一行记录的唯一标识 , 类似于身份证号 不能重复、不能为null ,具有唯一性。主键值建议使用int \ bigint \ char 类型,不建议用varchar。主键值一般为数字,一般为定长
- 注意:任意一张表都要有主键 ,如果没有主键,表无效
【案例】:测试主键约束 drop table if exists t_vip ; create table t_vip ( id int primary key, name varchar(255) ); insert into t_vip (id ,name) values (1 , 'zhangsan'); insert into t_vip (id ,name) values (2 , 'lisi'); select * from t_vip ; insert into t_vip (id ,name) values (2 , 'wangwu') //ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY' insert into t_vip (name) values ('zhaoliu'); //ERROR 1364 (HY000): Field 'id' doesn't have a default value
- 添加联合主键约束 (可以添加联合主键) ------- 复合主键
- 一个字段 ----- 单一主键
- 多个字段 ------ 复合主键 (不建议)
【案例】:展示添加联合主键约束 drop table if exists t_vip ; create table t_vip ( id int , name varchar(255), email varchar(255), primary key(id ,name) ); desc t_vip ; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(255) | NO | PRI | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) insert into t_vip (id , name , email) values (1 , 'zhangsan' , 'zhangsan@123.com'); insert into t_vip (id , name , email) values (1 , 'lisi' , 'lisi@xina.com'); select * from t_vip ; // 可以运行
- 分类:自然主键、业务主键
- 自然主键:主键值是一个自然数,和业务没关系
- 业务主键:主键值和业务紧密关联。例如主键值是银行卡号,为业务主键
- 在开发中,用自然主键使用多一点。(因为主键只要做到不重复就行)
- 机制:自动维护主键值 auto_increment 表示自增(从1 开始);如果第一个数已经赋值,那么赋值的数据会被抛弃,报错。其余正常执行