网站更新方法,值得信赖网页制作平台,长宁网站建设,长沙哪家公司做网站好1. 数据库约束
数据库约束时关系型数据库的一个重要功能,主要的作用是保证数据的有效性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确) 人工检查数据的完整性工作量非常大,在数据库中定义一些约束,那么数据在写入数据库的时候,就会帮我们做一些校验.并且约束一…1. 数据库约束
数据库约束时关系型数据库的一个重要功能,主要的作用是保证数据的有效性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确) 人工检查数据的完整性工作量非常大,在数据库中定义一些约束,那么数据在写入数据库的时候,就会帮我们做一些校验.并且约束一般是在指定列上创建的.
2. 约束类型
类型说明NOTNULL⾮空约束 常用指定⾮空约束的列不能存储NULL值DEFALUT默认约束常用当没有给列赋值时使⽤的默认值UNIQUE唯⼀约束常用指定唯⼀约束的列每⾏数据必须有唯⼀的值PRIMARYKEY主键约束常用NOTNULL和UNIQUE的结合可以指定⼀个列或多个列有助于防⽌数据重复和提⾼数据的查询性能FOREIGNKEY外键约束目前不用外键约束是⼀种关系约束⽤于定义两个表之间的关联关系可以确保数据的完整性和⼀致性CHECK约束 不用⽤于限制列或数据在数据库表中的值确保数据的准确性和可靠性
3. NOTNULL⾮空约束
定义表时某列不允许为NULL时可以为列添加⾮空约束。
⽐如创建⼀个学⽣表学⽣名为NULL时这条记录是不完整的 此时需要约束学⽣名的列不能为NULL 由于name列有⾮空约束插⼊NULL值时报错但插入name的正确值就能通过 查看表结构NULL列为NO表⽰值不允许为NULLYES表⽰值可以为NUL 4. DEFALUT默认值约束 DEFAULT约束⽤于向列中插⼊默认值如果没有为列设置值那么会将默认值设置到该列. 首先我们创建一个表新增年龄列
示例: 我们希望插入进来的数据没有给定年龄时会默认有年龄那么我们重构学生表为年龄加入默认约束在要加约束的列名后直接加default默认值即可 create table family (id bigint,name varchar(20) NOT NULL,age int default 18);插⼊⼀条记录不指定年龄的值时列使⽤了默认值 查看表结构年龄列的默认值为18 当我们插入年龄列为NULL时是否默认值还是18但当⼿动明确指年龄列为NULL时列值为NULL不会使用默认值 5. UNIQUE唯⼀约束 指定了唯⼀约束的列该列的值在所有记录中不能重复⽐如⼀个⼈的⾝份证号学⽣的学号等 重构学生表id列后增加唯一约束
drop table if exists student;
create table student2 (
id bigint UNIQUE,
name varchar(20) not null
);我们发现不设置唯一约束时id可以重复 我们发现为id列添加唯一约束后相同的则不能插入进去唯一约束生效 在id列添加 UNIQUE关键字为 id 设置唯一约束 查看表结构Key列显⽰UNI表⽰唯⼀约束 但当插入NULL值时依旧可以插入
6. PRIMARYKEY主键约束
主键约束唯⼀标识数据库表中的每条记录。 主键必须包含唯⼀的值且不能包含NULL值。 每个表只能有⼀个主键可以由单个列或多个列组成。 通常为每张表都指定⼀个主键主键列建议使⽤BIGINT类型
重构学⽣表为ID列添加⾮空和唯⼀约束
drop table student;create table student (id bigint not null unique,name varchar(20) not null,age int DEFAULT 18,sno varchar(10) UNIQUE);查看表结构添加了⾮空和唯⼀约束之后Key列显⽰PRI表⽰主键 从此处我们可以知道 PRIMARY KEY NOT NULL UNIQUE当Id列的值重复时会发⽣主键冲突 通常把主键列设置为⾃动增⻓auto_increment让数据库维护主键值 PRIMARY KEY auto_increment 插⼊数据时不设置主键列的值
上图中我们插错了一条数据那我们的自增主键id会走到什么位置2还是3 ?? 接着我们查看一下此时发现id是从3开始的这是为何因为在数据库中插入数据正确或错误自增主键都会向下走一步不会回退这样可以提高查询效率。 查看表结构Extra列显⽰auto_increment表⽰⾃增 主键值是自增的那么是否可以不连续呢此时我们插入主键值为100的数据我们发现插入成功所以主键值可以不连续。 那么我们发现插入100主键值之后自增主键将从哪里自增呢我们发现下一次自增从主键的最大值开始 主键或唯⼀键冲突时的更新操作插⼊否则更新
1.插入
2.更新 可以使⽤以上语法如果插⼊时有冲突则更新当前列的值 两⾏受影响表⽰删除了原来的记录⼜新写⼊了⼀条记录其与update student set name 钱六number100011 where id100;等效
3.替换 如果表中没有冲突则直接插入新数据和insert的功能是一样的。 表中不能有多个主键 drop table student;# 重构学⽣表
create table student (id bigint PRIMARY KEY auto_increment, # 定义主键
name varchar(20) PRIMARY KEY
); # 定义主键
ERROR 1068 (42000): Multiple primary key defined # 报错7. FOREIGNKEY外键约束
外键⽤于定义主表和从表之间的关系 外键约束主定义在从表的列上主表关联的列必须是主键或唯⼀约束 当定义外键后要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。
7.1 语法
foreign key (id) references class(id)删除主表某条记录时从表中不能有对该记录的引⽤ 删除主表时要先删除从表 删除主表时应该先解除主外键关系或者删除从表
8. CHECK约束
可以应⽤于⼀个或多个列⽤于限制列中可接受的数据值从⽽确保数据的完整性和准确性。 在8.0.16开始全⾯⽀持CHECK约束之前的版本会忽略CHECK的定义 但是注意一般在应用程序级别校验
重构学⽣表有以下要求年龄不能⼩于16岁性别只能是男或⼥
create table student(id bigint PRIMARY KEY auto_increment, #设置⾃增主键name varchar(20) not null,age int DEFAULT 18,gender char(1),check (age 16),check (gender 男 or gender ⼥)
);c1的值不能为0c2的值必须⼤于0c3的值不⼩于c2
create table t_check (c1 int check(c1 0),c2 int check(c2 0),c3 int,check(c3 c2));