drop table if exists t_user;
create table t_user(
id int,
username varchar(255) not null,
password varchar(255)
);
insert into t_user(id,password) values(1,'123');
ERROR 1364 (HY000): Field 'username' doesn't have a default value
修正:
insert into t_user(id,username,password) values(1,'lisi','123');
13.3 唯一性约束 unique
唯一性约束修饰的字段具有唯一性,不能重复,但可以为NULL
1、username不能重复
2、username可以全为NULL
3、联合约束(表级约束): usercode varchar(255),
username varchar(255),
unique(usercode,username)
案例:给两个列或者多个列加unique唯一性
drop table if exists t_user;
create table t_user(
id int,
usercode varchar(255),
username varchar(255),
unique(usercode,username) //多个字段联合起来添加约束:表级约束
);
insert into t_user values(1,'111''zhangsan');
insert into t_user values(2,'111','lisi');
insert into t_user values(3,'333','wangerma');
正确
区别:上面的是两个字段联合起来约束唯一性
下面的是两条字段都得约束唯一性
create table t_user(
id int,
usercode varchar(255) unique,//unique在后面添加称为:列级约束
username varchar(255) unique
);
insert into t_user values(1,'111''zhangsan');
insert into t_user values(2,'111','lisi');
insert into t_user values(3,'333','wangerma');
错误:111 有两个
13.4 主键约束
怎样给一张表添加主键约束
drop table if exists t_user;
create table t_user(
id int primary key, //列级约束
username varchar(255),
email varchar(255)
);
insert into t_user values(1,'zs','zs@123.com');
insert into t_user values(2,'ls','ls@123.com');
insert into t_user values(3,'we','we@123.com');
select * from t_user;
+----+----------+------------+
| id | username | email |
+----+----------+------------+
| 1 | zs | zs@123.com |
| 2 | ls | ls@123.com |
| 3 | we | we@123.com |
+----+----------+------------+
注意:id添加主键约束 主键中的字段不能重复也不能为NULL
* 主键相关的术语
主键约束
主键字段
主键值
*主键有什么作用呢?
表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键
主键的作用:主键值是这一行记录在这张表的唯一标识(就像身份证号码一样)
*主键的分类
主键字段数量划分
单一主键(推荐的,常用的)
复合主键(多个字段联合添加一个主键)(不建议使用 复合主键违背三范式)
主键的性质划分
自然主键(修改起来很麻烦,最好简单点,可以把身份证号前按照1,2,3,4顺序重新列表,添加主键)
业务主键(主键值和系统业务挂钩例如:拿着身份证号码/银行卡号作为主键)(不推荐使用)
*一张表的主键约束只能有一个(必须记住)
*使用表级约束方式定义主键:
drop table if exists t_user;
create table t_user(
id int,
username varchar(255),
primary key(id) //表级约束
);
insert into t_user values(1,'zs');
insert into t_user values(2,'ls');
insert into t_user values(3,'we');
*mysql提供主键值自增:(非常重要)
在主键值语句后加 auto_increment
drop table if exists t_user;
create table t_user(
id int primary key auto_increment,//id字段自动维护一个自增的数字,从1开始,以1递增
username varchar(255),
);
insert into t_user values('a');
insert into t_user values('b');
insert into t_user values('c');
Oracle当中也提供一个自增机制,叫序列(sequence)对象