mysql中的各种约束条件深入探讨

 更新时间:2024年05月06日 15:02:10   作者:景天科技苑  
在mysql中对编辑的数据进行类型的限制,不满足约束条件的报错,本文给大家分享mysql中的各种约束条件,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

mysql约束

在mysql中对编辑的数据进行类型的限制,不满足约束条件的报错

unsigned   :    无符号
not null   :       不为空
default    :       默认值
unique     :      唯一值,加入唯一索引
(索引相当于字典目录,索引的提出是为了加快速度,一味地乱加索引不会提高查询效率)
primary key:    主键
auto_increment: 自增加一 ,必须设置了主键才能设置该参数
zerofill   :    零填充
foreign key:    外键

约束在写sql时,放在数据类型的后面,如下,放在int的后面
字段名 类型 约束

unsigned 无符号

create table t3(id int unsigned);
insert into t3 values(-1); error
insert into t3 values(4000000000); success

设置无符号位约束,插入负值就报错

not null : 不为空

create table t4(id int not null , name varchar(11));
insert into t4 values(1,"张宇");
insert into t4 values(null,"张宇"); error
insert into t4(name) values("李四"); error

设置不为空约束,插入空就报错

NULL值是处于0和1之间的某个值,他也表示一个值,只不过这个值是NULL值,而不是0。
在进行计算的时候,1与NULL则结果为NULL。而0与NULL则结果为0。
1或NULL则结果为1,0或NULL则结果为NULL;可见NULL值是介于0和1之间的值。
另外非NULL既不是1也不是0,还是NULL

default : 默认值

create table t5(id int not null  , name varchar(11) default "沈思雨" );
insert into t5 values(1,null);
insert into t5(id) values(2);

设置了默认值后,插入时填入值,就是设置的值,非全列插入时,不写该字段的值,就用默认值

create table t5_2(id int not null  default "1111" , name varchar(11) default "沈思雨" );
insert into t5_2 values(); # 在values里面不写值,默认使用默认值;

unique: 唯一约束

加入唯一索引(索引的提出是为了加快速度,一味地乱加索引不会提高查询效率,索引是有一个文件来存索引)
唯一 可为null 标记成: UNI

create table t6(id int unique , name char(10) default "赵万里" );
insert into t6(id) values(1);
insert into t6(id) values(1); error
insert into t6(id) values(null);
insert into t6(id) values(null); # id变成了多个null

如果要删除null的字段,可以用 where 字段 is null 来删
唯一性约束,可以有多个null值,不违背唯一性约束

primary key: 主键

[ 唯一 + 不为null ] PRI 标记数据的唯一特征
一个表中,只能设置一个字段为一个主键,unique唯一约束可以设置多个
创建主键

create table t7(id int primary key , name varchar(10) default "赵沈阳");
insert into t7(id) values(1);
insert into t7(id) values(1); error 
insert into t7(id) values(null); error

设了主键,该字段不能重复,不能为空

unique + not null => PRI

create table t8(id int unique not null ,  name varchar(10) default "赵沈阳" );

设置了唯一性约束,且不为null,功能就跟primary key一样了

如果没有设置primary key,设置了unique not null ,默认把unique +not null 设置的字段设为主键

primary key / unique + not null => 优先把primary key 作为主键;

create table t9(id1 int unique not null ,  id2 int primary key );

同时设置了unique +not null 和 primary key 。优先把primary key 作为主键

一个表只能设置单个字段为一个主键;

create table t10(id1 int  primary key  ,  id2 int primary key ); error

auto_increment: 自增加一

一般配合 主键或者unique 使用

create table t11(id int primary key auto_increment , name varchar(255) default "敬文栋");
insert into t11 values(1,"张三");
insert into t11 values(null,"李四");
insert into t11(id) values(null);
# 使用默认值或者自增插入数据
insert into t11 values();

删除数据,这是删除所有数据
delete from t11;
删除数据 + 重置id
truncate table t11;

主键自增,可以用0,null,default占位

删除一条数据后,如果再添加不想主键从下一个开始,需要在添加之前,复位主键
删除数据后,执行下面的sql

如果是中途删除,先查看一下目前的auto_increment

show create table student;
| student | CREATE TABLE `student` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `age` int NOT NULL,
  `birthday` date DEFAULT NULL,
  `is_del` tinyint DEFAULT '0',
  `height` decimal(3,2) DEFAULT NULL,
  `cls_id` varchar(6) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_class` (`cls_id`),
  CONSTRAINT `fk_class` FOREIGN KEY (`cls_id`) REFERENCES `class` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 |

AUTO_INCREMENT=几 下次插入时就从几开始递增

ALTER TABLE (表名) AUTO_INCREMENT = 1;

zerofill : 零填充 (配合int使用,不够5位拿0来填充)

create table t12(id int(5) zerofill);
insert into t12 values(1234567);

位数超了之后,按写入的数据直接插入

insert into t12 values(12);

位数不足,前面补0

到此这篇关于mysql中的各种约束条件的文章就介绍到这了,更多相关mysql约束条件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下Centos7安装Mysql5.7.19的详细教程

    Linux下Centos7安装Mysql5.7.19的详细教程

    这篇文章主要介绍了Linux下Centos7安装Mysql5.7.19的教程详解,需要的朋友可以参考下
    2017-08-08
  • 有关SQL模糊查询

    有关SQL模糊查询

    在进行数据库查询时,有完整查询和模糊查询之分,这里简单介绍下,方便需要的朋友
    2006-12-12
  • MySQL Truncate用法详解

    MySQL Truncate用法详解

    这篇文章主要介绍了MySQL Truncate用法的相关资料,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL中DATE_FORMAT()函数的具体使用

    MySQL中DATE_FORMAT()函数的具体使用

    本文主要介绍了MySQL中DATE_FORMAT()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • MySQL中几种数据统计查询的基本使用教程

    MySQL中几种数据统计查询的基本使用教程

    这篇文章主要介绍了几种MySQL中数据统计查询的基本使用教程,包括平均数和最大最小值等的统计结果查询方法,是需要的朋友可以参考下
    2015-12-12
  • Mysql 错误too many connections解决方案

    Mysql 错误too many connections解决方案

    这篇文章主要介绍了Mysql 错误too many connections解决方案的相关资料,这里提供了如何解决此问题,需要的朋友可以参考下
    2016-11-11
  • Mysql 设置boolean类型的操作

    Mysql 设置boolean类型的操作

    这篇文章主要介绍了Mysql 设置boolean类型的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MySql 8.0.16版本安装提示已经不使用“UTF8B3”而是使用“UTF8B4”问题

    MySql 8.0.16版本安装提示已经不使用“UTF8B3”而是使用“UTF8B4”问题

    这篇文章主要介绍了MySql 8.0.16版本安装提示已经不使用“UTF8B3”而是使用“UTF8B4”问题 ,需要的朋友可以参考下
    2019-07-07
  • MySQL select查询之LIKE与通配符用法

    MySQL select查询之LIKE与通配符用法

    这篇文章主要介绍了MySQL select查询之LIKE与通配符用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 给MySQL表中的字段设置默认值的两种方法

    给MySQL表中的字段设置默认值的两种方法

    在MySQL中,我们可以为表的字段设置默认值,以确保在插入新记录时,如果没有为该字段指定值,将使用默认值,要为MySQL表中的字段设置默认值,我们可以在创建表时或者在已存在的表上使用ALTER TABLE语句进行修改,下面将展示两种设置默认值的方法,需要的朋友可以参考下
    2023-11-11

最新评论