热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL与MariaDB数据库管理:约束与键操作详解

在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。

关系型数据库中数据约束,可以理解为想数据表中插入数据时需遵守的限制规则;MySQL中常见的约束有主键约束、唯一键约束、外键约束、非空约束等;

主键:primary key,表上一个或多个字段的组合,填入主键字段中的数据;必须不同于已经存在的其他行中相同字段上的数据,且不为空;一个表只能存在唯一主键,一个主键可由多个字段组成;

唯一键:unique key,表上一个或多个字段的组合,填入其中字段中的数据,必须不同于已经存在其他行上相同字段的数据;可以为空,可有多个唯一键;

外键:foreign key,一个表中外键字段所能够插入的取值范围,取决于引用另一个表上主键字段上已存在的数据集合;

检查条件约束:check,自定义的逻辑表达式;

非空约束

添加非空约束

设置非空字段,在testtb表中的name字段添加非空约束;

MariaDB [testdb]> alter table testtb modify name varchar(100) not null;

删除非空约束

MariaDB [testdb]> alter table testtb modify name varchar(100) null;

自动增长

添加自动增长

在testtb表中的id字段设置自动增长;

MariaDB [testdb]> alter table testtb modify id int auto_increment;

也可用如下使用

MariaDB [testdb]> alter table testtb change id id int auto_increment;

删除自动增长

MariaDB [testdb]> alter table testtb change id id int;
MariaDB [testdb]> alter table testtb modify id int;

主键约束

添加主键约束

使用如下两条语句中的任意一条均可;

MariaDB [testdb]> alter table testtb4 add primary key(id);
MariaDB [testdb]> alter table testtb4 add constraint primary key(id);

删除主键约束

删除主键时,不能直接删除,需要先删除自动增长,再删除主键;同理,如果当前表主键已经在其他表中字段当做外键;应先删除其他表中主外键关系,才可删除当前主键;

MariaDB [testdb]> alter table testtb drop primary key;

唯一键约束

添加唯一键约束;

默认情况下唯一键的名称为字段名称

MariaDB [testdb]> alter table testtb add unique key(uid);

创建唯一键,并制定唯一键名称为uni_test

MariaDB [testdb]> alter table testtb add unique key uni_test(test);

删除唯一约束键

MariaDB [testdb]> alter table testtb drop index uni_test;

查看约束

查看主键、查看唯一键、查看外键

MariaDB [testdb]> select * from information_schema.key_column_usage where table_name='test1';

查看主外键对应关系

查看test1表中已用那些表中的主键作为自己的外键;也可理解为查看test1的外键

MariaDB [testdb]> select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from information_schema.KEY_COLUMN_USAGE where TABLE_NAME = 'test1' and REFERENCED_TABLE_NAME is not null;

查看test2表的主键被那些表已用为外键

MariaDB [testdb]> select REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME,CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME from information_schema.KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME = 'test2';

外键约束

 添加外键约束

 使用下列两条语句设置外键,在testtb表中创建一个新字段tid,并且添加外键testtb_tid_fk,外键,testtb表中的tid字段引用了表testtb2表中的id字段;

MariaDB [testdb]> alter table testtb add column tid int default 0 not null;
MariaDB [testdb]> alter table testtb add constraint testtb_tid_fk foreign key(tid) references testtb2(id);

删除外键约束

查找test4表中的外键

MariaDB [testdb]> select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from information_schema.KEY_COLUMN_USAGE where TABLE_NAME = 'test4' and REFERENCED_TABLE_NAME is not null;

删除表test4中的test_tid_fk外键

MariaDB [testdb]> alter table test4 drop foreign key test_tid_fk;


转:https://www.cnblogs.com/Gmiaomiao/p/9201295.html



推荐阅读
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 本文探讨了如何利用NFC技术,将存储在Android手机中的患者信息安全高效地传输到台式计算机。重点介绍了适用于医院场景的NFC USB读卡器(如ACR122U)的应用方法。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
author-avatar
徐徐回忆_545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有