首页 > 数据库 >MySQL约束条件介绍

MySQL约束条件介绍

时间:2022-12-28 10:55:44浏览次数:51  
标签:约束条件 name int 介绍 id 插入 MySQL t1 主键

  • 无符号、零填充
unsigned
	# 因为正负值符号会占用一个比特位,使用此约束条件可以去掉数字类型里面的正负值符号,之后相同数字类型会支持的正数范围会更大
	id int unsigned
zerofill
	# 整数型默认是int(11),也可以指定int(num),之后插入的数据如果不足指定的数据类型长度则会使用数字0进行填充
	id int(5) zerofill
  • 非空
not null
# 非空可以指定字符类型不可以为空。
# 创建语句如下:
create table t1(
	id int,
    name varchar(16) not null
)
# 例外,当插入内容指定为空字符串时是可以插入的。
insert into t1 values(1, '');
# 如上所示,是可以插入的,这只能在代码层面作限制。
  • 默认值
default xxx
# 此约束条件可以在插入时如果不插入数据,则会默认插入默认值
create table t1(
	phone bigint default 00000000000,
    name varchar(16)
);
# 插入null的话,则不会触发默认值
insert into t1 values(null, 'jason');
  • 唯一值
unique
# 使一列的数据为唯一,不可重复
create table t1(
	id int unique,
    name varchar(10)
);
# 注意:唯一并不可以限制为空,空值是可以重复的
mysql> insert into t1 values(null, 'jack');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 values(null, 'rose');
Query OK, 1 row affected (0.00 sec)

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
| NULL | jack |
| NULL | rose |
+------+------+
2 rows in set (0.00 sec)
  • 主键
primary key
# 使用方法
create table t1(
	id int primary key,
    name varchar(10)
);
'''
主键的特性:
	1.约束性为not null与unique的结合(也就是定义主键后,这一列的值为非空且唯一)
    2.在MySQL的Innodb存储引擎中,必须有一列为主键,并且也只能有一列为主键(不可以设置多个主键)
    	2.1 补充说明:当你在建一个表的时候,如果没有设置主键,会有两种情况出现:
    	2.1.1 所有的字段都没有unique+not null约束条件:
    			Innodb存储引擎会创建一个隐藏列作为主键(隐藏列无法使用)
    	2.1.2 一个字段或多个字段设置有unique+not null约束条件
    			Innodb存储引擎会将第一个有unique约束条件的列自动转换为主键
'''
  • 自增
auto_increment
# 使用方法:
create table t1(
	id int primary key auto_increment,
    name varchar(16)
);
'''
特性:
	1. 自增只能设置到主键字段中,且字段只能为整数型。
	1. 自增不会因为数据的删除而回退。
	2. 自增设置后也可以手工添加数据
		2.1 因为是主键列,所以插入的数据肯定不能重复
		2.2 如果插入的数据比当前自增的数字小,只要符合primary key的条件也可以插入
		2.3 如果插入的数据比当前自增的数字大,那么自增的数字会自动变为插入的数据值+1
	3. 自增如果想要回退只能通过truncate清空表进行重置。
'''
  • 外键
foreign key(本表的字段名) references table_name(字段名)
on update cascade
on delete cascade

create table book(
    id int primary key auto_increment,
    book_name varchar(32)
);

create table author(
	id int primary key auto_increment,
    name varchar(16),
    book_id int,   # 如果是一对一,需要加上unique约束条件,不加则是一对多
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade
);
'''
外键是强耦合,不符合解耦合的特性
	在实际项目中,大部分时候会使用代码进行约束,而不是使用外键
特性:
	一对多
		基础的用法,外键建立在多的一方(一个数据对应多个外键,那外键就建在多那那一方)
	多对多
		针对多对多的关系,适合建立维度表与事实表进行结合
	一对一
		建议将外键创建在使用频率高的表中
		创建的时候,需要对外键字段加unique约束条件,这样就形成了一对一
'''

标签:约束条件,name,int,介绍,id,插入,MySQL,t1,主键
From: https://www.cnblogs.com/smyz/p/17009628.html

相关文章

  • 华大电子MCU-CIU32F011x3、CIU32F031x5低功耗介绍
    9.低功耗(LOWPOWER)9.1.低功耗模式在系统或电源复位以后,微控制器处于正常模式运行状态,系统所用时钟为256KHz内部RC振荡器输出。当CPU不需继续运行时,可以利用进......
  • mysql Event、存储过程、表命令
     Mysql事件调度器(EventScheduler)类似于定时器,可以在某一个时间点执行一个SQL语句或一个语句块(BEGIN...END);或者每隔固定间隔重复执行。类似于Linux下的crontab,或Windows......
  • mybatis批量update(mysql)
    批量插入:<insertid="batchInsert">insertintotestTable(id,content)values<foreachcollection="list"item="item"index="index"separator=",">......
  • 系统级性能分析工具perf的介绍与使用【转】
    转自:https://www.cnblogs.com/arnoldlu/p/6241297.html测试环境:Ubuntu16.04+ Kernel:4.4.0-31 系统级性能优化通常包括两个阶段:性能剖析(performanceprofiling)和代码......
  • 《Flowable流程引擎从零到壹》Flowable流程引擎介绍和实战项目初始化流程引擎实例
    ❤️作者主页:​​小虚竹​​❤️作者简介:大家好,我是小虚竹。Java领域优质创作者......
  • MySql索引下推知识分享
    作者:刘邓忠Mysql是大家最常用的数据库,下面为大家带来mysql索引下推知识点的分享,以便巩固mysql基础知识,如有错误,还请各位大佬们指正。1什么是索引下推索引下推(In......
  • 内核输入子系统之evdev_open和evdev_read介绍
    内核输入子系统之evdev_open和evdev_read介绍在分配evdev后其中还有一个队列成员就是client,记录input_dev上报的数据,实际看下client的描述:可以看出确实是一个队列,有头有......
  • docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
    一、前言在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elast......
  • mysql相关优化配置
    [mysqld]#mysql数据存储目录datadir=/data/mysql#socket存储socket=/tmp/mysqld.sock#当一个磁盘或分区空间不够时,可以将数据存储到其他的磁盘或分区symbolic-links=......
  • 基于KeepAlived的MySQL主主互备模式的高可用
    架构图主要设计思路是通过MySQLReplication技术将两台MySQLServer互相将对方作为自己的Master,自己又同时作为对方的Slave来进行复制。这样就实现了高可用构架中的数据......