MySql常见约束
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。
分类:六大约束
1.NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等。
2.DEFAULT:默认值,用于保证该字段有默认值。例如学生表的学生性别
3.PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。例如学生表的学生学号等。
4.UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。例如注册用户的手机号,身份证号等。
5.CHECK:检查约束(MySql不支持),检查字段的值是否为指定的值。
6.FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。例如学生表的专业编号
添加约束的实际:
1.创建表时
2.修改表时
约束的添加分类:
列级约束:六大约束语法上都支持,但外键约束没有效果
表级约束:除了非空、默认、其它的都支持。
示例:
①添加列级约束
create table if not exists t_stuinfo(
id int primary key, #主键
stuName varchar(20) not null, #非空
gender char(1) check(gender='男' or gender='女'), #检查约束,MySql没有效果但不报错
seat int unique, #唯一约束
age int default 18, #默认(值)约束
majorId int references major(id) #外键约束,MySql没有效果,但不报错
);
②添加表级约束
语法:在创建表字段的最下面
constraint 约束名 约束类型(字段名)
create table if not exists t_stuinfo(
id int,
stuName varchar(20),
gender char(1),
seat int,
age int,
majorId int,
constraint pk primary key(id), #约束名随意,主键不生效,但不报错。
constraint uq unique(seat), #唯一约束
constraint ck check(gender='男' or gender='女'), #检查约束,MySql不支持此约束,不报错但不生效
constraint fk_stuinfo_major foreign key(majorId) references major(id) #外键约束
);
主键和唯一的区别
约束名称 | 保证唯一性 | 是否允许为空 | 一个表中可以有多少个 | 是否允许组合 |
主键 | √ | × | 最多有1个,可以没有 | √(不推荐) |
唯一 | √ | √ | 可以有多个 | √(不推荐) |
外键:
1.要求在从表中设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。
3.主表的关联列必须时一个Key(一般为主键或唯一,外键也可以但无意义)
4.插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
修改表时添加约束
1.添加非空约束
alter table 表名称 modify column 列名 列类型 not null;
2.添加默认约束
alter table 表名称 modify column 列名 列类型 default 默认值;
3.添加主键
①列级约束方式
alter table 表名称 modify column 列名 列类型 primary key;
②表级约束方式
alter table 表名称 add primary key(id);
4.添加唯一
①列级约束
alter table 表名称 modify column 列名 列类型 unique;
②表级约束
alter table 表名称 add unique(列名称);
5,添加外键(列级写法可行,但无效果)
①表级约束
alter table 表名称 add constraint fk_stuinfo_magor foreign key(magorId) references major(id);
6.添加通用写法(语法)
①列级约束
alter table 表名称 modify column 列名 列类型 新约束;
②表级约束
alter table 表名称 add constraint 约束名 约束类型(列名称) [外键的引用];
修改表时删除约束
1.删除非空约束
alter table 表名称 modify column 列名 列类型 [null];
2.删除默认约束
alter table 表名称 modify column 列名 列类型;
3.删除主键
①
alter table 表名称 modify column id int;
②
alter table 表名称 drop primary key;
4.删除唯一
alter table 表名称 drop index(索引名) 设置唯一时的名称;
5.删除外键
alter table 表名称 drop foreign key(索引名) 设置外键时的名称;
标识列
又称为自增长列,可以不用手动的插入值,系统提供默认的序列值
特点:
1.标识列必须和一个Key搭配(Key指主键、唯一、外键....)
2.一个表最多有一个标识列
3.标识列的类型只能是数值型
4.标识列可以通过SET auto_increment_increment = 3;设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。
1.创建表时设置标识列
create table user(
id int primary key auto_increment,
name varchar(20)
);
2.修改表时设置标识列
alter table 表名称 modify column id int primary key auto_increment;
3.修改表时删除标识列
alter table 表名称 modify column id int primary key;
MySql常见约束的更多相关文章
- (七)MySQL常见的数据类型、约束和标识列
一.MySQL常见数据类型 1.数值型: ①整型:tinyint.smllint.mediumint.int/integer.bigint 图源:尚硅谷李玉婷 案例1:关键表格teacher,分别添加 ...
- MySQL常见建表选项以约束
一.CREATE TABLE 选项 1.在定义列的时候,指定列选项 1)DEFAULT <literal>:定义列的默认值 当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认 ...
- MySQL常见建表选项及约束
阅读目录---MySQL常见的建表选项及约束: 1.create table选项 1.指定列选项:default.comment 2.指定表选项:engine.auto_increment.comme ...
- Mysql 常见数据类型及约束
Mysql 常见数据类型及约束 最近在跟几个不太懂技术的同事(哈哈, 其实我也不懂), 要整一个数据库项目, 然后前端, 后端, 都没有像样的, 数据输出还不是由我们控制.... 这可难受了, 然后总 ...
- mysql中常见约束
#常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类:六大约束 NOT NULL:非空,用于保证该字段的值不能为空 比如姓名.学号等 DEFAULT:默认,用于 ...
- MySQL常见错误类型
MySQL常见错误类型:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010: ...
- MYSQL常见出错mysql_errno()代码解析
如题,今天遇到怎么一个问题, 在理论上代码是不会有问题的,但是还是报了如上的错误,把sql打印出來放到DB中却可以正常执行.真是郁闷,在百度里面 渡 了很久没有相关的解释,到时找到几个没有人回复的 & ...
- sql点滴41—mysql常见sql语法
原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...
- MySQL常见错误代码说明
附:MySQL常见错误代码说明 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据 ...
随机推荐
- C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)
本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...
- jsLibrary.js
以前看犀牛书收藏和组合别人的库. ; (function () { 'use strict'; if (!Date.now) Date.now = function () { return new D ...
- C# FileSystemWatcher 并发
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 【原创】IDEA一定要改的八条配置
引言 坦白说,我很少写这种操作类型的文章.因为这种文章没啥新意,大家操作步骤肯定是一样的.然而,我答应了我的同事小阳,给她出一篇!毕竟人家打算从Eclipse转IDEA了,于是以示鼓励,写一篇给她! ...
- 老牌开源Office操作组件NPOI现已支持.NET Core
昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了,这也就意味着你可以在.NET Core中使用NPOI了. 作者:依乐祝 ...
- 不要再被骗了------QQ盗号原理大揭秘
前言 相信大家在懵懂无知的时候都有被盗号的经历吧,QQ胡乱的加好友,突然有个好友传了个文件给你,打开以后发现QQ竟然显示强制下线,然后再也上不去了QAQ,很明显,QQ号被人盗了.最近也是很多小伙伴私信 ...
- BugPhobia开发篇章:Beta阶段第VII次Scrum Meeting
0x01 :Scrum Meeting基本摘要 Beta阶段第七次Scrum Meeting 敏捷开发起始时间 2015/12/19 00:00 A.M. 敏捷开发终止时间 2015/12/21 23 ...
- Ubuntu软件的安装与删除
- iOS 利用高德地图WMS服务
Demo: https://github.com/xushiyou23/AMapTesting 转: 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net ...
- 两小时入门Docker
引入 Docker是什么? Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议 ...