首页
学习
活动
专区
圈层
工具
发布

MySQL约束

3.1、主键自增格式 在数据库表中,主键一般情况下,我们是用一个id字段来表示,如果让我们自己添加的话要做到不能重复、不能为空就比较麻烦,所以主键我们都是设置为自动增长。...字段类型 default 默认值 #在create table 语句中设置字段的默认值,不设置默认值为null 6.2、默认值应用 案例: 创建一个新的表t3,表里包含字段名(id,name) create...7.3、为什么要使用外键约束 新的问题? 假如我们在员工表中增加一条记录 员工表中的记录dep_id中的3,在部门表中并没有这个id的记录。我们也将这条记录加入了进去。...**子表:**定义了外键的表,外键的取值要么取父表中字段对应的值,要么取NULL值,严重受限于父表 **父表:**被引用的字段要具有唯一性(绝大多数都是用的父表的主键) 八、外键约束 8.1、外键约束格式...格式一: [constraint][外键约束名称] foreign key(外键字段名) references 主表名称(主键字段名); #在create table时设置 案例: 创建一个班级表

7.7K10

数据库圣经--约束

当为某列设置 auto_increment 后,该列的值会在插入新记录时自动递增,生成唯一的序号,无需手动输入。...1.3插入数据时不设置主键列的值 # 主键列的值为NULL insert into student(id, name, sno) values (NULL, '张三', '100001'); # 不指定主键...name varchar(20) PRIMARY KEY # 定义主键 ); 5、foreign key外键约束 外键用于定义主表和从表之间的关系 外键约束主定义在从表的列上...,主表关联的列必须是主键或唯⼀约束 当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。...); 1.3查看表结构 Key列的值为MUL表示外键约束的列 # 班级编号在主表中存在 insert into student(name, class_id) values ('张三'

17710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第13章_约束

    不过,如果需要修改表的设计(比如添加新的字段,增加新的关联关系),但没有预先定义外键约束,那么,就要用修改表的方式来补充定义。...cascade on delete set null #把修改操作设置为级联修改等级,把删除操作设置为set null等级 ); insert into dept values(1001,'教学部...set null on delete cascade #把修改操作设置为set null等级,把删除操作设置为级联删除等级 ); insert into dept values(1001,'教学部...cascade on delete cascade #把修改操作设置为级联修改等级,把删除操作也设置为级联删除等级 ); insert into dept values(1001,'教学部')...添加主键约束时,往往需要设置字段自动增加属性。 面试 4、并不是每个表都可以任意选择存储引擎? 外键约束(FOREIGN KEY)不能跨引擎使用。

    1.5K30

    MySQL数据库,从入门到精通:第十三篇——MySQL数据表约束详解

    不 过,如果需要修改表的设计(比如添加新的字段,增加新的关联关系),但没有预先定义外键约束,那 么,就要用修改表的方式来补充定义。...cascade on delete set null #把修改操作设置为级联修改等级,把删除操作设置为set null等级 ); insert into dept values(1001,'教学部')...set null on delete cascade #把修改操作设置为set null等级,把删除操作设置为级联删除等级 ); insert into dept values( 1001 ,'教学部...cascade on delete cascade #把修改操作设置为级联修改等级,把删除操作也设置为级联删除等级 ); insert into dept values(1001,'教学部'); insert...添加主键约束时,往往需要设置字段自动增加属性。 面试 4 、并不是每个表都可以任意选择存储引擎? 外键约束(FOREIGN KEY)不能跨引擎使用。

    1.3K10

    MySQL 数据库 增删查改、克隆、外键 等操作

    删除记录后主键记录重头开始自增 创建临时表 创建外键约束,保证数据的完整性和一致性 MySQL 六种约束 ---- 数据库中有数据表,数据表中有一条一条的记录。...key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键 #not null:表示此字段不允许为NULL 数据表高级操作 克隆表,将数据表的数据记录生成到新的表中...创建外键约束,保证数据的完整性和一致性 外键的定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。...主键表和外键表的理解: (1)以公共关键字作主键的表为主键表(父表、主表) (2)以公共关键字作外键的表为外键表(从表、外表) 注意: 1. 与外键关联的主表的字段必须设置为主键。 2....ALTER TABLE HOBBY ADD CONSTRAINT PK_HOBID PRIMARY KEY (HOBID); #为从表HOBBY_DETAIL 表添加外键,并将 HOBBY_DETAIL

    6.6K20

    记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?

    1 变成了 2 3 ,而不是 1 2   有坑   正是因为 replace into 的工作原理,不可避免就产生了一些需要注意的地方   1、破坏外键约束     如果主键被指定成了其他表的外键,...    我们不用外键了,也就不会出现前面的 [Err] 1451 错误了     其实阿里开发手册中的这条规约,不是说不让我们用外键,而是说不用数据库层面的外键约束,在应用代码层面解决外键逻辑     ...用数据库层面的外键,问题提示的很明显,也不会产生脏数据     而应用层解决外键,反而使外键约束的数据一致性问题更隐晦,产生脏数据,如下     从此我们踏上了修数据的不归路   2、主键加速自增     ...1 之后才能恢复正常 INSERT UPDATE   针对 不存在则插入,存在则更新 , MySQL 还提供了另外一种方言实现: INSERT ......UPDATE 替代 INSERT UPDATE 可以减少我们的代码,但它是 MySQL 的拓展实现,只有 MySQL 支持,可移植性差   2、针对 INSERT UPDATE 的 “坑”,我们可以结合具体的业务来设置

    2.6K10

    MySQL从删库到跑路_高级(一)——数据完整性

    二、实体完整性实现 1、实体完整性的实现简介 实体完整性的实现有两种方式: A、主键约束:一张表只能有一列设置主键,值必须唯一,不允许为空,innoDB存储引擎,主键就是索引。...四、参照完整性 1、参照完整性简介 MySQL参照完整性一般是通过MySQL外键(foreign key)实现的。 外键(仅innoDB支持)所引用表的列必须是主键。...如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。...2、创建表时指定外键 创建两张表,学生表student和成绩表score,成绩表的sid列的取值参照学生表(学生表student的sid列设置为主键,且表的存储引擎为innodb,成绩表score的存储引擎也必须设置为...成功,证明外键参照成功。

    2.5K20

    MySQL binlog 为 statement 格式考虑是不安全(slave端不一致)的操作

    此外,INSERT到包含复合主键的表中的表AUTO_INCREMENT是不安全的,该主键包含的 列不是该复合键的第一列。...对具有多个主键或唯一键的表执行INSERT … ON DUPLICATE KEY UPDATE语句。  ...当对包含多个主键或唯一键的表执行该语句时,该语句被认为是不安全的,它对存储引擎检查键的顺序(不确定的)以及由行更新的行的选择敏感。 MySQL Server取决于。 INSERT ......ON DUPLICATE KEY UPDATE针对具有多个唯一键或主键的表 的 语句对于基于语句的复制被标记为不安全。(缺陷#11765650,错误#58637) 使用LIMIT更新。  ...何时binlog_format 设置为MIXED或 ROW,则不会执行该语句,并且会将错误消息写入错误日志。

    82410

    超详细的MySQL三万字总结

    约束种类: 约束名 约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 检查约束 check ( 注:mysql 不支持) 主键约束 主键的作用...什么是外键约束: 什么是外键:在从表中与主表主键对应的那一列,如:员工表中的 dep_id 主表: 一方,用来约束别人的表 从表: 多方,被别人约束的表 创建约束的语法: 1、新建表时增加外键...: [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名) 2、已有表增加外键: ALTER TABLE 从表 ADD [CONSTRAINT...] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名); 案例: -- 1) 删除副表/从表 employee drop table employee;...两种建表原则: 一对一的建表原则 说明 外键唯一 主表的主键和从表的外键(唯一),形成主外键关系,外键唯一 UNIQUE 外键是主键 主表的主键和从表的主键,形成主外键关系 数据库设计 数据规范化 什么是范式

    3.8K31

    MySQL 中的 REPLACE INTO语法

    如果目标表中已存在与新插入行的主键(PRIMARY KEY)或唯一键(UNIQUE KEY)冲突的记录,则会删除旧记录并插入新记录。...FROM another_table; REPLACE INTO 的工作机制 检查是否有冲突: MySQL 会检查插入行的主键或唯一键约束是否冲突。 如果没有冲突: 行被直接插入。...如果有冲突: MySQL 会先删除冲突的行。 然后插入新的行。 注意: 删除和插入操作会触发相应的 DELETE 和 INSERT 触发器。 删除旧行时,可能导致主键或唯一键被重新分配。...否 是(当删除旧记录时会触发 DELETE 触发器) 主键/唯一键约束 插入失败或更新(INSERT ON DUPLICATE KEY UPDATE) 删除冲突记录后插入新记录 注意事项 性能问题...外键约束: 如果表定义了外键约束,删除旧记录可能导致外键相关的约束失败。 数据丢失: REPLACE INTO 会直接删除冲突的行,如果删除的行中包含重要数据,可能导致数据丢失。

    87910

    大型互联网公司使用的数据库设计规范

    约束设计标准 1、 主键的内容不能被修改。 2、外键约束一般不在数据库上创建,只表达一个逻辑的概念,由程序控制。...3、 禁用数据库外键 4、命名 a) 主键约束:默认PRIMARY; b) unique约束:UK_ c) check约束:CK_ d) 外键约束...9、INSERT语句使用batch提交。 10、避免使用存储过程、触发器、函数等,容易将业务逻辑和DB耦合在一起,并且MySQL的存储过程、触发器、函数中存在一定的bug。...参考:batch size标准 21、禁止使用 UUID(),USER()这样的MYSQL INSIDE函数对于复制来说是很危险的,会导致主备数据不一致,重要的是会严重影响mysql性能。...但请避免每执行一个SQL去检查一次DB可用性; 使用replace带来的问题 1、Replace into 操作在唯一键重复情况下,是先尝试写入,检测到冲突则删除原记录,再写入新记录。

    2.2K30

    MySQL实战七:你不知道的外键与约束使用!

    ,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。...no action 表示 不做任何操作, set null 表示在外键表中将相应字段设置为null set default 表示设置为默认值(restrict) (1)on delete cascade...学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表(子表)中也更新,主键表(父表)中的记录被删除,外键表(子表)中改行也相应删除。...上述on delete cascade换成on update cascade,可以发现只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效!...而on update只能删除子表外键数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的外键上做更新操作无效。

    4.7K20

    重温MySQL外键约束

    重温MySQL外键约束 MySQL的外键约束是用来在两个表之间建立链接的,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据的一致性和完整性的。...对于两个通过外键关联的表,相关联字段中主键所在的表是主表,也称之为父表,外键所在的表是从表,也称之为子表,定义外键的时候需要遵守几个规则: 1、父表必须已经存在于数据库中,或者是当前正在创建的表。...2、必须为父表定义主键。 3、主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。...4、外键中列的数目必须和父表的主键中列的数目相同。 5、外键中列的数据类型必须和父表主键中对应列的数据类型相同。说这么多比较笼统,还是看看例子吧。...设置关联的语法如下: alter table 表名 add constraint FK_ID foreign key (外键字段名) references 外表表名 (主键字段名) [on delete

    8.3K10

    【MySql】表的约束

    唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。 关于唯一键和主键的区别: 我们可以简单理解成**,主键更多的是标识唯一性的。...外键foreign key 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...当定义外键后,要求外键列数据必须在主表的主键列存在或为null foreign key (字段名) references 主表(列) 创建表student: mysql> create table if...所以我们需要新建一个从表student并设置外键: mysql> create table if not exists student( -> id int unsigned primary key...解决方案就是通过外键完成的。建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

    1.2K30

    MySQL快速入门(二)

    目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 group...zerofill 多余的使用数字0填充 not null 非空 default 默认值 unique 唯一值 primary key 主键 foreign key 外键 auto_increment...主键 主键通俗的理解为是not null+unique就是主键,由此可见主键的特征就是非空且唯一,必须有唯一性,比如id,每个人的id号唯一,那么就可以给它设置一个主键作为唯一标识; 主键的存在也加快了数据的查询速度...级联更新/删除 用外键做了表与表的对应关系后,那么操作(增删改)一个表数据,是不允许的; 那么可以通过添加级联更新和删除来同步数据,添加在设置外键下边··· on update cascade:级联更新...在创建表的时候,需要注意先创建没有设置外键的表 在插入数据的时候,要确保被关联表中有数据 在插入新数据的时候,外键字段只能填写被关联表中已经存在的数据 在修改和删除被关联表中的数据的时候,无法直接操作

    3K20

    Mysql中REPLACE INTO详解及和INSERT INTO的区别

    当表有主键没有唯一键时,REPLACE INTO插入记录与主键冲突时会进行DELETE+INSERT操作;binlog 记录事件为UPDATE;返回的影响行数为DELETE+INSERT的数量;如果主键自增...当表有唯一键没有主键时,REPLACE INTO插入记录与唯一键冲突时会进行DELETE+INSERT操作;binlog 记录事件为UPDATE;返回的影响行数为DELETE+INSERT的数量。...当表同时存在主键和唯一键时,REPLACE INTO插入记录与主键冲突的时候进行DELETE+INSERT操作;binlog 记录事件为DELETE+INSERT;返回的影响行数为DELETE+INSERT...当表同时存在主键和唯一键时,REPLACE INTO插入记录与唯一键冲突的时候进行DELETE+INSERT操作;binlog 记录事件为UPDATE;返回的影响行数为DELETE+INSERT的数量。...当表同时存在主键和唯一键时,REPLACE INTO插入记录与一条记录主键和一条记录唯一键都冲突的时候进行DELETE+INSERT操作;binlog 记录事件为DELETE+UPDATE;返回的影响行数为

    46310

    MySQL 约束

    一般情况下,为了便于更快的查找到表中的记录,都会在表中设置一个主键。...对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。...一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。定义外键时,需要遵守下列规则:  ♞ 主表必须已经存在于数据库中,或者是当前正在创建的表。...♞ 主键不能包含空值,但允许在外键中出现空值。也就是说,外键的每个非空值必须是主表主键存在内容。  ♞ 若一个表中的字段被另一个表关联则该字段不能直接删除。 ?...在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。

    3.8K31

    MySql---外键复习

    外键复习 MySQL外键约束(FOREIGN KEY) 主表和从表 选取设置 MySQL 外键约束的字段 在创建表时设置外键约束 部门和员工案例演示 如果添加不符合外键约束的数据,会报错 小总结 注意事项...级联操作 格式 测试级联操作 ---- MySQL外键约束(FOREIGN KEY) MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。...---- 选取设置 MySQL 外键约束的字段 定义一个外键时,需要遵守下列规则: 父表必须已经存在于数据库中,或者是当前正在创建的表。...必须为父表定义主键。 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。...,即从表的d_id的值必须属于父表的主键列集合里面的id值 ---- 小总结 被约束的表成为副表,约束别人的表成为主表,外键设置在副表上 主表(参考表)的参考字段通常为主键 添加数据时,必须先添加主表

    6.9K30
    领券