总结了一些课上的笔记和代码,可以执行看看


文章目录

  • 约束:
  • 标识列:


约束:

约束的作用:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性。

约束的分类:
1.NOT NULL:非空,用于保证该字段的值不能为null
2.DEFAULT:默认值,用于保证该字段在不设置具体的内容时,有一个默认值。即开始存数据的时候不不传也会有一个值
3.PRIMARY KEY:主键,用于保证该字段的值的唯一性,也就是说被设置为PRIMARY KEY的列中的值不能够重复,主键不能为空。主键还有一个作用就是可以通过主键查找到数据表中唯一的对应的行。主键可以是没有任何意义的字段。
4.UNIQUE:唯一,用于保证该字段的值的唯一性,可以为空。
5.CHECK:检查约束(MYSQL中不支持)
6.FOREIGN KEY:外键,外键一般引入另外一个表的主键,用来约束当前字段的取值范围。

添加约束的时机:
1.创建表的时候
2.修改表的时候

约束的添加分类:
列级约束:所有的约束语法上都支持,但是外键的约束没有效果
表级约束:除了非空,默认其他的都支持

1、列级约束即字段级约束,用于限制字段取值范围,常通过字段有效性规则来实现,比如:性别只能是男或女。
2、表级约束及字段间约束,用于限制两个字段间的取值约束,比如:入学日期大于出生日期。

创建表时添加列约束:
实例:创建major表

CREATE TABLE major(
id int PRIMARY KEY,
majorname VARCHAR(20)
);

实例:创建学生信息表studentinfo

CREATE TABLE studentinfo(
sid INT(3) PRIMARY KEY,
sname VARCHAR(20) NOT NULL,
ssex VARCHAR(6) CHECK(ssex IN('男','女')),
sage INT(2) DEFAULT 18,email VARCHAR(32) UNIQUE
);

实例:创建学生信息表的同时指定引入major表的主键当做外键

create table stuinfo(
id int primary key,
stuname varchar(32) not null,sex char(1) check(sex='男' or sex='女'),
seat int unique,age int default 18,majorid int  **references** major(id)
 );

//即在对stuinfo表添加majorid数据的时候,只能输入major表中有的id,而且stuinfo表的id也是主键约束,不能重复,是唯一的,不过这里是列约束,外键不起作用,check也是不起作用的,MySQL不支持

创建表时添加表级约束
先把之前的表删了
drop table if exists stuinfo
实例:创建学生信息 表

create table stuinfo(
id int,stuname varchar(32),
sex char(1),
seat int,
age int,
majorid int,
CONSTRAINT pk primary key(id),	//id设置为外键
CONSTRAINT uq unique(seat),	//seat设置为唯一
CONSTRAINT ck check(sex='男' or sex='女'), 
CONSTRAINT fk_stuinfo_major foreign key(majorid) references major(id)
//这里的语法:CONSTRAINT (约束)+ 外键别名,一般为目标表名_引入的表名 +foreign key +设置为外键的列(majorid)+references +引入major表的id
语句解释:majorid 设置为外键,**将major表里的id引入,来限制stuinfo表里的外键majorid,外键起名为fk_stuinfo_major**

);

此时如果major表没有数据,stuinfo表也不能插入数据,因为没有major表的id,外键的限制生效了

而major表有数据了以后,插入stuinfo表的数据的majorid 也是要在major表里有的majorid

constraint

修改表时添加约束

实例:创建学生信息表
create table stuinfo(id int,stuname varchar(32),sex char(1),seat int,age int,majorid int);

实例:修改学生信息表添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(32) not null;

实例:修改学生信息表添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age int DEFAULT 18;

实例:修改学生信息表添加主键
ALTER TABLE stuinfo MODIFY COLUMN id int PRIMARY KEY;
ALTER TABLE stuinfo ADD PRIMARY KEY(id);

实例:修改学生信息表添加唯一约束
alter table stuinfo add unique(seat);
ALTER TABLE stuinfo MODIFY COLUMN seat int UNIQUE;

删除约束:

实例:删除非空约束
alter table stuinfo modify column stuname varchar(32) null;
实例:删除默认约束
alter table stuinfo modify column age int ;
实例:删除唯一
alter table stuinfo drop index seat;
实例:删除外键
alter table stuinfo drop foreign key fk_stuinfo_major;

标识列:

又称为自增长列,可以不用手动去插入数据,系统会提供默认的序列值。序列值从1开始,每次自动+1;

注意:
1.标识列不一定非得要跟主键搭配使用,但是标识列必须设置给一个key,这个key可以是主键、唯一、外键。
2.一个表中最多只能有一个标识列
3.标识列的类型只能是数值型,一般都是int类型

2.修改表时设置标识列:
实例:修改tab_identity表时添加标识列

drop table if exists tab_identity;
create table tab_identity(id int,name varchar(20));

alter table tab_identity modify column id int primary key auto_increment;

3.修改表时删除标识列

drop table if exists tab_identity;
create table tab_identity(id int,name varchar(20));

alter table tab_identity modify column id int ;