delete

Innodb MVCC工作原理

北慕城南 提交于 2020-03-08 16:52:27
《MySQL》高性能的说法: 为何需要MVCC 对于事务型的存储引擎实现,仅仅依赖锁是不够的,还需要MVCC( Multiversion Concurrency Control )的帮助,可以简单的将MVCC理解成为一个row lock的一个变种,只是在必要的时候加行锁。 InnoDB的MVCC实现方式 每个事物存储引擎的MVCC实现方式是不一样的,InnoDB的MVCC简单来讲是通过给表添加两列隐藏列。 一列(创建列)存储行的insert(如果行不存在)时间或者update(如果行已存在)时间,一列存储行的删除时间,当然,这里的时间并非我们所说的时分秒,而是系统版本号(system version number),列存储的SVN是事物开始时刻的SVN,每开始一个新的事物,SVN号递增。 MVCC只有在隔离级别是READ COMMITED(Oracle默认)和REPEATABLE READ(MySQL默认)两个隔离级别下工作。 现在讨论在REPEATABLE READ下的MVCC实现: SELECT a. Innodb查找SVN小于等于当前事物的SVN的行,如果是小于,说明行之前就已经存在,如果是等于,说明这行是事物本身修改过的. b.行的删除时间列要么为空(说明该行未被删除)要么删除时间列的SVN大于当前事物的SVN(表示行是在事物开始之后被删除的). 只有记录满足以上两条

Effective C++ 学习笔记

别等时光非礼了梦想. 提交于 2020-03-08 13:46:07
1. 基础部分 Item 1: View C++ as a federation of languages. 对于内建类型,按值传递优于按引用传递,对于自定义类型则相反。 C++可视为4中子语言的联合:C,Object-Oriented C++,Template C++和STL。 Item 2: Prefer consts, enums, and inlines to #defines. 只有整型常量可以在类声明里面初始化: class Klass { const static int num = 1 ; //也可只声明,在定义文件中,即类外部定义、初始化; }; enum类型也可以在类内部初始化。 Item 3: Use const whenever possible. 对于指针p,const在 * 左边时,p指向的值为常量,const出现在 * 右边时,p指向的地址为常量。 const int * p1 ; int const * p2 ; int * const p3 ; ​ //以上代码,p1和p2一样,其指向的值为常量;p3指向的地址为常量 如果类Klass有同名的两个成员函数foo,其中一个为const类型,那么const实列优先调用const版的foo。 const函数不能改变非static的成员变量。 mutable修饰的成员,在const函数中也可以改变其值。

mysql 操作总结 INSERT和REPLACE

若如初见. 提交于 2020-03-08 11:42:08
--他人总结的 用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句。 言外之意,就是对数据进行修改。在标准的SQL中有3个语句,它们是INSERT、UPDATE以及DELETE。在MySQL中又多了一个REPLACE语句,因此,本文以MySQL为背景来讨论如何使有SQL中的更新语句。   一、INSERT和REPLACE   INSERT和REPLACE语句的功能都是向表中插入新的数据。这两条语句的语法类似。它们的主要区别是如何处理重复的数据。   1. INSERT的一般用法   MySQL中的INSERT语句和标准的INSERT不太一样,在标准的SQL语句中,一次插入一条记录的INSERT语句只有一种形式。   INSERT INTO tablename(列名…) VALUES(列值);   而在MySQL中还有另外一种形式。   INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;   第一种方法将列名和列值分开了,在使用时,列名必须和列值的数一致。如下面的语句向users表中插入了一条记录:   INSERT INTO users(id, name, age) VALUES(123, '姚明', 25);

RESTful API设计的点

我只是一个虾纸丫 提交于 2020-03-08 01:09:41
RESTful API 前言 一直在使用RESTful API,但是好像概念还是很模糊的,总结下使用到的点 设计的规范 协议 API与用户的通信协议,总是使用HTTPs协议。 域名 应该尽量将API部署在专用域名之下。 https://api.example.com 版本 应该将API的版本号放入URL。 https://api.example.com/v1/ 也可以将版本信息加入到HTTP头信息中,但不如放入URL方便和直观 路径 在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与 数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。 举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。 https://api.example.com/v1/zoos https://api.example.com/v1/animals https://api.example.com/v1/employees HTTP动词 对于资源的具体操作类型,由HTTP动词表示。 常用的HTTP动词有下面五个(括号里是对应的SQL命令)。 GET(SELECT):从服务器取出资源(一项或多项)。 POST

C++中delete和delete[]的区别

两盒软妹~` 提交于 2020-03-07 06:48:21
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 请看下面的程序。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <iostream>; using namespace std; class T { public : T() { cout << "constructor" << endl; } ~T() { cout << "destructor" << endl; } }; int main() { const int NUM = 3; T* p1 = new T[NUM]; cout << hex << p1 << endl; // delete[] p1; delete p1; T* p2 = new T[NUM]; cout << p2 << endl; delete [] p2; } 大家可以自己运行这个程序,看一看 delete

数据库关系图和数据库中数据的操作(添加,查询,修改,删除)

大憨熊 提交于 2020-03-07 03:17:18
文章目录 一.创建数据库关系图 二.数据的操作 1.添加数据 添加单行数据 添加多行数据 2.简单查询数据 3.修改数据 4.删除数据 5.还原数据表 数据库的设计 主键的选择 外键的选择 一.创建数据库关系图 生成数据库关系图 出现的报错: 解决: 二.数据的操作 1.添加数据 添加单行数据 INSERT [ INTO ] 目标表名 [ ( 字段 ) ] VALUES ( 字段对应的数据 ) INSERT INTO Teacher ( [ NAME ] , TEL , SUBID ) VALUES ( '张三' , 110 , 1 ) 使用这种插入语法必须要注意:必须要明确这张表中具有非空约束的字段是哪些 注意: 列名的个数必须和数据值对应 非数值类型的数据,必须放在单引号内 数据值的类型必须和定义的字段的数据类型保持一致 添加数据一定要注意数据表中的字段的各种约束问题,违反约束添加失败 这种添加数据的语法是只能添加一行数据 INSERT Teacher VALUES ( '李四' , 1111111 , 2 ) 使用这种插入语法必须要注意:这张表里面的所有字段都必须为其提供对应的数据值除过自增列之外,而且数据值的顺序必须保持和数据表字段的顺序一致 添加多行数据 INSERT INTO [ SUBJECT ] SELECT '.NET' UNION SELECT 'WEB'

MySQL 操作数据库、数据表

让人想犯罪 __ 提交于 2020-03-06 19:24:33
通过mysql-client连接到mysql-server,sql语句要以分号结尾,这样按Enter才会执行sql语句。 mysql关键字不区分大小写 字符串、时间日期类型的值要引起来 数据库操作 show databases; #显示已有的数据库 create database db_student character set utf8; #新建数据库并指定使用的字符集 create database db_student; #新建数据库,使用默认的字符集 drop database db_studrnt; #删除数据库use db_student; #使用指定的数据库。要先使用此语句,才能使用该数据库中的表 数据表操作 show tables; #查看当前数据库中的表drop table 表名; #删除表desc 表名; #查看该表的定义show create table 表名; #查看该表的建表语句rename table 原表名 to 新表名;  create table tb_user(     id int not null auto_increment, #字段名 数据类型 【约束】     name varchar(20) not null,     primary key (id) #设置主键   );   alter table 表名 add 字段名 数据类型

MySQL数据库表的基础操作(增删改查)---讲解一

末鹿安然 提交于 2020-03-06 18:47:56
MySQL环境配置(mysql有下载包) MySQL数据库表的基础操作(增删改查)---讲解一 MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解---讲解二 MySQL字段约束及多表查询---讲解三 1.数据库概述 1.1 什么是数据库 数据库:存储和管理数据的仓库 数据库是一个专业的存储和管理数据的软件系统,比传统的人工或文件保存数据小路更高、更安全、更可靠。 数据库有哪些分类(了解) 早期:层次是数据库、网络型数据库 现在:==关系型数据库==和非关系型数据库 1.2什么是关系型数据库? 关系型数据库就是底层以二维表的形式保存数据的库就是关系型数据库 保存学生信息(student表) 编号 | 姓名 | 成绩 -------- | ----- |----- 1 | 王二妮|88 2 | 李铁柱 |74 3 | 陈翠花|97 常见的关系型数据库有哪些?(了解) SqlServer: 微软提供、适用于中型、大型的项目中,收费,在Java中的使用占比不高(不超过10%) .NET Oracle: 甲骨文公司提供、适用于大型、超大型的项目中,收费,在Java中使用占比非常高- 50%) 性能优异,功能强大。 Mysql:瑞典MYSQLAB公司提供,免费、开源,小巧轻量,在Java中占比约为20% 被甲骨文公司收购了。Mariadb DB2:

java-API之File文件流

寵の児 提交于 2020-03-06 10:02:29
创建File对象 File(String pathname) //通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 常用方法及其测试 File file = new File("F:\\ioTest\\1.txt"); // 本地磁盘路径 // 常见方法 System.out.println( file.length() ); // 获取文件的字节量 System.out.println( file.exists() ); // 判断文件是否存在 System.out.println( file.isFile() ); // 判断资源是否存在 System.out.println( file.isDirectory() ); // 判断资源是否是文件夹 System.out.println( file.getName() ); // 获取文件名 System.out.println( file.getParent() ); // 获取父目录 System.out.println( file.getAbsolutePath() ); // 获取 当前文件的绝对路径(全路径) System.out.println(); file = new File("F:\\ioTest\\2.txt"); // 没有了创建返回true,有了不创建返回false System

k8s 命令

五迷三道 提交于 2020-03-06 08:48:51
Kubernetes 常用安装和使用命令总结 获取所有命名空间上的pod kubectl get pod -o wide --all-namespaces 查看pod IP时使用 kubectl get services 查看dsecp-sso-server-w5tx2 日志 kubectl describe --namespace=default po dsecp-sso-server-w5tx2 通过yaml文件创建: kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete) kubectl apply -f xxx.yaml (创建+更新,可以重复使用) 通过yaml文件删除: kubectl delete -f xxx.yaml 查看kube-system namespace下面的pod/svc/deployment 等等(-o wide 选项可以查看存在哪个对应的节点) kubectl get pod/svc/deployment -n kube-system 查看所有namespace下面的pod/svc/deployment等等 kubectl get pod/svc/deployment --all-namcpaces 重启pod(无法删除对应的应用,因为存在deployment/rc之类的副本控制器