学习
实践
活动
工具
TVP
写文章

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

1.标准的SQL语句 DML(Data Manipulation Language,数据操作语言) 语句:主要由select、insert、update和 delete 四个关键字完成。 事务控制语句:主要由commit、rollback和savepoint 三个关键字完成。 2.DDL 2.1 check约束无效,如何解决? 2.2 2.2.1 创建 (1)不带别名的,数据库自动生成 首先创建department表: CREATE TABLE department ( dept_name varchar 学习 cascade 表示级联操作,就是说,如果主键表中被参考字段更新,表(子表)中也更新,主键表(父表)中的记录被删除,表(子表)中改行也相应删除。 而on update只能删除子表数据,不能删除父表主键数据,只能更新父表的主键,同时父子表数据都会被更新,但是在子表的上做更新操作无效。

31820

SQL基础--> 约束(CONSTRAINT)

a.主键约束提示 --下面使用currval值,提示主键冲突,从PK_TB_CONS2_EMPNO即可得知是主键列冲突,这就是自定义约束名的好处 SQL> INSERT INTO tb_constraint --约束对delete语句的影响: SQL> DELETE FROM tb_constraint_2; 2 rows deleted. insert语句的影响: 插入数据的字段值必须在主表中存在,只有从表才有可能违反约束,主表不会。 约束对delete语句的影响: 删除主表数据时,如果从表有对该数据的引用,要先将从表中的数据处理好。主表才有可能违反约束约束对update语句的影响: 主从表都有可能违反约束,操作一个表必须将另一个表的数据处理好。 约束对DDL语句的影响: 删除主表时,才有可能违约约束

40220
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

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

    BI-SQL丨Constraints

    [1240] Constraints Constraints,约束的意思。通常用来约束加入表中的数据,如果与约束冲突,则行为会被终止。 Constraints数据仓库中经常使用的有以下几种约束: NOT NULL(不为空) UNIQUE(唯一) PRIMARY KEY(主键) FOREIGN KEY() CHECK(检查) DEFAULT //多个列定义约束 ...... ) C.FOREIGN KEY 一个表中的,通常可以用来连接另外一张表中的主键。 那么Product表中的ProductID就是主键,Fact表中的ProductID就是。 同时,的存在,可以防止意外删除。这对于数据仓库来说,很重要。 FOREIGN KEY () REFERENCES 表名称(主键)//多个列定义约束 ...... ) D.CHECK CHECK通常可以用来约束限制列值的范围。

    12220

    六年开发经验,整理Mysql数据库技巧笔记,全网最详细的笔记集合!

    ; 约束 建表时添加约束 CREATE TABLE 表名( 列名 数据类型 约束, ... CONSTRAINT 键名 FOREIGN KEY (本表列名) REFERENCES 主表名(主表主键列名) ); 删除外约束 ALTER TABLE 表名 DROP FOREIGN KEY 键名; 建表后单独添加约束 ALTER TABLE 表名 ADD CONSTRAINT 键名 FOREIGN KEY (本表列名) REFERENCES 主表名(主键列名); 的级联更新和级联删除 SQL 语句列表; RETURN 结果; END$ 调用存储函数 SELECT 函数名称(实际参数); 删除存储函数 DROP FUNCTION 函数名称; 触发器 触发器是表有关的数据库对象,可以在 insert、update、delete 之前或之后触发并执行触发器中定义的 SQL 语句

    10120

    mysql学习总结04 — SQL数据操作

    字段主表主键字段类型完全一致 字段主表主键字段基本属性相同 如果是在表后增加,对数据有要求(从表数据主表的关联关系) 只能使用innodb存储引擎,myisam不支持 12.4 约束概念 约束主要约束主表操作,从表仅约束不能插入主表不存在的数据,约束约束了例如: 从表插入数据,不能插入对应主表主键不存在的数据 主表删除数据,不能删除被从表引入的数据 约束保证了数据的完整性 (主表从表数据一致),强大的数据约束作用可能导致数据在后台变化的不可控,所以外在实际开发中较少使用 12.5 约束模式 三种约束模式: district:严格模式,默认的,不允许操作 cascade :级联模式,一起操作,主表变化,从表数据跟随变化 set null:置空模式,主表变化(删除),从表对应记录设置为空,前提是从表中对应的字段允许为空 添加约束模式: 基本语法: add foreign key(<字段>) references <主表>(<主键>) on <约束模式>; 通常在进行约束时候的时候,需要指定操作:update和delete 常用的约束模式:on update cascade

    66030

    day05_MySQL学习笔记_02

    ) FOREIGN KEY(foreign key:) REFERENCES(references:引用/参照/关联)       第二种添加约束的方式:在表格创建时没有添加约束,之后通过修改表格添加约束 设计从表可以有两种方案:         方式1:在t_card表中添加列(相对t_user表),并且给添加唯一约束;即:字段 字段类型 unique,         方式2:给t_card表的主键添加约束 :在创建表格的时候同时添加约束。 ) FOREIGN KEY(foreign key:) REFERENCES(references:引用/参照/关联)       第二种添加约束的方式:在表格创建时没有添加约束,之后通过修改表格添加约束 注意:在执行脚本时需要先行核查当前数据库中的表是否脚本文件中的语句冲突!   例如在脚本文件中存在create table a的语句,而当前数据库中已经存在了a表,那么就会出错!

    39320

    面试官:MySQL 唯一索引为什么会导致死锁?

    (4) 建立主键的目的是让来引用. (5) 一个表最多只有一个主键,但可以有很多唯一 存在唯一冲突时,避免策略 insert ignore insert ignore会忽略数据库中已经存在的数据 此时会发现吕布的班级跟年龄都改变了,但是id也变成最新的了,所以不是更新,是删除再新增 insert on duplicate key update 如果在insert into 语句末尾指定了on duplicate 如果有两个事务并发的执行同样的语句,那么就会产生death lock,如 img 解决办法: 1、尽量对存在多个唯一的table使用该语句 2、在有可能有并发事务执行的insert 的内容一样情况下不使用该语句 id的改变;insert … on duplicate key update在遇到重复行时,会直接更新原有的行,具体更新哪些字段怎么更新,取决于update后的语句。 参考 Mysql中uniqueprimary约束的区别分析(转) MySQL避免插入重复记录:唯一性约束 MySQL优化–INSERT ON DUPLICATE UPDATE死锁 ---- 我是蜗牛

    10820

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

    约束设计标准 1、 主键的内容不能被修改。 2、约束一般不在数据库上创建,只表达一个逻辑的概念,由程序控制。 3、 禁用数据库 4、命名 a) 主键约束:默认PRIMARY; b) unique约束:UK_<column_name> c) check约束:CK_<column_name> d) 约束 2、SELECT语句只获取需要的字段,禁止使用SELECT * FROM语句,这是有效防止新增字段对应用逻辑的影响,还能减少对性能的影响; 3、INSERT语句必须显式的指明字段名称,不使用INSERT 8、避免在SQL语句进行数学运算或者函数运算,容易将业务逻辑和DB耦合在一起。 9、INSERT语句使用batch提交。 但请避免每执行一个SQL去检查一次DB可用性; 使用replace带来的问题 1、Replace into 操作在唯一重复情况下,是先尝试写入,检测到冲突则删除原记录,再写入新记录。

    96130

    MySQL学习笔记汇总(四)——表的约束、存储引擎、事务

    (简称PK) 约束(foreign key):…(简称FK) 检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。 ,在建表时给usercode和username这两个字段联合添加了唯一约束,表示这两个字段联合起来不能重复,usercode,username insert into t_user values(1 username varchar(255) ); 约束:foreign key 主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为 字段,那么该字段的值必须来源于参照的表的主键 可以为NULL 被引用的字段不一定是主键,但至少具有unique约束。 InnoDB 优点:支持事务、行级锁、等。这种存储引擎数据的安全得到保障。

    9250

    一篇文章带你彻底了解MySQL各种约束

    value (1, '老李'); select * from t3; insert t3 value (1, '老王'); - 通过alter语句添加: alter .... modify - alter table t7 modify age int; - alter table t7 change age age int; 8. foreign key: 约束 通过建立 建立参照完整性,一个表可以有多个,每个必须参照另一个主键。 - 被约束的列,取值必须参照其主表列中的值 - 注意:通常先创建主表,再创建从表 添加约束 - create table emp(       ,系统会自动地生成一个的名称。

    237127

    Oralce的二维表操作

    Oralce的二维表操作 –创建表并同时添加约束 –主键约束 –非空约束 –检查约束 –唯一约束约束 –简单的表创建和字段类型 –简单的创建语句: create table student unique(字段名); –删除约束:alter table 表名 drop constraints 唯一约束名; –二维表创建 约束学习: –创建学生表 create table student –概念:当一张表的某个字段的值需要依赖另外一张表的某个字段的值,则使用约束。 –其中主动依赖的表称为子表,被依赖的表称为父表。加在子表中。 alter table 表名 drop constraints 约束名 –选取: –一般选取父表的主键作为子表的。 –的缺点: –无法直接删除父表数据,除非级联删除 –级联删除:在添加约束时,使用关键字 on delete cascade –使用:当删除父表数据时,自动删除子表相关所有数据。

    26220

    MySQL数据篇之多表操作-----保姆级教程

    多表操作 约束 添加 语法 注意 表表之间的关系 子查询的缺陷 一对多的关系 一对多的建表原则 多对多的关系 多对多的建表原则 一对一的例子 一对一的建表原则 多表案例分析 多表查询 键值同名 union联合查询 union all可以查询出所有,不进行去重操作 内连接连接的区别 约束 作用:保证多表之间的数据完整性 测试环境准备: create table dept( 这个时候就需要在多表之间添加约束 ---- 添加 语法 在新表中添加约束语法: constraint 约束名称 foreign key(的字段名称) references 主表表名( 主键字段名) 在已有表中添加约束:alter table 从表表名 add constraints 约束名称 foreign key(的字段名称) references 主表表名(主键字段名 ---- 注意 添加约束后,如果想要删除主键即某个部门,需要先将该部门下关联的员工记录删除,否则报错。

    9610

    MySQL 学习笔记(三):完整性和触发器设计

    添加约束 alter table 从表 add constraint 约束名(形如:FK_从表_主表) foreign key(属性名) references 主表(属性名) alter table 约束 + 级联(删除/更新) alter table 从表 add constraint 约束名 foreign key(属性名) references 主表(属性名)  ON DELETE CASCADE 删除约束 删除主键约束:alter table 表名 drop primary key; 删除外约束:alter table 表名 drop foreign key (区分大小写); 这里我创建的时候 sno 中有些表有主键约束,有些却没有,所以当我删除主键约束的时候它会提示被错误建立起来了。但我不明白为什么建立的时候没有报错。 触发器是一种表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。

    54240

    数据库面试题汇总

    MySQL的基本索引类型 索引的优缺点 事务 事务的定义 事务的性质 drop、deletetruncate 相同点 不同点 场景使用 超健、候选、主键、 超健 候选 主键 视图 视图的定义 视图的使用场景 优点 缺点 范式 第一范式 第二范式 第三范式 乐观锁和悲观锁 作用 悲观锁 乐观锁 表的连接方式 类型 内连接 连接 交叉连接 优化数据库查询语句速度 数据库 数据库的定义 数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是应用程序彼此独立的数据集合。 SQL SQL语言包括 数据定义、数据操纵、数据控制 数据定义 Create Table,Alter Table,Drop Table, Craete/Drop Index等 数据操纵 Select ,insert 在一个表中存在的另一个表的主键称此表的。 视图 视图的定义 视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作。视图通常是有一个表或者多个表的行或列的子集。

    1.4K21

    insert ... on duplicate key update 和 replace into

    影响行数 = 0,表示插入记录和表中记录存在主键或唯一索引冲突,并且 insert duplicate 语句 update 字段列表中每个字段的字段值和冲突记录中对应的字段值一样。 影响行数 = 2,表示插入记录和表中记录存在主键或唯一索引冲突,但是 insert duplicate 语句 update 字段列表中的字段值和冲突记录中的字段值不一样,插入语句会更新表中冲突的第 1 执行过程分析 3.1 insert ... on duplicate key update insert duplicate 语句是 MySQL 对 SQL 标准的扩展,它有 2 种行为: 如果插入记录和表中记录不存在主键或唯一索引冲突 使用更新旧记录方式,需要同时满足 3 个条件: 条件 1,第 2 步中报记录冲突的那个索引是表中最后创建的唯一索引(也可能是主键)。 条件 2,表中的所有字段,都没有被其它表的字段作为约束约束和删除触发器都很少使用,不展开讲了。 4. 总结 2.

    13440

    珍藏 | Java 岗位 【数据库】 面试题及答案详解

    · 唯一 · 主、 · 不为空 · 表之间的关联字段 · 查询比较频繁的字段 6:索引类型有哪些? 11:主键和的区别? · 主键在本表中是唯一的、不可唯空的,可以重复可以唯空; · 和另一张表的主键关联,不能创建对应表中不存在的。 12:在数据库中查询语句速度很慢,如何优化? · 第一范式:列不可再分 · 第二范式:行可以唯一区分,主键约束 · 第三范式:表的非主属性不能依赖与其他表的非主属性约束,且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上 - Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等 - Alter语句:修改数据表定义及属性。 - DML(Data Manipulation Language)数据操控语言,包括: - Insert语句:向数据表张插入一条记录。

    75820

    MySQL之多表查询

    阅读目录 一 多表联合查询 二 多表连接查询 三 复杂条件多表查询 四 子语句查询 五 其他方式查询 六 SQL逻辑查询语句执行顺序(重点) 七 约束 八 其他约束类型 九 表表之间的关系 但是,你知道这些语句,它们的执行顺序你清楚么?如果你非常清楚,你就没有必要再浪费时间继续了;如果你不清楚,非常好!!! 请点击我... 七 约束 1.问题?    )ENGINE = INNODB DEFAULT charset utf8;    5.2 已经创建表后,追加约束 #添加约束 ALTER table person add constraint 约束4种类型: 1.RESTRICT 2.  not null) (4)建议:1.如果需要约束,最好创建表同时创建约束.        2.如果需要设置级联关系,删除时最好设置为 SET NULL.

    754120

    数据库技术:MySQL 多表,约束,数据库设计,索引,视图,存储过程触发器,数据控制,数据备份恢复

    键指的是在“从表”中“主表”的主键对应的那个字段,比如员工表的 dept_id,就是。使用约束可以让两张表之间产生一个对应关系,从而保证主从表的引用的完整性。 主表:主键 id 所在的表,约束别人的表;从表:所在的表,被约束的表。 Create Foreign Key Constraint 添加约束,就会产生强制性的数据检查,从而保证了数据的完整性和一致性。 ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk; -- 再将约束添加回来 # 省略约束名称, 系统会自动生成一个约束名称 ALTER TABLE ,否则约束创建失败。

    29620

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

    扩展功能,字段值自增等 数据表高级操作 克隆表,将数据表的数据记录生成到新的表中 删除记录后主键记录重头开始自增 创建临时表 创建约束,保证数据的完整性和一致性 MySQL 六种约束 ---- ,添加重名的约束字段 INSERT INTO USER_MESG VALUES (1008,'牛奶','饮料','2021-06-28','D0001','已过期'); #触发唯一约束,新增失败 UNIQUE 的定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的。 主键表和表的理解: (1)以公共关键字作主键的表为主键表(父表、主表) (2)以公共关键字作的表为表(从表、外表) 注意: 1. 关联的主表的字段必须设置为主键。 2. 主键约束(primary key) 约束(foreign key) 非空约束(not null) 唯一性约束(unique [key|index]) 默认值约束(default) 自增约束(auto_increment

    10820

    扫码关注腾讯云开发者

    领取腾讯云代金券