数据库 MySQL(约束)
程序员文章站
2022-05-06 23:41:41
...
目录
一.约束:
为了确保数据的完整性(准确性、正确性),为了表添加一些约束,表中添加的数据必须是符合约束,降低数据冗余。
- 主键约束
- 唯一约束
- 默认约束
- 非空约束
- 外键约束
1.主键约束:
primary key 约束:用于标识数据中的数据是唯一不重复。一张表中只能有一个主键
主键字段的特点:唯一并且不能为null
1.1:添加主键约束:
方式一:建表时添加主键约束:
create table p2(
id int primary key,
name varchar(20)
);
违反主键约束时,错误提示
方式二:创建表时,在constraint约束区域添加主键约束
create table p3(
id int,
name varchar(20),
primary key(字段列表)
);
方式三:建表后,添加主键
create table p4(
id int,
name varchar(20)
)
alter table 表名 add constranit 约束名称 约束类型(字段);
alter table p4 add constraint pk_id primary key;
注:
- 一个表中可以只有一个主键,但是一个主键可以是多个列。
- 联合主键:多个字段同时作为主键,单个字段可以重复,联合起来不能重复
1.2:删除主键约束:
语法
alter table 表名 drop primary key;
2.唯一约束:
unique:约束用于唯一表示数据表中每条记录。
unique和primary key 都可以唯一标识数据表中的每条记录不重复
区别:
- 一张表中可以有任意多个唯一约束,但是一张表只能有一个主键约束
- 主键约束不能为null,唯一约束可以为null
2.1添加唯一约束
方式一:
create table p5(
id int,
`name` varchar(20) unique
);
方式二:
create table p6(
id int,
`name` varchar(20),
unique(`name`)
);
方式三:
create table p7(
id int,
`name` varchar(20),
);
alter table p7 add constraint uq_name unique(`name`);
2.2:删除唯一约束:
alter table 表名 drop index 约束名称;
3.非空约束:
not null 约束强制要求字段的值不能为null
create table p8(
id int,
`name` varchar(20) not null
);
4.默认约束:
通过default关键字设置默认值,设置了默认值的字段,不给赋值,使用默认值填充。
create table p9(
id int,
`name` varchar(20),
gender char default '男'
);
- 当不给列赋值时,使用默认值
- 使用关键字default赋值,使用默认值
- 给字段赋新值,新值覆盖默认值。
4.1.自动增长:
auto_increment 设置字段的值自动增长。每次添加数据,自动列会查找该列的的最大值加一
特点:
- 只有整型数据才可以设置自动增长列。
- 自动增长列必须主键或者唯一键。
- 自增列在添加数据时可以不用赋值。
- 初始值默认是1,每次加1.
- 自增列的值一旦被使用后不会在出现。
给自增列赋值null值,也可以实现自增。
5.外键约束:
设置多表之间的关联关系。
5.1:表关系
一个项目中包含有多张表,利用表之间可以避免表中数据冗余。
一对一:人-身份证号,丈夫-妻子
一对多:也叫多对一,班级-学生,部门-员工。
多对多:学生-课程,商品-订单,程序员-项目
5.2:一对一关联:
- 存在两张表A、B分别添加主键,在任意一张表中设置外键字段引用另一张表中的主键。
- 被引用数据的表称为主键表(主表),引用数据的表称为外键表(从表).
create table husband(
hid int primary key,
hname varchar(10)
);
create table wife(
wid int primary key,
wname varchar(10),
whid int,
foreign key(whid) references husband(hid)
);
添加数据:先添加主键表,再添加外键表。
5.3 一对多关联:
一对多关联是在多的和一方建立外键字段,引用另外一张表中的主键字段。
create table dept(
did int primary key,
dname varchar(10)
);
create table emp(
eid int primary key,
ename varchar(10),
did int,
foreign key(did) references dept(did)
);
5.4:多对多关系:
一个项目可以有多个人做,一个人也可以做多个项目
在数据库中:一般建立中间表来建立多表关系
create table coder(
cid int primary key,
cname varchar(10)
);
create table project(
pid int primary key,
pname varchar(10)
);
create table coder_project(
co_id int primary key,
cid int,
pid int,
foreign key(cid) references coder(cid),
foreign key(pid) references project(pid)
);