约束
1.什么是约束?常见的约束有哪些呢? 在创建表的时候、可以给表的字段添加相应的约束,添加约束的目的是为了保证表中的数据的合法性、有效性、完整性。 常见的约束有哪些呢? 非空约束(not null):约束的字段不能为NULL 唯一约束(unique):约束的字段不能重复 主键约束(primary key):约束的字段既不能重复,也不能为NULL(简称PK) 外键约束(foreign key):…(简单FK) 检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。
非空约束 not null
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
insert into t_user(id,username,password); values(1,'lisi','123');
唯一性约束(unique)
唯一约束修饰的字段具有唯一性,不能重复,但可以为NULL *案例:给某一列添加unique
drop table if exists t_user;
create table t_user(
id int,
username varchar(255) unique
);
insert into t_user values(1,'zhangsan');
insert into t_user values(2,'zhangsan');
Error!!
insert into t_user(id) values(2);
insert into t_user(id) values(3);
insert into t_user(id) values(4);
案例:给出两个或者多个列添加unique
drop table if exists t_user;
create table t_user(
id int;
usercode varchar(255),
username varchar(255),
unique(usercode,username)
);
drop table if exists t_user;
create table t_user(
id int,
usercode varchar(255) unique,
username varchar(255) unique,
unique(usercode,username)
);
insert into t_user values(1,'111','zs');
insert into t_user values(2,'111','ls');
insert into t_user values(3,'222','zs');
select *from t_user;
insert into t_user values(4,'111','zs');
Error 1062 (23000)....
drop table if exists t_user;
creat table t_user(
id int;
usercode varchar(255) unique,
username varchar(255) unique
);
insert into t_user values(1,'111','zs');
insert into t_user values(2,'222','ls');
ERROR 1062
主键约束
主键相关的术语? 主键的约束:primary key 主键字段:id字段添加primary key之后,id叫做主键字段 主键值:id字段中的每一个值都是主值。
主键的分类? 根据主键字段数量来划分: 单一主键(推荐的,常用的。) 复合主键(多个字段联合起来添加一个主键的约束)(复合主键不建议使用,因为复合主键违背三范式。) 根据主键性质来划分: 自然主键:主键值最好是一个和业务没有任何关系的自然数 业务主键:主键值和系统的业务挂钩
一张表主键约束只能有一个(必须记住)
使用表级约束方式定义主键:
drop table if exists t_user;
create table t_user(
id int,
username varchar(255),
primary key(id)
);
insert into t_user(id,username) values(1,'zs');
insert into t_user(id,username) values(2,'ls');
insert into t_user(id,username) values(3,'ws');
insert into t_user(id,username) values(4,'cs');
select *from t_user;
insert into t_user(id,username) values(4,'cx');
ERROR 1062
*mysql提供主键值自增:(非常重要。)
`drop table if exists t_user;
create table t_user(
id int primary key auto_increment,
username varchar(255)
);
insert into t_user(username) values('a');
insert into t_user(username) values('b');
insert into t_user(username) values('c');
insert into t_user(username) values('d');
insert into t_user(username) values('e');
insert into t_user(username) values('f');
select * from t_user;
提示:Oracle当中也提供一个自增机制。叫做:序列(sequence)对象
外键值 foreign key
外键值是否可以为NULL? 外键值可以为NULL。 外键字段引用其他的表的某个字段的时候,被引用的字段必须为主键? 注意:被引用 的字段不一定是主键,但至少具有unique约束。
|