MySQL约束条件介绍
- 无符号、零填充
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约束条件,这样就形成了一对一
'''
MySQL约束条件介绍的更多相关文章
- mysql 约束条件介绍
mysql 约束条件介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FO ...
- mysql 约束条件目录
mysql 约束条件 mysql 约束条件 not null与default mysql 约束条件 unique key 唯一的键 mysql primary key 主键 mysql auto_in ...
- 十周周末总结 MySQL的介绍与使用
python 十周周末总结 MySQL的介绍与使用 MySQL字符编码与配置文件 查看数据库的基本信息(用户,字符编码) /s windos下MySQL默认的配置文件 my_default.ini 修 ...
- MySQL 复制介绍及搭建
MySQL复制介绍 MySQL复制就是一台MySQL服务器(slave)从另一台MySQL服务器(master)进行日志的复制然后再解析日志并应用到自身,类似Oracle中的Data Guard. M ...
- 第1 章MySQL 基本介绍
第 1 章 MySQL 基本介绍 前言: 作为最为流行的开源数据库软件之一,MySQL 数据库软件已经是广为人知了.但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介 ...
- Spotlight on Mysql详细介绍
Spotlight on Mysql详细介绍 by:授客 QQ:1033553122 1. 版本 2. 使用介绍 1) 主页 会话面板 MySQL面板 INNODB面板 存储面板 主机面板 ...
- 三、安装cmake,安装resin ,tars服务,mysql 安装介绍,安装jdk,安装maven,c++ 开发环境安装
三.安装cmake,安装resin 2018年07月01日 21:32:05 youz1976 阅读数:308 开发环境说明: centos7.2 ,最低配置:1核cpu,2G内存,1M带宽 1. ...
- MySQL入门介绍(mysql-8.0.13)
MySQL入门介绍(mysql-8.0.13单机部署) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL数据库介绍 1>.MySQL是一种开放源代码的关系型数据库 ...
- MySQL主从复制介绍
MySQL主从复制介绍 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借助第三方工具,而且,M ...
- MySQL管理工具MySQL Utilities — 介绍与安装(1)
MySQL Utilities介绍 MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括: 管理工具 (克隆.复制.比较.差异.导出.导入) 复制工具 (安装.配 ...
随机推荐
- 【pyqtgraph】pyqtgraph可移动竖线LineSegmentROI的拖拽事件相关
情景 Python+PyQt+pyqtgraph读取数据绘图,并在图像上添加了LineSegmentROI带handle的竖线(hanlde是为了RectROI的拖动),现要实现竖线可以直接拖动,并在 ...
- seleniumUI自动化学习记录
2019.2.9 尝试了一个启动浏览器并打开指定网址的程序: 这里首先要注意的就是浏览器的版本和selenium jar包的版本必须符合才行,不然会报错 2019.9.16 必须要下载相应的chrom ...
- python3GUI--用Tk开发一款恶搞蓝屏软件(附源码)
目录 一.准备工作 1.Tkinter 2.科普-电脑蓝屏 二.预览 1.蓝屏-win10.win11(中文版) 2.蓝屏-win10.win11(英文版) 3.Windows其他版本(XP.Win7 ...
- ios底部安全距离
一.使用背景 苹果官方推荐:使用env(),constant()来适配,env()和constant(),是IOS11新增特性,用于设定安全区域与边界的距离 safe-area-inset-left: ...
- Java的由来
Java 发展史 1.1.起源 20 世纪 90 年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它 可以大幅度提升消费性电子产品的智能化程度. SUN 公司为了抢占市场先机, ...
- sqlserver 数据导入MySQL
sqlserver导出成Excel文件数据 为什么用Excel文件数据? sql文件不通用 CVS文件编码报错 text文件日期/时间戳报错 修改Excel文件中的日期字段 需要格式化日期字段为 yy ...
- Laravel自定义JSON错误消息 The given data was invalid.
Laravel自定义错误消息 在Laravel验证请求时出现错误,默认会返回如下的错误: 可以看到JSO结构中的message为The given data was invalid.而并非是我们具体自 ...
- C/C++ 数据结构顺序栈的基本操作实现
#include <iostream> #include <Windows.h> using namespace std; #define MAXSIZE 6 //顺序栈的实现 ...
- Docker部署【项目管理和问题跟踪工具-Redmine】
创建网络 docker network create redmine-network 启动Mysql数据库 docker run -d --name mysql --network redmine-n ...
- 【VUE】关于pinia代替vuex
官方文档:https://pinia.web3doc.top/ 知乎讲解:https://zhuanlan.zhihu.com/p/533233367