4 约束
- 说明:通过对表的行或列的数据做出限制,确保数据的完整性、唯一性。
类型:
约束类型 | 非空约束 | 主键约束 | 唯一约束 | 默认约束 | 外界约束 |
---|---|---|---|---|---|
关键字 | NOT NULL | PRIMARY KEY | UNIQUE | DEFAULT | FOREIGN KEY |
4.1 非空约束
-
NOT NULL 字段值禁止为空,为添加数值会报错
-
NULL 字段值可以为空
-
/*创建表时进行添加约束 格式:列名+数据类型+约束*/ CREATE TABLE bookinfo( book_id INT, book_name VARCHAR(20) NOT NULL ); /*修改表添加约束*/ ALTER TABLE bookinfo MODIFY book_name VARCHAR(20) NOT NULL; /*通过修改表,删除约束*/ ALTER TABLE bookinfo MODIFY book_name VARCHAR(20);
-
/*实例练习使用*/ show databases; use book; /*查看数据库,并进入book数据库*/ show tables; drop tables bookinfo; /*因为前面创建过bookinfo*/ show columns from reader; /*查看reader数据表的类型*/ show columns from bookinfo; create table bookinfo( book_id int, book_name varchar(20) not null ); insert into `bookinfo`(book_id) values(20110202); /*book_name无数值会报错*/ alter table bookinfo modify book_name varchar(20) not null; /*book_namex修改为空约束*/ show columns from bookinfo; /*查看是否已经更改成功*/
4.2主键约束
/*主键唯一性,并不能为空,能唯一标识一条记录
可加快查询速度,与外键形成关系
类型:
单字段,1,定义列的同时指定主键
列名+数据类型+primary key
2,列定义的后面指定
[constraint+约束名] primary key(列名)
*/
use book;
show tables;
drop table bookinfo;
create table bookinfo( /*创建数据表时指定主键*/
book_id int primary key,
book_name varchar(20) not null
);
desc bookinfo; /*查看表结构*/
drop table bookinfo;
create table bookinfo( /*创建数据表,列后面指定主键*/
book_id int,
book_name varchar(20) not null,
constraint vs_id primary key(book_id) /*constraint+约束名+primary key(列名) */
);
desc bookinfo;
-- ------------------------------------------------------
/*多字段联合主键,复合主键
primary key(字段1,字段2,----);
*/
create table borrowinfo( /*创建数据表时,添加主键*/
book_id int,
card_id char(18),
primary key(book_id,card_id)
);
/*通过修改表添加主键*/
create table bookifno(
book_id int,
book_name varchar(20) not null
); /*创建无主键的bookinfo数据表*/
alter table bookinfo
modify book_id int primary key; /*第1种,modify方式*/
alter table bookinfo
add primary key(book_id); /*第2种,add方式*/
alter table bookinfo
add constraint vs_id primary key(book_id); /*第3种,通过constraint+约束名+primary key(列名)*/
-- ---------------------------------------
/* 删除主键
alter table bookinfo drop primary key;
通过修改表删除
*/
alter tabel bookinfo drop primary key;
desc bookinfo; /*查看表结构,已经无主键*/
4.3唯一约束
/*要求列唯一,允许为空,唯一约束确保不重复
1,定义完列之后直接指定唯一约束:
列名+数据类型+unique
2,定义完所有列之后指定唯一约束:
constraint+约束名+unique(列名)*/
create table bookinfo(
book_id int primary key,
book_name varchar(20) unique not null /*创建表时添加约束*/
);
create table bookinfo( /*第二种,通过constraint+约束*/
book_id int primary key,
book_name varchar(20) not null,
constraint uk_bname unique(book_name)
);
-- 通过修改表来添加约束
alter table bookinfo
modify book_name varchar(20) unique; /*第一种,modify*/
alter table bookinfo
add unique(book_name); /*第二种,add*/
alter table bookinfo
add constraint uk_bname unique(book_name); /*add constraint+约束名+列名*/
-- 删除唯一约束
alter table book_info
drop index uk_bname; /*drop index+约束名称*/
alter table book_info
drop key uk_name; /*dorp key+约束名称*/
-- --------------------------------------------------
/*唯一约束和主键约束的区别
一个数据表可以有多个unique,但只能一个primary key
primary key不允许有空值
unique 允许有空值
*/
4.4默认约束
-- 默认约束 指定某列的默认值
/*
列名+数据类型+default+默认值
*/
-- 创建表时添加默认约束
create table bookinfo(
book_id int primary key,
press varchar(20) default '人民出版社'
);
-- 修改表时添加约束
alter table bookinfo /*modify+列名+default+默认值*/
modify press varchar(20) default '人民出版社';
alter table bookinfo /*alter column+列名+set default+默认值*/
alter column press set default '人民出版社';
-- 删除约束
alter table bookinfo
modify press varchar(20); /*第一种,modify方式*/
alter table bookinfo
alter column press drop default; /*第二种,alter column+列名+drop defarult*/
4.5外键约束
-- 外键用来链接两个表数据,可以有多个外键
/*语法格式:
[CONSTRAINT 外键约束名] FOREIGN KEY(列名)
references 主表(主键);
*/
-- 创建表时添加外键
create table bookcategory(
category_id int primary key,
bategory varchar(20),
parent_id int);
create table bookinfo(
book_id int primary key,
book_category_id int,
constraint fk_cid foreign key(book_category_id)
references bookcategory(category_id)
);
-- 修改表时添加外键约束
alter table bookinfo /*add+foreign key+列名+references+表名(列名)*/
add foreign key(book_catagory_id)
references bookcatagory(category_id);
-- 删除外键
alter table bookinfo drop foreign key fk_cid;