MySQL约束详解

        如何理解约束:如果把身份证号码作为数据存入数据库中,万一出现了19位的身份证号该怎么办?有两个人的身份证号居然是相同的这可能吗?

        MySQL中的约束就是用来检测数据正确性和合理性的,一般的错误有:1,存在相同重复的数据;2,错误的数据;3,数据丢失错误(空数据);4,指代不明确的错误(表之间无法准确联系起来)等。

        MySQL的约束就是用来解决上述问题的,比如身份证号不能重复,收货地址不能空。如果违反了约束,则数据操作行为被制止。

        约束是对表的操作,即alter table。实际上是对表对象中的字段进行设置。

目录

一,什么是约束?

1,主键约束

2,外键约束

3,唯一性约束

4,非空约束

5,检查约束

6,注意点

二,操作表的约束

1,给一张表添加主键约束

2,给一张表添加自增长主键约束

3,删除一张表中的主键约束

4,给一张表添加外键约束

5,删除一张表的外键约束

6,给表中某字段添加唯一性约束

7,删除表中某字段的唯一性约束

8,给表中某个字段添加非空约束

9,删除表中某个字段的非空约束

三,创建表的时候添加约束

1,查询表中加了哪些约束?

2,创建表时添加约束


一,什么是约束?

        数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。
        约束限制的内容大概为:唯一性,能否为空,外键是否明确。

1,主键约束

        主键的作用:用来唯一标识每一行,即给一张表中的每一行取一个独一无二的外号,方便查询。

        主键:prime key,约束:constraint。主键约束是使用最频繁的约束。在设计数据表时,一般情况下,都会要求表中设置一个主键。

        主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号必须是唯一不重复的,则可以为这个字段作为主键约束。

        之所以说主键是一个特殊的字段,是因为某一列的数据假如具有唯一性和非空,则这个字段的数据可以设置为主键。

        总结:主键是一个表的特殊字段,具有现实意义的唯一性。即:可以选择一个或多个字段作为主键,但是这个字段的数据/多个字段的数据组合必须是唯一不空的。或者使用自增长主键。这是添加主键约束的两种方式。

        特点:唯一性,不能空,不重复(都唯一了,哪来的重复)。记忆口诀:唯一的身份证。

2,外键约束

        (Foreign Key) ,外键约束经常和主键约束一起使用,用来确保数据的一致性。比如成绩表和学生信息表之间需要产生联系,可以通过学生学号。

        特点:可空,可重复,完整性。可空是因为空可以代表一种状态,可重复是指他们的状态相同,完整性是指不允许查不到。

        总结:新增或确定某一个字段作为外键。通过这一个字段的能够与其他表进行联系。如果他有值,则这个值必须在其他表某个字段里面存在。外键是给程序员看的,本表→本表外键→其他表字段→得到其他表整行数据。

3,唯一性约束

        (Unique) ,唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。与主键约束不同的是,唯一约束在一个表中可以有多个(为多个字段设置唯一性约束),并且设置唯一约束的列是允许有空值的

        特点:某字段设置唯一性约束之后,可以为空(多个空也行),当有值时则值必须唯一

4,非空约束

        (Not Null) ,非空约束用来约束表中的字段的数据不能为空。

5,检查约束

        (Check) ,检查约束也叫用户自定义约束,是用来检查数据表中,字段值是否有效的一个手段,但目前 MySQL 数据库不支持检查约束

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_increament
alter table emp drop primary key;

4,给一张表添加外键约束

        使用DDL语句添加外键约束。可以给一张表设置多个外键。

ALTER  TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN  KEY(列名) REFERENCES 参照的表名(参照的列名);
alter table emp add constraint emp_fk
foreign key(dept_id) references
departments(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;
);
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在MySQL中,可以使用约束来确保表中的数据满足特定的条件。其中,唯一性约束是一种常见的约束类型。唯一性约束可以保证某个列的值在表中是唯一的。在创建表时,可以使用列级约束或表级约束来实现唯一性约束。列级约束是在列定义时指定的,而表级约束是在表定义的末尾指定的。例如,可以使用UNIQUE关键字来创建唯一性约束。引用\[2\]:另外,还可以使用联合约束来实现多个列的唯一性约束。联合约束表示多个字段的组合必须在表中是唯一的。在创建表时,可以使用UNIQUE关键字并指定多个字段来创建联合约束。引用\[3\]:此外,约束还可以命名,以便以后可以通过名称来引用和删除约束。在创建约束时,可以使用CONSTRAINT关键字并指定约束的名称。例如,可以使用UNIQUE关键字和CONSTRAINT关键字来创建具有名称的唯一性约束。在MySQL中,还可以使用NOT NULL约束来确保某个列的值不为空。在创建表时,可以在列定义时指定NOT NULL关键字来创建非空约束。如果插入数据时未提供非空列的值,则会引发错误。 #### 引用[.reference_title] - *1* *2* *3* [MySQL——约束(constraint)详解](https://blog.csdn.net/w_linux/article/details/79655073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值