mysql-约束

4、约束:

1)、对一个列添加的约束叫列级约束。对两个或两个以上的列添加的约束叫做表级约束。

2)、表级约束只能在字段后面添加,列级约束既可以添加在字段后面,也可以在最后添加。

3)、非空、默认只存在列级约束。主键、唯一、外键都既有表级约束又有列级约束。

4)、约束有:primary key (主键)、unique (唯一)、not null (非空) 、default (默认)、foreign key (外键)。5)、unsigned (无符号整数,从 0 到 int 的最大值)6)、auto_increment (自增长,必须与主键同时使用)

1、主键:(primary key)

添加:一般添加主键的时候都会再添加 auto_increment
     alter table tb_name add primary key(field_name);
删除:删除主键之前必须先删除 auto_increment
     alter table tb_name drop primary key;

2、外键:(foreign key)

外键的使用条件:
    ① 两个表必须是 Engine=InnoDB 表,MyISAM表暂时不支持外键
       InnoDB 是MySQL的数据库引擎之一,其支持事务的4大特性并兼容事务。
       ISAM(索引顺序存取方法:indexed sequential access method)也是一种数据库引擎在其中数据组织成固定长度的记录,并按顺序存储。
       MYISAM 每个MYISAM在磁盘上存储成三个文件,每个文件都是以表明开头,扩张名支出文件的类型:
            .frm:存储表定义
            .MYD(MYData)存储表的数据
            .MYI(MYIndex)存储表的索引
    ② 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;
    ③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

外键的好处:
    ① 可以使得两张表关联,保证数据的一致性和实现一些级联操作。

外键就是:引用字段的值必须在被引用字段中存在,除非引用字段是NULL

被引用字段必须有唯一约束或主键约束。

添加:添加外键之前一定要保证引用字段和被引用字段的类型一致,以及数据库引擎一致(既:都为 InnoDB )
     alter table tb1_name add constraint fk_name foreign key (field1_name) references tb2_name (field2_name);
建表时添加外键:
     foreign key (field1_name) references tb2_name (field2_name);
删除:alter table tb_name drop foreign key fk_name;

外键的完整定义:
      alter table tb1_name add constraint fk_name
      foreign key (field_name)
      references tb2_name (field_name)
      match [simple/full]    外键匹配模式:引用字段全不为空,则强匹配,否则,若匹配。
      on delete [cascade/no action]为cascade时,删除被引用表中数据时,引用表中的数据也会删除。为no action时,删除被引用表中的数据之前要先删除引用表中的数据,否则会返回错误。
      on update [cascade/no action]更新时时一样的。同上。
      对于on delete 和 on update 来说,默认的都是 no action 。
      当添加外键失败时,有两种情况:
              ① 数据类型不一致
              ② 数据库引擎不对,检查是不是InnoDB

自动键更新和删除:
外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?

 很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGN KEY...REFERENCES修饰符添加一个ON DELETE 或ON UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务

 关键字     含义
 CASCADE    删除包含与已删除键值有参照关系的所有记录
 SET NULL   修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
 RESTRICT   拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
 NO ACTION  啥也不做

 请注意,通过ON UPDATE 和 ON DELETE规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,
 例如:如果一系列的表通过外键关系和ON DELETE CASCADE 规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.

 所有tables必须是InnoDB型 ,它们不能是临时表。
 ·         在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。
 ·         在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。
 ·         不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中, 这是因为对这些列的索引必须总是包含一个前缀长度。
 ·         如果CONSTRAINTsymbol 被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。

3、唯一约束(unique)
添加:
     alter table tb_name add unique (field1_name,field2_name, ... );
删除:
     alter table tb_student drop index/key name;

4、自增长约束(auto_increment)
auto_increment 的添加和删除都是使用 change 来进行的。其实质是:新建一个同名字段来代替原有字段,但是在这个过程中primary key是不会改变的。
如元字段为:id int(10) unsigned primary key auto_increment
删除:
    alter table tb_name change id id int(10) unsigned;       (其结果为:id int(10) unsigned primary key)
添加:
    alter table tb_name change id id int(10) unsigned auto_increment;       (其结果为:id int(10) unsigned primary key auto_increment)

5、change   列级约束都可以通过change 来实现修改。

default 、unsigned 、not null
 
时间: 2024-10-08 08:43:31

mysql-约束的相关文章

MySQL约束

约束也叫完整性约束(integrity constraint)什么是完整性?    完整性是指数据库中存放的数据是有意义的.正确的什么是约束?    为了保证数据的正确性和相容性,对关系模型提出的某些约束条件或者规则    注意:约束一般是作用于字段上的 约束有哪些?    非空.唯一.默认值.主键.外键.自增    语法:        字段名 字段类型 [not null|unique|default 默认值|auto_increment]1.默认值    mysql> create tab

nSQLServer与MySQL约束/索引命名的一些差异总结

在SQL Server中的约束与索引: CREATE TABLE TestTable1( --1,系统会默认对主键/唯一约束创建主键/唯一索引,索引的名字会与约束的名字一致 Id int identity(1,1) not null constraint pk_Id primary key (Id), Name varchar(100) constraint uq_testtable1_name unique, --2,对主键/唯一约束,如果没有指定约束的名字,按照某种规则+随机生成索引名字 A

mysql约束与索引的区别

摘自:https://www.cnblogs.com/YLQBL/p/8473248.html 一:约束 作用:是为了保证数据的完整性而实现的摘自一套机制,它具体的根据各个不同的数据库的实现而有不同的工具(约束): 这里主要讲解mysql的约束: 1.非空约束:not null; 指示某列不能存储 NULL 值 2.唯一约束:unique();uk unique约束的字段,要求必须是唯一的,但null除外: 3.主键约束:primary key();pk 主键约束=not  null + uni

MySQL 约束类型篇

目录 约束类型 非空约束 唯一约束 默认约束 自增约束 外键约束 主键约束 检查约束 关键字 not null unique default auto_increment foregin key primary key check 1.1.非空约束 定义:用来定义该键不能为空的约束,在后续插入数据中该值不能为空值 create table roo ( id int not null, name char(10) not null ); create table roo ( id int null

MySQL——约束(constraint)详细解释

约束是什么用来干嘛?约束实际上就是表中数据的限制条件作用:表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效比如一些字段的唯一性,将一些字段约束成外键 约束种类:非空约束(not null)唯一性约束(unique)主键约束(primary key) PK外键约束(foreign key) FK检查约束(目前MySQL不支持.Oracle支持) A.非空约束用not null约束的字段不能为null值,必须给定具体的数据创建表,给字段添加非空约束(创建用户表,用户名不能为空) crea

MySQL约束和数据类型

约束条件 约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期. 常用约束条件如下: UNSIGNED :无符号,值从0开始,无负数 ZEROFILL:零填充,当数据的显示长度不够的时候,在数据前使用0填充至指定长度,字段会自动添加UNSIGNED NOT NULL:非空约束,表示该字段的值不能为空 DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值 PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键.一般都是用来约束id AUTO_

MYSQL约束 -- not null 非空约束

2.not null 非空约束 用于确保当前列的值不为空:在创建表时,如果不指定是否可以为空,字段默认可以为NULL. -- 这是上一篇默认约束创建的表 CREATE TABLE `test`.`user`( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` VARCHAR(225) NOT NULL COMMENT '姓名', -- 这里添加了NOT NULL `sex` TINYINT(1) DEFAULT 1 COMMENT

mySQL 约束 (Constraints)

约束用于限制加入表的数据的类型: 1.创建表时规定约束(通过 CREATE TABLE 语句) 2.表创建之后也可以(通过 ALTER TABLE 语句). 约束类型: NOT NULL(非空) UNIQUE(唯一) PRIMARY KEY(主键) FOREIGN KEY(外键) CHECK(检查) auto_increment(自动增长约束) DEFAULT(默认) 原文地址:https://www.cnblogs.com/weiying121/p/8997819.html

mySQL 约束 (Constraints):一、非空约束 NOT NULL 约束

非空约束 NOT NULL 约束: 强制列不能为 NULL 值,约束强制字段始终包含值.这意味着,如果不向字段添加值,就无法插入新记录或者更新记录. 1.在 "Persons" 表创建时在 Id列.name列创建 not null 约束: create table Persons(id int not NULL,p_name varchar(20) not null, deparment varchar(20),address varchar(20),telNum varchar(20

MySQL 之【约束】【数据库设计】

1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 关键字: NOT NULL PRIMARY KEY UNIQUE FOREIGN KEY DEFAULT 1.非空约束(NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空. create table t1( id int(10) not null primary key );