麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
748
2023-07-04
mysql中restrict的含义是什么
在mysql中,restrict是约束的意思,是指对表中数据的一种限制,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性、有效性和完整性。在MySQL中,有六种约束可供使用,包括主键约束、外键约束、唯一约束、检查约束、非空约束和默认值约束。
MySQL中什么是约束?
restrict(约束)是指对表中数据的一种限制,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性、有效性和完整性。
如果无效的值,如200、300,被存入数据表作为年龄的值,那么这些值就毫无意义。因此,使用约束来限定表中的数据范围是很有必要的。
MySQL中的约束就是用来检测数据正确性和合理性的,一般的错误有:1,存在相同重复的数据;2,错误的数据;3,数据丢失错误(空数据);4,指代不明确的错误(表之间无法准确联系起来)等。
MySQL的约束旨在解决一些问题,例如禁止身份证号重复以及强制收货地址非空。如果违反了约束,则数据操作行为被制止。
在 MySQL 中,主要支持以下 6 种约束:
1)主键约束
主键约束是使用最频繁的约束。在设计数据表时,一般情况下,都会要求表中设置一个主键。
主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号是唯一的。
2)外键约束
外键约束经常和主键约束一起使用,用来确保数据的一致性。
例如,一个水果摊,只有苹果、桃子、李子、西瓜 4 种水果,那么,你来到水果摊要买水果只能选择苹果、桃子、李子和西瓜,不能购买其它的水果。
3)唯一约束
唯一约束和主键约束有个共同之处,那就是它们都能保证列的唯一性。与主键约束不同的是,唯一约束在一个表中可以有多个,并且设置唯一约束的列是允许有空值的,虽然只能有一个空值。
例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。
4)检查约束
检查约束是用来检查数据表中,字段值是否有效的一个手段。
年龄字段在学生信息表中不含负数,且有数值限制。如果是大学生,年龄一般应该在 18~30 岁之间。为了减少无效数据的输入,在设置字段的检查约束时需要根据实际情况进行适当的设置。
5)非空约束
非空约束用来约束表中的字段不能为空。如果学生信息表中没有填写学生姓名,那么这条记录就没有意义。
6)默认值约束
默认值约束用来约束当数据表中某个字段不输入值时,自动为其添加一个已经设置好的值。
例如,在注册学生信息时,如果不输入学生的性别,那么会默认设置一个性别或者输入一个“未知”。
默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。
以上 6 种约束中,一个数据表中只能有一个主键约束,其它约束可以有多个。
操作表的约束
1、给一张表添加主键约束
一张表的只能有一个主键,添加主键有两种方式。
单一主键:使用一个列作为主键列,当该列的值有重复时,则违反唯一约束。
联合主键:使用多个列作为主键列,当多个列的值都相同时,则违反唯一约束。指的是:使用多个列的组合形式来确定主键,当出现组合重复就无效,如00,01,10,11,12,22这样的组合形式。
使用DDL语句添加主键约束。示例:
ALTER TABLE 表名 ADD PRIMARY KEY(列名);alter table emp add primary key(employee_id);//选取employee_id作为主键alter table emp add primary key(employee_id,shenfen_id);//联合主键登录后复制
2、给一张表添加自增长主键约束
auto_increment。数据库管理系统在自动维护表格时会根据自然数自增的方式自动添加主键。同样的,自增长主键也是把某一列用作主键。当表中添加了主键的字段增加了数据,则主键自动加1。
自增长主键和一般主键约束可以相互转化。
1, 一个表中只能有一个列为自动增长。2,自动增长的列的类型必须是整数类型。3,自动增长只能添加到具备主键约束与唯一性约束的列上。4,删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后在删除约束。
注意点:如果之前给某个字段添加了自增长属性,则删除这个字段时要先删除自增长属性。
alter table 表名 modify 主键 类型 auto_increment;alter table emp modify employee_id int auto_increment;登录后复制
或者在Navicat中添加主键:
3、删除一张表中的主键约束
使用DDL语句删除主键。
ALTER TABLE 表名 DROP PRIMARY KEY;alter table emp drop primary key;登录后复制
注意:删除主键时,如果主键列具备自动增长能力,需要先去掉自动增长,然后在删除主键。
alter table emp modify employee_id int;//去掉自增长,与添加自增长代码地区别就是没有auto_increamentalter table emp drop primary key;登录后复制
4、给一张表添加外键约束
使用DDL语句添加外键约束。可以给一张表设置多个外键。
ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 参照的表名(参照的列名);alter table emp add constraint emp_fkforeign key(dept_id) referencesdepartments(department_id);登录后复制
或在在Navicat中添加外键。外键名称常使用:表名_fk,表名_fk1表示。
5、删除一张表的外键约束
外键约束可以通过使用DDL语句来删除。或者在Navicat中主动删除外键。
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;alter table emp drop foreign key emp_fk;登录后复制
6、给表中某字段添加唯一性约束
使用DDL语句添加唯一性约束。或在在Navicat中添加唯一性约束。
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名);alter table emp add constraint emp_uk unique(name);登录后复制
7、删除表中某字段的唯一性约束
使用DDL语句删除唯一性约束。删除之前需要弄清楚删除的约束名是对哪一个字段进行约束的。
ALTER TABLE 表名 DROP KEY 约束名;alter table emp drop key emp_uk;登录后复制
8、给表中某个字段添加非空约束
使用DDL语句添加非空约束。或者Navicat。
ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL;alter table emp modify salary float(8,2) not NULL;登录后复制
9、删除表中某个字段的非空约束
使用DDL语句删除非空约束。
ALTER TABLE 表名 MODIFY 列名 类型 NULL;alter table emp modify salary float(8,2) NULL;登录后复制
创建表的时候添加约束
上面介绍了当一张表已经存在之后如何添加约束。下面介绍在一开始新建表的时候如何添加约束。
1、查询表中加了哪些约束?
SHOW KEYS FROM 表名;登录后复制
2、创建表时添加约束
创建 depts 表包含 department_id 该列为主键且自动增长,department_name 列不允许重复,location_id 列不允含有空值。
create table depts(department_id int primary key auto_increment,department_name varchar(30) unique,location_id int not null;);登录后复制
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。