MySQL笔记六:约束

在创建表的时候,可以给表中的数据加上一些约束,来保证这个表中的数据的完整性和准确性
约束包括:
not null非空约束
unique唯一性约束,不能重复,但是可以有多个null
primary key主键约束(简称PK)
foreign key外键约束(简称FK)
check(MySQL不支持,oracle支持)
 
6.1 notnull
create table t_vip(
    id int,
    name varchar(32) not null
);
insert into t_vip(id) values(3);//会报错,因为name限定不能为空
 
6.2 unique
create table_vip(
        id int,
        name varcahr(32) unique,//约束添加到列后面,被称为列级约束
        email varchar(255)
);
insert ito t_vip(id,name,email) values (1,'wang','2343');
insert ito t_vip(id,name,email) values (2,'wang','1343');//报错
 
6.3 unique两个字段联合起来具有唯一性
create table_vip(
        id int,
        name varcahr(32),
        email varchar(255),
        unique(name,email)//约束没有添加到列的后面,称为表级约束
);
总结:需要给多个字段联合起来表示某一个约束的时候,采用表级约束,not null只有列级约束
 
6.4 not null unique约束
create table t_vip(
    id int,
    name varchar(32) not null unique
);
如果一个字段同时被not null和unique约束式,该字段自动变成主键字段,(oracle不是这样)
 
 
6.5 primary key主键约束
被加了主键约束的字段被称为主键字段,主键字段上的每一个值都称为主键值
主键的作用:主键是每一行记录的标识,相当于每一条数据的身份证号,没有主键,表无效
主键的特征:not null + unique
create table t_vip(
    id int primary key,//单一主键,列级约束
    name varchar(32)
);
或者
create table t_vip(
    id int,
    name varchar(32),
    primary key(id,name)//复合主键,两个字段联合起来不重复即可,在实际中不建议使用复合主键,表级约束
);
注意:一张表中只能有一个主键,单一主键、复合主键算一个主键,主键值建议定长类型的数,不建议varchar
 
主键分类:自然主键和业务主键,尽量使用没有意义的自然主键
create table t_vip(
    id int primary key auto_increment,//自动生成从1开始递增的自然数
    name varchar(32)
);
 
6.6foreign key外键约束
被加了外键约束的字段被称为外键字段,外键字段上的每一个值都称为外键值
多个重复数据冗余,将一张表拆分成两个表
t_class
classno (pk)        classname
100                    北京市第一中学高一1班
101                    北京市第一中学高一2班
t_student
no(pk)            name            cno
1                    jack                100
2                    lucky              101
3                    lily                  100
4                    alice                100
5                    bob                 101
 
当cno中的字段没有约束时,可能会导致数据无效,为了保证cno字段中的值有效,需要给cno字段加上外键约束
t_class是父表,t_student是子表
创建时:先创建父,再创建子
删除时:先删除子,再删除父
create table t_class(
        classno int primary key,
        classname varchar(200)
);
create table t_student(
        no int primary key auto_increment,
        name varchar(255),
        cno int,
        foreign key(cno) reference t_class(classno)//被引用的classno字段需要具有唯一性,con需要为null或classno中的值
);
 
6.7存储引擎
存储引擎是一个表存储/组织数据的方式,是mysql中特有的术语
在创建表时,可以在‘)’后面加上engine关键字制定存储引擎
create table t_class(
        classno int primary key,
        classname varchar(200)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
show create table t_class;//可以查看当前表格使用哪个存储引擎
show engines \G;//可以查看当前支持什么存储引擎
mysql支持9个,版本不同支持引擎不同
 
常见存储引擎:
  • MyISM:使用三个文件表示数据,格式文件、数据文件、索引文件(表的目录,可以缩小检索范围,提高搜索效率,可被压缩,可以设置成只读表来节省空间),对于一张表上加有unique约束的字段,会自动生成索引。安全性低,不支持事务。
  • InnoDB:重量级存储引擎,默认存储引擎,特点是非常安全,崩溃后可以自动恢复数据,但是效率不高。在数据库目录中以.frm格式文件表示。
  • MEMORY:数据存储在内存当中,且行的长度确定,因此它的运行速度很快。缺点是不安全,关机之后数据消失。不包含TEXT或BLOB字段,在数据库目录中以.frm格式文件表示。内存直接取数据,因此查询速度极快
 
 
注:***.sql文件被称为sql脚本文件
source D:\...\***.sql    运行脚本文件,那么该文件的语句将被全部执行
posted @ 2022-04-10 15:26  盛夏小叮当  阅读(59)  评论(0)    收藏  举报