含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。

分类:六大约束

  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常见约束的更多相关文章

  1. (七)MySQL常见的数据类型、约束和标识列

    一.MySQL常见数据类型 1.数值型: ①整型:tinyint.smllint.mediumint.int/integer.bigint 图源:尚硅谷李玉婷 案例1:关键表格teacher,分别添加 ...

  2. MySQL常见建表选项以约束

    一.CREATE TABLE 选项 1.在定义列的时候,指定列选项 1)DEFAULT <literal>:定义列的默认值 当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认 ...

  3. MySQL常见建表选项及约束

    阅读目录---MySQL常见的建表选项及约束: 1.create table选项 1.指定列选项:default.comment 2.指定表选项:engine.auto_increment.comme ...

  4. Mysql 常见数据类型及约束

    Mysql 常见数据类型及约束 最近在跟几个不太懂技术的同事(哈哈, 其实我也不懂), 要整一个数据库项目, 然后前端, 后端, 都没有像样的, 数据输出还不是由我们控制.... 这可难受了, 然后总 ...

  5. mysql中常见约束

    #常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类:六大约束 NOT NULL:非空,用于保证该字段的值不能为空 比如姓名.学号等 DEFAULT:默认,用于 ...

  6. MySQL常见错误类型

    MySQL常见错误类型:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010: ...

  7. MYSQL常见出错mysql_errno()代码解析

    如题,今天遇到怎么一个问题, 在理论上代码是不会有问题的,但是还是报了如上的错误,把sql打印出來放到DB中却可以正常执行.真是郁闷,在百度里面 渡 了很久没有相关的解释,到时找到几个没有人回复的 & ...

  8. sql点滴41—mysql常见sql语法

    原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...

  9. MySQL常见错误代码说明

    附:MySQL常见错误代码说明 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据 ...

随机推荐

  1. SpringBoot使用JSP(官网Demo)

    最开始接触java的时候,前端页面基本都是用jsp来写,最近公司项目要使用SpringBoot重构,查看SpringBoot文档,发现SpringBoot不建议使用JSP,因为jsp在使用内嵌serv ...

  2. open-falcon自定义push数据无法在grafana显示

    使用open-falcon自定义push数据,在open-falcon中数据能正常显示,而在grafana中添加监控项时却无法显示. 由上述现象可判断可能是由于open-falcon的api组件有问题 ...

  3. java获取真实的IP地址工具类

    在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...

  4. 妙谈js回调函数的理解!

    很有共鸣,之前也是一直对回调函数感觉不明不白的,自己也看了不少解释说明.后来我觉得造成很多人对回调理解困难的一个原因就是,我在开发中见到的大多数使用了回调函数的情况都是直接上来就 传一个回调函数进去 ...

  5. 安卓调试工具adb返回的png截图,直接输出到控制台的修复问题

    原始出处:www.cnblogs.com/Charltsing/p/adbpngfix.html QQ:564955427 adb由于兼容性问题,会把0a替换成0d0a输出到控制台,这会造成png图片 ...

  6. app.use和app.get,app.post区别

    express中,express的实例app: app.use(path,callback)中的callback既可以是router对象又可以是函数 app.get(path,callback)中的c ...

  7. Python进阶3---python类型注解、functools

    函数定义的弊端 函数注解Function Annotations 业务应用 inspect模块 #示例 import inspect def add(x,y:int,*args,**kwargs) - ...

  8. dubbo框架提供Main方法运行容器的几种方式(转)

      本文使用的是dubbo提供的主类com.alibaba.dubbo.container.Main启动容器. 主要区别是提供不同插件的的启动方式. 目录 一.项目内容  1.1.目录结构图  1.2 ...

  9. JS快速排序 希尔排序 归并排序 选择排序

    /* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...

  10. codeforces1107G Vasya and Maximum Profit 【模拟】

    题目分析: 前缀和啥的模拟一下就行了. 代码: #include<bits/stdc++.h> using namespace std; ; int n,x,d[maxn],sta[max ...