常用五类约束:
    not null:非空约束,指定某列不为空 
    unique: 唯一约束,指定某列和几列组合的数据不能重复 
    primary key:主键约束,指定某列的数据不能重复、唯一 
    foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据 
    check:检查,指定一个表达式,用于检验指定数据 
  注意: MySQL不支持check约束,但可以使用check约束,而没有任何效果;

根据约束数据列限制,约束可分为:
    单列约束:每个约束只约束一列 
    多列约束:每个约束约束多列数据 
1、not null
  非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。 
     *Null类型特征: 所有的类型的值都可以是null,包括int、float等数据类型 空字符串””是不等于null,0也不等于null 
create table temp( 
id int not null, 
name varchar(255) not null default ‘abc’, 
sex char null 
)
上面的table加上了非空约束,也可以用alter来修改或增加非空约束 
增加非空约束 
  alter table temp modify sex varchar(2) not null; 
取消非空约束 
  alter table temp modify sex varchar(2) null; 
取消非空约束,增加默认值 
  alter table temp modify sex varchar(2) default ‘abc’; 
2、unique
  唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现重复的值,但是可以为多个null,同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引;
create table temp ( 
id int not null, 
name varchar(25), 
password varchar(16), 
constraint uk_name_pwd unique(name, password) 
); 
 unique(name, password)表示用户名和密码组合不能重复 
  添加唯一约束 
    alter table temp add unique(name, password); 
  修改唯一性约束
    alter table temp modify name varchar(25) unique; 
  删除约束 
    alter table temp drop index name;

3、primary key
  主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
  MySQL的主键名总是PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。 
列模式: 
  create table temp( 
  id int primary key, 
  name varchar(25) 
  ); 
  create table temp2( 
  id int not null, 
  name varchar(25), 
  pwd varchar(15), 
  constraint pk_temp_id primary key(id) 
  ); 
组合模式: 
  create table temp2( 
  id int not null, 
  name varchar(25), 
  pwd varchar(15), 
  constraint pk_temp_id primary key(name, pwd) 
  );
alter删除主键约束 
  alter table temp drop primary key; 
alter添加主键 
  alter table temp add primary key(name, pwd); 
alter修改列为主键 
  alter table temp modify id int primary key; 
设置主键自增 
  create table temp( 
  id int auto_increment primary key, 
  name varchar(20), 
  pwd varchar(16) 
  ); 
auto_increment自增模式,设置自增后在插入数据的时候就不需要给该列插入值了。

4、foreign key
  外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。
注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。
创建外键约束: 
主表 
  create table classes( 
  id int auto_increment primary key, 
  name varchar(20) 
  ); 
从表 
  create table student( 
  id int auto_increment, 
  name varchar(22), 
  constraint pk_id primary key(id), 
  classes_id int references classes(id) 
  ); 
通常先建主表,然后再建从表,这样从表的参照引用的表才存在。
表级别创建外键约束: 
  create table student( 
  id int auto_increment primary key, 
  name varchar(25), 
  classes_id int, 
  foreign key(classes_id) references classes(id) 
  ); 
上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_ibfk_n, 其中student是表名,n是当前约束从1开始的整数。 
指定约束名称: 
  create table student( 
  id int auto_increment primary key, 
  name varchar(25), 
  classes_id int, 
  constraint fk_classes_id foreign key(classes_id) references classes(id) 
  ); 
多列外键组合,必须用表级别约束语法: 
  create table classes( 
  id int, 
  name varchar(20), 
  number int, 
  primary key(name, number) 
  ); 
  create table student( 
  id int auto_increment primary key, 
  name varchar(20), 
  classes_name varchar(20), 
  classes_number int, 
  foreign key(classes_name, classes_number) references classes(name, number) 
  ); 
删除外键约束: 
  alter table student drop foreign key student_ibfk_1; 
  alter table student drop foreign key fk_student_id; 
增加外键约束:
  alter table student add foreign key(classes_name, classes_number) references classes(name, number); 
自引用、自关联(递归表、树状表) 
  create table tree( 
  id int auto_increment primary key, 
  name varchar(50), 
  parent_id int, 
  foreign key(parent_id) references tree(id) 
  ); 
级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on delete cascade 或on delete set null,前者是级联删除,后者是将从表的关联列的值设置为null。
  create table student( 
  id int auto_increment primary key, 
  name varchar(20), 
  classes_name varchar(20), 
  classes_number int, /*表级别联合外键*/ 
  foreign key(classes_name, classes_number) references classes(name, number) on delete cascade
  ); 
5、check
  MySQL可以使用check约束,但check约束对数据验证没有任何作用。 
  create table temp( 
  id int auto_increment, 
  name varchar(20), 
  age int, 
  primary key(id), 
  check(age > 20) 
  ); 
上面check约束要求age必须大于20,但没有任何作用。但是创建table的时候没有任何错误或警告。

SQL语句常用约束类型的更多相关文章

  1. sql语句添加约束

    sql语句添加约束 --主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空. --唯一约束(Unique Constraint):要求该列唯一,允许为空,但 ...

  2. Oracle使用SQL语句修改字段类型

    Oracle使用SQL语句修改字段类型 1.如果表中没有数据 Sql代码 1 2 3 alter table 表名 modify (字段名1 类型,字段名2 类型,字段名3 类型.....)  alt ...

  3. SQL语句修改字段类型与第一次SQLServer试验解答

    SQL语句修改字段类型 mysql中 alert table name modify column name type; 例子:修改user表中的name属性类型为varchar(50) alert ...

  4. SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

    创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...

  5. Mysql的SQL语句常用基本命令

    SQL语句分类:DDL,DML,DQL,DCL. 1.数据库操作: 创建数据库:create database 数据库名 charater set gbk; 删除数据库:drop database 数 ...

  6. SQL 语句常用函数

    一.字符转换函数 1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CH ...

  7. 二 sql语句,常用字段数据类型

    MySQL中常用DDL命令   database definition language  与 DML命令 :  database definition language 操作数据库: 创建数据库 : ...

  8. 【MySQL】MySQL基础(SQL语句、约束、数据类型)

    数据库的基本概念 什么是数据库? 用于存储和管理数据的仓库 英文单词为:DataBase,简称DB 数据库的好处? 可以持久化存储数据 方便存储和管理数据 使用了统一的方式操作数据库 -- SQL 常 ...

  9. SQL语句--常用

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

随机推荐

  1. qlikview 权限管理和sso集成

    简单总结一下 qlikview 权限管理和SSO集成的过程, 在集成qlikview报表过程中碰到了很多坑, 甚至官方文档也不准确.  如果你也有类似的需求, 可以参考一下本文.  需要说明的是, 本 ...

  2. 字符设备驱动(二)---key的使用:查询方式

    ---恢复内容开始--- 一.硬件电路 1.1 电路原理图 S1-S5共5个按键,其中,S2-S4为中断按键,S1为复位按键.S1直接为硬件复位电路,并不需要我们写进驱动. 单片机接口如下图: 由图中 ...

  3. 拦截对该服务器所有的http请求

    一:拦截对该服务器所有的http请求. 在config 中加, <system.webServer> <modules> <add name="HttpAuth ...

  4. IHTMLDocument2类的使用

    class Program    {        static void Main(string[] args)        {            SHDocVw.ShellWindows s ...

  5. html页面设置<span>的高度和宽度

    <span>标签属于行内元素(inline),所以无法设置高度和宽度:如果需要改变其宽高,就需要将其转变为块体元素(block)或行内块体元素(inle-block): 1 span{di ...

  6. ue4 笔记

    关卡场景内的模型在运行中,改变构建脚本后无法立即更新模型骨骼中心点碰到物理边缘 physcX会出问题 bug 纹理启用碰撞会与碰撞顶点冲突 造成效果不正确 IsInGameThread() 渲染时 会 ...

  7. 第28月第21天 记事本Unicode 游戏编程中的人工智能技术

    1. Windows平台,有一个最简单的转化方法,就是使用内置的记事本小程序notepad.exe.打开文件后,点击文件菜单中的另存为命令,会跳出一个对话框,在最底部有一个编码的下拉条. 里面有四个选 ...

  8. 03-13_static关键字

    static主要作用 常见定义结构:public static void main(): static关键字可以用于定义属性及方法: static定义属性 在一个类之中,主要的组成就是属性和方法(分为 ...

  9. A - Piece of Cake Kattis - pieceofcake (数学)

    题目链接: A - Piece of Cake Kattis - pieceofcake 题目大意:给你一个多边形,然后给你这个多边形的每个点的坐标,让你从这个n个点中选出k个点,问这个k个点形成的面 ...

  10. linux 文件处理命令