首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL基础--> 约束(CONSTRAINT)

KEY 主键约束P 唯一的标识出表的每一行,且不允许空值值,一个表只能有一个主键约束 FOREIGN KEY 外键约束R 一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列...NN:NOT NULL 非空约束,比如nn_emp_sal UK:UNIQUE KEY 唯一约束 PK:PRIMARY KEY 主键约束 FK:FOREIGN KEY 外键约束 CK...; --建表时创建约束没有指定约束名,则系统将自动命名约束名 SQL> CREATE TABLE tb_constraint_1 2 ( 3 empno NUMBER PRIMARY KEY...a.主键约束提示 --下面使用currval值,提示主键冲突,从PK_TB_CONS2_EMPNO即可得知是主键列冲突,这就是自定义约束名的好处 SQL> INSERT INTO tb_constraint...insert语句的影响: 插入数据的外键字段值必须在主表中存在,只有从表才有可能违反约束,主表不会。

1.7K20

BI-SQL丨Constraints

[1240] Constraints Constraints,约束的意思。通常用来约束加入表中的数据,如果与约束冲突,则行为会被终止。...INSERT INTO WHITETEST (TEST , ID) VALUES ( NULL , 13) 在数据仓库中我们执行上述语句,会返回如下结果: [1240] 因为列限制了TEST不为空,因此数据无法更新...B.UNIQUEPRIMARY KEY UNIQUE会约束列的数据作为唯一标识而存在。 PRIMARY KEY作为表的主键而存在。 注意 UNIQUEPRIMARY KEY区别是很大的。...//多个列定义约束 ...... ) C.FOREIGN KEY 一个表中的外键,通常可以用来连接另外一张表中的主键。...FOREIGN KEY (外键) REFERENCES 表名称(主键)//多个列定义约束 ...... ) D.CHECK CHECK通常可以用来约束限制列值的范围。

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

【MySql】表的约束

列描述comment 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解,。...我们选择某一列作为主键,但是并不排除其他属性不需要维护,可能需要用到唯一键来限定,选择其他列作为唯一键,主键配合起来,能够保证一些数据冲突。...外键foreign key 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`)) 理解外键约束 理论上...比如学校只开了信息100班,信息101班,但是在上课的学生里面竟然有信息102班的学生(这个班目前并不存在),这很明显是有问题的。

17130

python mysql 字段关键字冲突的解决方式

address': '会展中心6号厅', 'start_time': '2017-09-20 14:00:00','create_time':'2017-08-20 14:00:00'}, ], } 插入语句实现...table_data): keys = {} for key in table_data: # 从数据字段中取出列名,列名用反单引号括起来;--解决列名mysql关键字冲突...('SET FOREIGN_KEY_CHECKS=0;') #取消外键约束 cursor.execute(sql) self.connection.commit() 补充拓展:python...数据库 % 冲突问题解决 在使用python后台调用 MySQL数据库的时候会有 「%」的关键字冲突问题,比如 用Python后端读取 MySQL 中记录的逻辑,在 impala端执行,其中涉及到模糊匹配的...以上这篇python mysql 字段关键字冲突的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考。

1.2K10

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

主键冲突更新: 基本语法:insert into () values() on duplicate key update = ; mysql> insert...-> -- 增加外键,创建完后 class_id 对应的 key 为 MUL 多索引,外键本身也是一种普通索引 -> foreign key(class_id) references...外键创建时会自动增加一个普通索引,删除时仅删除外键不删除索引,如果要删除需要手动删除 基本语法: alter table drop foreign key ; alter table...(主表从表数据一致),外键强大的数据约束作用可能导致数据在后台变化的不可控,所以外键在实际开发中较少使用 12.5 外键约束模式 三种约束模式: district:严格模式,默认的,不允许操作 cascade...key() references () on ; 通常在进行约束时候的时候,需要指定操作:update和delete 常用的约束模式:on update cascade

5.1K30

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

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 语句。...当前的操作没有完成前,会阻断其他操作的读取和写入。 按粒度分类 表级锁:会锁定整个表。开销小,加锁快。锁定力度大,发生锁冲突概率高,并发度低。不会出现死锁情况。 行级锁:会锁定当前行。开销大,加锁慢。

1.4K20

TiDB 源码阅读系列文章(十六)INSERT 语句详解

第一种,Basic INSERT,即是最普通的 INSERT 语句,语法 INSERT INTO VALUES (),语义为插入一条语句,若发生唯一约束冲突(主键冲突、唯一索引冲突),则返回执行失败。...第五种,语法 REPLACE INTO VALUES (),是当冲突后,删除表上的冲突行,并继续尝试插入数据,如再次冲突,则继续删除标上冲突数据,直到表上没有改行冲突的数据后,插入数据。...在这次 UPDATE 中,可能还是会遇到唯一约束冲突的问题,如果遇到了,此时即报错返回,如果该语句INSERT IGNORE ON DUPLICATE KEY UPDATE 则会忽略这个错误,继续下一行...KEY UPDATE i = i; 可以看到,这个 SQL 中,表中原来并没有数据,第二句的 INSERT 也就不可能读到可能冲突的数据,但是,这句 INSERT 本身要插入的两行数据之间冲突了。...但是 REPLACE 语句不同,它将会删除遇到的所有冲突行,直到没有冲突后再插入数据。如果表中有 5 个唯一索引,那有可能有 5 条等待插入的行冲突的行。

1.3K30

day05_MySQL学习笔记_02

KEY(stuid) REFERENCES student(stuid)       );       CONSTRAINT(constraint:约束) FOREIGN KEY(foreign key...人可以没有身份证,身份证必须要有人才行,所以人是主表,而身份证是从表。       ...KEY(stuid) REFERENCES student(stuid)       );       CONSTRAINT(constraint:约束) FOREIGN KEY(foreign key...:外键) REFERENCES(references:引用/参照/关联)       第二种添加外键约束的方式:在表格创建时没有添加外键约束,之后通过修改表格添加外键约束。...注意:在执行脚本时需要先行核查当前数据库中的表是否脚本文件中的语句冲突!   例如在脚本文件中存在create table a的语句,而当前数据库中已经存在了a表,那么就会出错!

2.1K20

原创|这个死锁你会解吗?

到此,有两个疑问不得其解: 这两个insert语句插入的数据和索引没有任何冲突,为什么会死锁? RC隔离级别下为什么会产生GAP锁?...后面的两条select语句没有加任何锁,执行的是mvcc读。...线索二:从死锁打印的锁信息来看,两条insert语句分别插入的是不同的key_pid_name,但是持有的锁和等待的锁是在相同的key_pid_name上的,并且不等于各自插入的key_pid_name...根据前两个线索,事务加的S GAP锁只跟最后一条insert语句有关。 2.1 Insert加锁流程 下图是执行一条Insert语句,InnoDB中的加锁流程。...文档中说的很清楚,当事务的隔离级别设置为RC时,普通的searches和index scan是不会产生Gap锁的,但是foreign-key约束检查和唯一键冲突检查仍然有可能会产生Gap锁。

71220

MySQL中insertOrUpdate的功能如何实现的

insertOrUpdate 在我们日常使用中比较常见,那么它是如何实现的呢,不知道大家有没有考虑过呢? 在 MySQL 中,可采用INSERT INTO ......ON DUPLICATE KEY UPDATE语句时,数据库首先尝试插入新行。在此过程中,数据库会检查表中是否存在新插入行具有相同的唯一索引或主键的记录。...ON DUPLICATE KEY UPDATE 之外,还有一些类似的 SQL 语句,比如: REPLACE INTO:如果存在唯一索引冲突,则先删除旧记录,再插入新记录。...浅谈主键跳跃 在 MySQL 中使用 INSERT ON DUPLICATE KEY UPDATE 语句时,如果插入操作失败(因为主键或唯一键冲突),而执行了更新操作,确实会导致自增主键计数器增加,即使没有实际插入新记录...KEY UPDATE value = 'a'; 再执行一次: 此时,由于 value 列存在唯一键约束,并且已经存在一条记录 value='a',所以不会插入新记录,而是会执行更新操作。

8010

第13章_约束

# 1.2 什么是约束 约束是表级的强制规定。 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。...,跟在列的定义后面 表级约束:可以作用在多个列上,不与列一起,而是单独定义 位置 支持的约束类型 是否可以起约束名 列级约束: 列的后面 语法都支持,外键没有效果 不可以 表级约束...)的字段名可以主表名(被参考字段)的字段名一样,也可以不一样 -- FOREIGN KEY: 在表级指定子表中的列 -- REFERENCES: 标示在父表中的列 create table dept...不过,如果需要修改表的设计(比如添加新的字段,增加新的关联关系),没有预先定义外键约束,那么,就要用修改表的方式来补充定义。...约束 check 约束对数据验证没有任何作用。

31930

insert into,insert ignore into, on duplicate key update,replace into-唯一键约束

当MySQL表字段设置unique key或者primary key时,被约束的字段就必须是唯一的。新插入数据直接使用insert into,如果出现唯一性冲突,就会抛出异常。...为了演示,我们先新建一张user表,SQL语句如下,其中user_id为主键,username为唯一索引 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;...user` VALUES (8, 'Buffett', '123456', '13800000077', 'h@163.com', 0, CURRENT_TIMESTAMP, NULL); SET FOREIGN_KEY_CHECKS...= 1; 常用插入语句 insert into 当插入数据时,如果唯一性校验出现重复问题,则报错; 如果没有重复性问题,则执行插入操作。...ignore into 当插入数据时,如果唯一性校验出现重复问题,则忽略错误,只以警告形式返回,不执行此SQL语句; 如果没有重复性问题,则执行插入操作。

48331

Postgresql源码(66)insert on conflict语法介绍内核执行流程解析

1 语法介绍 insert on conflict语法实现了upsert的功能,即在插入发生主键冲突、或唯一约束冲突时,执行on conflict后面的语句,将insert变成update或do nothing...0 1 postgres=# select * from decoding_test; x | y ----+--- 12 | 9 -- 没有报主键冲突,结果上看插入没有效果。...) 2 内核执行流程 注意:后面提到的speculative insert等价insert on conflict语法。...情况二:插入失败 不生成日志 情况三:插入时还没有冲突其他进程并发插入冲突行(并发冲突位置在后面分析) heap_insert,生成XLOG_HEAP_INSERT日志。...插入时还没有冲突其他进程并发插入冲突行(并发冲突位置在后面分析) heap_insert,生成XLOG_HEAP_INSERT日志。

94620

insert ... on duplicate key update 和 replace into

执行过程分析 3.1 insert ... on duplicate key update insert duplicate 语句是 MySQL 对 SQL 标准的扩展,它有 2 种行为: 如果插入记录和表中记录不存在主键或唯一索引冲突...这一步和 insert duplicate 语句是一样的,因为它们俩在这一步执行的是同一行代码,兄弟俩还没有分家。...旧记录用于第 3 步中删除冲突记录,以及判断需要把插入记录中的哪些字段更新到表中。 这一步和 insert duplicate 语句也是一样的,因为在这一步它们执行的是同一段代码,兄弟俩还没有分家。...使用更新旧记录方式,需要同时满足 3 个条件: 条件 1,第 2 步中报记录冲突的那个索引是表中最后创建的唯一索引(也可能是主键)。 条件 2,表中的所有字段,都没有被其它表的字段作为外键约束。...条件 3,表上没有定义过删除触发器。 外键约束和删除触发器都很少使用,不展开讲了。 4. 总结 2.

1.6K40

快速学完数据库管理

,多列的在建表语句的最后出现 -- 下面由于展示方便,没有指定约束名,这里以主键约束展示一下,最好还是指定一下约束名 -- 不然到时候删除就有点麻烦,系统默认会随机生成一个约束名 ALTER TABLE...作用:主键有点像,允许出现空值,只能出现一次,保证键值的唯一性,一个表可以允许有多个唯一约束 --这里就是创建了一个唯一约束 create table student( name varchar(...key references course(age) ) --这边由于是列级约束,所以可以省略foreign key 后面的列名 添加约束 alter table student add foreign...有两种方式 没有指定列名的插入语句 insert into 表名 values(值1,值2) --这里必须输入表的全部属性上的值才可以执行,默认按照表的定义结构进行赋值 --比较容易出错,...values(值1,值2) --这里指定列名,值一一前面的列名相对应 --语句比较清晰,存在需要写很多字段的繁琐操作 --举个例子 insert into student(name,

1.9K30

MySQL的ON DUPLICATE KEY UPDATE用法 增量更新

创建表,插入测试数据 SET FOREIGN_KEY_CHECKS=0; — —————————- — Table structure for mRowUpdate — —————————- DROP...(‘3’, ‘9999’); SET FOREIGN_KEY_CHECKS=1; Step2 .测试 ON DUPLICATE KEY UPDATE 的使用方法: INSERT INTO mRowUpdate...(`a`)+VALUES(`b`); Tips: VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。...为了测试两个唯一索引都冲突的情况,然后插入下面的数据 insert into test values(1,1,1), (2,2,2); 然后执行: insert into test values(1,2,3...) on duplicate key update tid = tid + 1; 因为a和b都是唯一索引,插入的数据在两条记录上产生了冲突,然而执行后只有第一条记录被修改

5.8K30

mysql的建表语句_mysql如何查询建表语句

如下图: 当要删除或者更新一条数据时,由于有外码约束,不可以直接使用delete或者update语句,需先取消外码约束,再进行操作,最后再恢复外码约束。..., CONSTRAINT course_ibfk_1 FOREIGN KEY (Cpno) REFERENCES course (Cno))错误。.../*取消外码约束*/ set foreign_key_checks = 0; /*删除或更新数据*/ delete/update from 表名 where 条件; /*恢复外码约束*/ set foreign_key_checks...SC add foreign key(Cno) references Course(Cno); 向表中插入数据。...就以课程表为例,要删除数据要经过三个步骤,取消外键约束,删除数据,恢复外键约束如果没有外键约束,就可以直接删除数据。因此,在以后设计数据库的时候尽量避免外码约束的使用。

8.3K20
领券