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

不起眼的SQL导入,差点引发生产事故..

导致把当天的同事当天测试的sku数据表搞没了。当时确实很纳闷,为什么会丢失数据呢?我明明备份了啊。 后来才发现,这里隐藏着一个大问题!!!!!!!...想删除表,当然用 drop 想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。...TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。...如果要删除表定义及其数据,请使用 DROP TABLE 语句。 其实这里有个问题,为什么我用delete删除100万数据后,查询语句还是那么慢呢? 这是存在一定的水位值。...资源释放: 由于逐行操作,**DELETE 在删除每一行后都会释放相应的存储空间,但在事务提交之前,这些空间可能并没有被立即释放。

57710

数据库圣经--update delete 截断表(TRUNCATE)

DELETE:删除表中的数据行(保留表结构) 作用:仅删除表中满足条件的记录(行),表本身的结构(列、约束、索引等)会保留。...生产环境的替代方案 我们以一个 users 表为例来演示逻辑删除的实现: 步骤 1:创建带逻辑删除字段的表 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT...核心定义 截断表 是一种在数据库管理系统中使用的 SQL 命令(通常是 TRUNCATE TABLE),它的作用是快速删除一个表中的所有行(记录),但保留表的结构。...原因在于: 最小化日志记录:TRUNCATE 通常只将整个数据页的释放操作记录到日志中,而不是像 DELETE 那样逐行记录每一行的删除。这使得日志量非常小,速度极快。...重置标识列 如果表中有自增列(如 SQL Server 的 IDENTITY 或 MySQL 的 AUTO_INCREMENT),TRUNCATE 会将该计数器的值重置为初始值(通常是 1)。

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

    MySQL必知必会分页whereupdatelimit字符串截取order by排序ength和char_lengthreplace函数1 键2 数据库事务的ACID3 视图4 删除连接

    一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。 候选键: 是最小超键,即没有冗余元素的超键。 外键: 在一个表中存在的另一个表的主键称此表的外键。...4 删除 drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句 (1) DELETE 每次从表中删除一行,并同时将该行的删除操作作为事务记录在日志中保存...DELETE 语句相同:二者均删除表中的全部行。...(10) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。 如果想保留标识计数值,请改用 DELETE。...如果要删除表定义及其数据,请使用 DROP TABLE 语句。

    2.7K140

    MySQL数据库面试题(2020最新版)必知必会

    4 删除 drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句 (1) DELETE 每次从表中删除一行,并同时将该行的删除操作作为事务记录在日志中保存...,以便回滚 TRUNCATE TABLE 一次性地从表中删除所有的数据,并不把单独的删除操作记录记入日志保存,删除行是不能恢复的,在删除的过程中不会激活与表有关的删除触发器。...DELETE 语句相同:二者均删除表中的全部行。...(10) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。 如果想保留标识计数值,请改用 DELETE。...如果要删除表定义及其数据,请使用 DROP TABLE 语句。

    1.5K10

    SQL,何必在忆之一(基础篇)

    它们分别用于添加、修改和删除。 事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。...: DML操作, 是逻辑性质删除,逐行进行删除,速度慢. truncate: DDL操作,对与表段中的数据页进行清空,速度快....HWM高位线不会降低 DROP TABLE student; 将表结构(元数据)和数据行,物理层次删除 truncate truncate table student; 清空表段中的所有数据页,物理层次删除全表数据...可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 _ : 表示任意单个字符。...匹配单个任意字符,它常用来限制表达式的字符长度语句 [] : 表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

    98440

    MySQL 教程上

    但MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另一个)。 匹配字符类 存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。...LIMIT and OFFSET OFFSET 可以理解为偏移量。若理解为数据库查询下标从 0 开始。因此第一个被检索的行是第 0 行,而不是第 1 行。...删除表的内容而不是表 DELETE 语句从表中删除行,甚至是删除表中所有行。但是,DELETE不删除表本身。 更快的删除 如果想从表中删除所有行,不要使用 DELETE。...可使用 TRUNCATE TABLE 语句,它完成相同的工作,但速度更快(TRUNCATE 实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。...区别就是 replace into 的时候会删除老记录。如果表中有一个自增的主键。那么就要出问题了。 首先,因为新纪录与老记录的主键值不同,所以其他表中所有与本表老数据主键id建立的关联全部会被破坏。

    4.7K10

    MySQL: Hash索引优缺点

    大家好,又见面了,我是你们的朋友全栈君。...优点: 因为索引自身只需存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快 缺点: 1、不能避免读取行 哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行...3、无法使用部分索引列匹配查找 哈希索引也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。...当出现哈希冲突的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比较,直到找到所有符合条件的行。 同时,当哈希冲突很多的时候,一些索引维护操作的代价也会很高。...例如,如果在某个选择性很低(哈希冲突很多)的列上建立哈希索引,那么当从表中删除一行时,存储引擎需要遍历对应哈希值的链表中的每一行,找到并删除对应行的引用,冲突越多,代价越大。

    1.8K30

    ABAP中COLLECT的用法

    SAP中ABAP对内表插入数据的时候有3种:APPEND,COLLECT,INSERT。 要填充内表 ,既可逐行 添加数据, 也可复制另 一个表格的 内容。..._ 要计算数 字字段之和 或要确保内 表中没有出 现重复条目 ,请使用 COLLECT 语句,它根 据标准关键 字处理行。 _ 要在内表 现有行之前 插入新行, 请使用 INSERT 语句。...要将内表内 容复制到另 一个内表中 ,请使用 APPEND、 INSERT 或 MOVE 语句的变式 。 _ 要将内表 行附加到另 一个内表中 ,请使用 APPEND 语句的变式 。..._ 要将内表 行插入另一 个内表中, 请使用 INSERT 语句的变式 。 _ 要将内表 条目内容复 制到另一个 内表中,并 且覆盖该目 标表格,请 使用 MOVE 语句。...COLLECT的特性让我看到了企业写报表的曙光。

    1.2K20

    如何管理SQL数据库

    _2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' ); 从表中删除数据 要从表中删除一行数据,请使用以下命令结构。...请注意,value应该是column您要删除的行中指定的值: DELETE FROM table WHERE column='value'; 注意:如果在DELETE语句中没有包含WHERE子句,如下例所示...,它将删除表中保存的所有数据,但不会删除列或表本身: DELETE FROM table; 更改表中的数据 使用以下语法更新给定行中保存的数据。...执行基本查询 要查看表中单个列的所有数据,请使用以下语法: SELECT column FROM table; 要查询同一个表中的多个列,请使用逗号分隔列名: SELECT column_1, column...INNER JOIN将返回两个表中具有匹配值的所有记录,但不会显示任何没有匹配值的记录。 通过使用外部 JOIN子句,可以从两个表中的一个表中返回所有记录,包括在另一个表中没有相应匹配的值。

    7.5K95

    【MySQL】:数据库表的 CRUD 操作

    0 row affected:表中有冲突数据,但冲突数据的值和 update 的值相等 1 row affected:表中没有冲突数据,数据被插入 2 row affected:表中有冲突数据...row affected: 表中没有冲突数据,数据被插入 2 row affected: 表中有冲突数据,删除后重新插入 这里从 id 就可以看到是删除后插入的,因为 id 是自增的,刚才是 22,现在是...按条件筛选影响的是未来显示出来信息的条目数或者说是行数,以前是按列位单位把全部行都拿出来了。 如果一列想拿那些行由 where 条件来决定。...[LIMIT ...] 一般都是拿着条件删除 where 不加条件就是把整表的内容删除了,不过表结构还在。...| name | +------+------+ | 1 | a | | 1 | a | | 2 | b | +------+------+ 我的做法是 创建一个和原表一样结构的空表

    30800

    PostgreSQL关键点学习笔记

    FOREIGN Key: 保证一个表中的数据匹配另一个表中的值的参照完整性。 FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。...FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。...查询会把 table1 中的每一行与 table2 中的每一行进行比较,找到所有满足连接谓词的行的匹配对。 当满足连接谓词时,A 和 B 行的每个匹配对的列值会合并成一个结果行。...然后,对于表 T1 中不满足表 T2 中连接条件的每一行,其中 T2 的列中有 null 值也会添加一个连接行。因此,连接的表在 T1 中每一行至少有一行。...然后,对于表 T1 中不满足表 T2 中任何行连接条件的每一行,如果 T2 的列中有 null 值也会添加一个到结果中。

    33310

    MySQL索引与MongoDB索引的区别

    B + 树和 B 树的特点,我们做一个总结 B 树的树内存储数据,因此查询单条数据的时候,B 树的查询效率不固定,最好的情况是 O(1)。...毕竟一个班级有多个学生,一个学生只能属于一个班级。 关系型数据库 我们在关系型数据库中,考虑的是用几张表来表示这二者之间的实体关系。常见的无外乎是,一对一关系,用一张表就行。一对多关系,用两张表。...= t2.cid 但凡做这种关联查询,你躲不开 join 操作的,既然涉及到了 join 操作,无外乎从一个表中取一个数据,去另一个表中逐行匹配,如果索引结构是 B + 树,叶子节点上是有指针的,能够极大的提高这种一行一行的匹配速度...虽然,Mongodb 中有一个 lookup操作,可以做join查询。但是理想情况下,这个lookup 操作应该不会经常使用,如果你需要经常使用它,那么你就使用了错误的数据存储了(数据库)。...毕竟你不需要去逐行匹配,不涉及遍历操作, 幸运的情况下,有可能一次 IO 就能够得到你想要的结果。 3. 总结 可以看出由于关系型数据库和非关系型数据的设计方式上的不同。

    6K10

    MySQL基础SQL编程学习1

    答:对于结构删除,如数据库删除、表删除、索引删除等当使用DROP,而对于数据的删除,和事务有关, 或者想触发 trigger则用DELETE,想保留表而将所有数据删除和事务无关用 truncate 即可...不同的 SQL JOIN 分类: INNER JOIN (内连接):如果表中有至少一个匹配,则返回行 OUTER JOIN (外连接): LEFT JOIN(左连接):即使右表中没有匹配,也从左表返回所有的行...JOIN 从多个表中返回满足 JOIN 条件的所有行,在表中存在至少一个匹配时返回行。...-- 在表中存在至少一个匹配时返回行。...SQL INSERT INTO SELECT 语法: -- 从一个表中复制所有的列插入到另一个已存在的表中: INSERT INTO table2 SELECT * FROM table1; --

    5.7K20

    优雅地使用pt-archiver进行数据归档

    模拟场景 非批量操作 批量操作 对比 归档全表100万行,不删除原表数据 486s 83s 0.17 归档全表100万行,删除原表数据 1024s 96s 0.09 模拟场景 insert bulk_insert...delete bulk_delete 归档全表100万行,不删除原表数据 420.68s 24.56s / / 归档全表100万行,删除原表数据 484.38s 24.89s 452.84s 11.39s...4.2 general log分析 场景2-1:全表归档,删除原表数据,非批量插入,非批量删除 从日志看起来,源库的查询和目标库的插入有先后顺序 从日志看起来,目标库的插入和源库的删除,并无先后顺序...1000行数据给pt-archive处理 --txn-size 1000 设置1000行为一个事务提交一次 --progress 5000 每处理5000行输出一次处理信息 --statistics 结束的时候给出统计信息...LOAD DATA LOCAL INFILE插入数据的) --purge 删除source数据库的相关匹配记录 --local 不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大

    3.3K30

    为什么Mongodb索引用B树,而Mysql用B+树?

    毕竟一个班级有多个学生,一个学生只能属于一个班级。 关系型数据库 我们在关系型数据库中,考虑的是用几张表来表示这二者之间的实体关系。常见的无外乎是,一对一关系,用一张表就行。一对多关系,用两张表。...既然涉及到了join操作,无外乎从一个表中取一个数据,去另一个表中逐行匹配,如果索引结构是B+树,叶子节点上是有指针的,能够极大的提高这种一行一行的匹配速度!...对此,我想说。你确实避开了join操作,但是你数据遍历操作还是没避开。你还是需要在student的这张表的叶子节点上,一遍又一遍的遍历!...确实,这么设计是可以的,我没说不行。只是不符合非关系型数据库的设计初衷。在MongoDB中,根本不推荐这么设计。虽然,Mongodb中有一个$lookup操作,可以做join查询。...毕竟你不需要去逐行匹配,不涉及遍历操作,幸运的情况下,有可能一次IO就能够得到你想要的结果。 因此,由于关系型数据库和非关系型数据的设计方式上的不同。

    2.1K30

    为什么Mongodb索引用B树,而Mysql用B+树?

    毕竟一个班级有多个学生,一个学生只能属于一个班级。 关系型数据库 我们在关系型数据库中,考虑的是用几张表来表示这二者之间的实体关系。常见的无外乎是,一对一关系,用一张表就行。一对多关系,用两张表。...既然涉及到了join操作,无外乎从一个表中取一个数据,去另一个表中逐行匹配,如果索引结构是B+树,叶子节点上是有指针的,能够极大的提高这种一行一行的匹配速度!...对此,我想说。你确实避开了join操作,但是你数据遍历操作还是没避开。你还是需要在student的这张表的叶子节点上,一遍又一遍的遍历!...确实,这么设计是可以的,我没说不行。只是不符合非关系型数据库的设计初衷。在MongoDB中,根本不推荐这么设计。虽然,Mongodb中有一个$lookup操作,可以做join查询。...毕竟你不需要去逐行匹配,不涉及遍历操作,幸运的情况下,有可能一次IO就能够得到你想要的结果。 因此,由于关系型数据库和非关系型数据的设计方式上的不同。

    1.6K10

    SQL 简易教程 中

    例如,在与 IN 操作符联合使用时,NOT 可以非常简单地找出与条件列表不匹配的行。...我们可以从一个表中复制所有的列插入到另一个已存在的表中: INSERT INTO table2 SELECT * FROM table1; 或者我们可以只复制希望的列插入到另一个已存在的表中: INSERT...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。...KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。...DROP DATABASE database_name 复杂的表结构更改一般需要手动删除过程,它涉及以下步骤: (1) 用新的列布局创建一个新表; (2) 使用INSERT SELECT语句(关于这条语句的详细介绍

    4K10

    优雅地使用pt-archiver进行数据归档

    模拟场景 非批量操作 批量操作 对比 归档全表100万行,不删除原表数据 486s 83s 0.17 归档全表100万行,删除原表数据 1024s 96s 0.09 模拟场景 insert bulk_insert...delete bulk_delete 归档全表100万行,不删除原表数据 420.68s 24.56s / / 归档全表100万行,删除原表数据 484.38s 24.89s 452.84s 11.39s...4.2 general log分析 场景2-1:全表归档,删除原表数据,非批量插入,非批量删除 从日志看起来,源库的查询和目标库的插入有先后顺序 从日志看起来,目标库的插入和源库的删除,并无先后顺序...1000行数据给pt-archive处理 --txn-size 1000 设置1000行为一个事务提交一次 --progress 5000 每处理5000行输出一次处理信息 --statistics 结束的时候给出统计信息...LOAD DATA LOCAL INFILE插入数据的) --purge 删除source数据库的相关匹配记录 --local 不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大

    1.2K10

    数据库常用sql语句总结「建议收藏」

    大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说数据库常用sql语句总结「建议收藏」,希望能够帮助大家进步!!!...DELETE FROM 表名称 WHERE 列名称 = 值 可以在不删除表的情况下删除所有的行。...JOIN(即INNER JOIN): 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行...FULL JOIN: 只要其中一个表中存在匹配,就返回行 区别详解: 8.SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。...在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

    25.1K54

    普通211不叫一本,别被人笑话

    两张表怎么进行连接 MySQL 中的连接是通过两个或多个表之间的列进行关联,从而获取相关联的数据。连接分为内连接、外连接、交叉连接。 ①、内连接(inner join):返回两个表中连接字段匹配的行。...如果一个表中的行在另一个表中没有匹配的行,则这些行不会出现在查询结果中。 假设有两个表,Employees 和 Departments。...,但仅限于那些在 Departments 表中有对应部门的员工。...②、外连接(outer join):不仅返回两个表中匹配的行,还返回左表、右表或两者中未匹配的行。...③、交叉连接(cross join):返回第一个表中的每一行与第二个表中的每一行的组合,这种类型的连接通常用于生成笛卡尔积。

    41410
    领券