首页 > 数据库 >MySQL:数据库的约束

MySQL:数据库的约束

时间:2024-11-15 18:43:17浏览次数:3  
标签:insert name 数据库 约束 MySQL into table create id

约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

1. NOT NULL

指示某列不能存储 NULL 值

注:如果没有指定非空时,当前列是可以填入非空的,在把某一列定义为一个必填项,就可以使用not null来定义。

此时的id几句成为了一个必填项,null设置为NO

此时的id就不能为null,否则就会报错

满足条件设置成功

 create table student(
    -> id bigint not null,
    -> name varchar(10)
    -> );
 desc student;
insert into student  values (null,'shangsan');
insert into student  values (123456,'shangsan');
 select * from student;

2. UNIQUE

保证某列的每行必须有唯一的值(某列的值在整个表中不能有重复)

 

如果插入id相同的,则不满足唯一的条件,则会报错 

 这次插入id不唯一,就可以成功的插入了

 create table student1(
    -> id bigint unique,
    -> name varchar(20)
    -> );
desc student1;
insert into student1 values (123,'zhangsan'),(123,'lisi');
insert into student1 values (123,'zhangsan'),(456,'lisi');
 select * from student1;

3. DEFAULT

规定没有给列赋值时的默认值(将值为空的设置为默认值)

 随机的插入一个id,但是不给name赋值,则name会自定赋值成已经定义的 ‘无名氏’

 

注:如果我们手动置为null,则显示的值必然是我们手动置成的null

 

 create table student2(
    -> id bigint,
    -> name varchar(20) default'无名氏'
    -> );
desc student2;
  insert into student2 (id) values (1);
 select * from student2;
insert into student2 (name) values (null);

 

4.PRIMARY KEY

NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 (主键的列即时非空又是唯一的)

  

注:id指定为非空并且唯一,列就会被标识为primary 表示它是一个主键

 create table student3(
    -> id bigint not null unique,
    -> name varchar(20) default'无名氏'
    -> );
 desc student3;

一个表不能有多个主键

create table student5(
    -> id int primary key,
    -> na int primary key
    -> );

但一个主键可以包括多个列(复合主键)

其中有一个不同是可以插入的,但如果全部都不同的话,则无法插入 

create table student6(
    -> id int ,
    -> na int,
    -> primary key(id,na)
    -> );

自增类型(auto increment)

表示在表上一条的基础上加1(在插入时,先找到最大值,然后再最大值的基础上+1,作为一个新的值,作为新的数据行的值)

当插入一个id为空的列,它会按照id的最大值自动生成一个+1的值 

 

 create table student4(
    -> id bigint primary key auto_increment,
    -> name varchar(10)
    -> );
desc syudent4;
insert into student4 (id) values (1);
 insert into student4 (name) values ('zhangsan');
 select * from student4;

5.FOREIGN KEY 

保证一个表中的数据匹配另一个表中的值的参照完整性。

创建外键的语法:foreign key (字段名) references  主表(列)

看表(MUL说明存在外键关系)

 

写入正确的数据可以读入

 

写入不存在的数,则会报错

注;如果要删除一个主表中的数,要先删除子表中的数据,因为子表对主表有依赖作用,只有先将子表中的对应的数据删除,才可以删除主表中的数据。

 create table c(
    -> id bigint primary key auto_increment,
    -> name varchar(10)
    -> );
 create table n(
    -> id bigint primary key auto_increment,
    -> name varchar(20) not null,
    -> c_id bigint,
    -> foreign key (c_id) references c(id)
    -> );
desc n;

6.CHECK

保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

满足条件

 

不满足条件

create table check_gender(
    -> id bigint,
    -> gender varchar(1),
    -> check(gender='男' or gender='女')
    -> );
 insert into check_gender values(1,'男');
insert into check_gender values(1,'1');//错误的
 select * from check_gender;

希望能对大家有所帮助!!!!

标签:insert,name,数据库,约束,MySQL,into,table,create,id
From: https://blog.csdn.net/blamep/article/details/143784887

相关文章

  • 深入理解 MySQL 大小写敏感性:配置、问题与实践指南20241115
    深入理解MySQL大小写敏感性:配置、问题与实践指南在开发和部署MySQL数据库时,表名的大小写敏感性问题常常被忽略,却可能在跨平台迁移、团队协作或工具兼容性方面引发复杂的故障。本文将结合实际案例,深入探讨MySQL的lower_case_table_names参数,剖析其行为、配置方法以......
  • 【MySQL的安装与配置】
    目录:一、下载MySQL二、安装MySQL三、配置环境变量一、下载MySQL进入官方下载页面:https://www.mysql.com/downloads二、安装MySQL双击运行下载好的安装程序 三、配置环境变量此部分操作的目的就是方便咱们通过命令行在任何位置都可以......
  • JPA 注解只能用于标记实体类及其与数据库表之间的关系吗?对数据库表并没有什么实际影响
    JPA注解的主要作用确实是用于标记实体类及其与数据库表之间的关系,但它们在数据库层面上也会产生实际影响。具体来说,JPA注解不仅用于对象-关系映射(ORM),而且会影响数据库的结构和行为。以下是一些关键点,说明JPA注解如何对数据库表产生实际影响:1.生成数据库结构使用JPA时,可以......
  • 超详细:数据库的基本架构
    MySQL基础架构        下面这个图是我给出的一个MySQL基础架构图,可以清楚的了解到SQL语句在MySQL的各个模块进行执行过程。然后MySQL可以分为两个部分,一个是server层,另一个是存储引擎。server层Server层涵盖了MySQL的大多数核心服务功能,以及所有的内置函数(如日期......
  • 记一次react+node+nginx+mysql+docker发布
    简言这是为了给老婆工作上算培训班课时,计算课销更方便点的CRM(纸质档转线上)准备工作React项目Node项目(express,koa任意选择)一台服务器(如果你是纯手工发布,服务器选择倒是无所谓,如果要结合docker的话,请选择国外服务器或者香港也行,阿里云就算了,我自己最开始用的阿里云,docker根本p......
  • 力扣-Mysql-3293-计算产品最终价格(中等)
    一、题目来源3293.计算产品最终价格-力扣(LeetCode)二、数据表结构表:Products+------------+---------+|ColumnName|Type|+------------+---------+|product_id|int||category|varchar||price|decimal|+------------+-------......
  • SSM冷链物流管理系统的设计与开发90b3l 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,站点信息,司机,车辆信息,商品信息,订单信息,配送信息开题报告内容一、研究背景随着全球经济的飞速发展和人们生活水平的日益提高,冷链食品的市场......
  • 通过情况数据目录初始化MySQL数据库
    第一步:cd/etc/my.cnf打开配置文件,查看当前数据库的数据目录datadir打开datadir路径,备份所有文件到另外的目录然后删除所有rm -rf*初始化数据库mysqld--defaults-file=/etc/my.cnf--initialize-insecure然后datadir路径下会产生新的数据文件,给所有文件,包括文件夹下面......
  • SQL Server数据库添加只读用户
    需求描述笔者手头有一个已经部署好的SQLServer数据库,现需要给外部人员开通访问权限,但又要避免外部人员误操作污染数据库,所以这里选择给他们配置数据库只读用户。详细配置步骤我们打开MicrosoftSQLServerManagementStudio(简称SSMS),连接对应数据库引擎,如下图菜单位置,右键点......
  • 使用 JuiceFS 快照功能实现数据库发布与端到端测试
    今天的博客来自JuiceFS云服务用户Jerry,他们通过使用JuiceFSsnapshot功能,创新性地实现了数据的版本控制。Jerry,是一家位于北美的科技公司,利用人工智能和机器学习技术,简化用户购买汽车和家庭保险的比较及购买流程。在软件开发领域,严格的测试和受控发布已经成为几十年来的标......