【计算机系统】局部性
(一)理解局部性: 时间局部性:被引用过一次的内存位置,很有可能在不远的将来再次被引用。(引用可以理解为访问) 空间局部性:步长决定空间局部性的好坏,一般而言:步长越大,空间局部性越差。 顺序引用模式:步长为1的引用模式,例如一维数组(具有连续内存空间的数据结构)、二维数组(行优先) (二)为什么要引入局部性?局部性好的程序比局部性差的程序运行的更快。(原因后期补充:先挖个坑) 举个例子:对一维数组的所有元素进行求和 12345678910111213int SumArr(int* arr, int len){ if(NULL == arr || len <= 0) { return -1; } int sum = 0; for(int i = 0; i < len; i++) { sum += arr[i]; } return sum;} 分析: 对于sum来说,具有较好的时间局部性(访问频率高),不具备空间局部性(sum是标量) 对于arr来说,具有很好的空间局部性(地址连续,访问速度快),时 ...
【MySQL】快速建表以及删除表
(一)快速建表(1)拷贝一张表123create table 新表名asselect * from 旧表名; (2)拷贝一张空表123create table 新表名asselect * from 旧表名 where 1 = 2; (3)自由拷贝表123create table 新表名asselect 需要的字段,字段2 from 旧表名 where 条件; (二)删除表删除程度可从强到弱如下排列: drop table 表名; 直接将表格删除,无法找回。 truncate table 表名; truncate 是删除表中所有数据,但不能与where一起使用 delete from 表名; 删除表中数据,但可以与where连用,删除特定行 delete 和 truncate的区别:
【MySQL】外键约束
(一)外键约束 外键:是指表中某个字段的值依赖于另一个表中的某个字段的值(被依赖的字段必须要有主键约束或者唯一约束) 外键约束:用户实现数据库表的参照完整性。外键约束可以使两张表紧密结合起来,特别是对于删除/修改级联操作时,会保证数据的完整性。 子表/从表:使用外键约束的表 (学生表:学号,姓名,性别,年龄,班级号) 父表/主表:含有被依赖的字段的表(班级表:班级号,班级名) 注意:学生表中含有班级号 (二)外键约束的功能 同一个字段有着大量重复数据,使用外键约束后,修改只修改一次父表中的数据即可,节省时间; 注意:外键约束只有表级约束 (三)学生表和班级表(1)练习12345678910111213141516171819202122232425262728293031-- 创建主表(班级表)create table class_table( c_id int(4) primary key auto_increment, c_name varchar(10));-- 创建从表(学生表)create table stu_table( s_id int PRIMARY key ...
【MySQL】完整性约束之非外键约束
(一)什么是完整性约束? 为了防止步符合规范的数据存入数据库,在用户对数据进行增删改操作时,MySQL提供一种机制来检查数据库中的数据是否满足规定的条件,确保数据的准确性和一致性。 (二)MySQL支持的完整性约束 (三)列级约束列级约束:创建表时添加约束 1234567891011-- 创建stu_info表CREATE TABLE stu_info ( `s_id` int(10) PRIMARY KEY AUTO_INCREMENT, `s_name` varchar(10) NOT NULL, `s_sex` char(1) default '男' CHECK(s_sex = '男' or s_sex = '女'), `s_age` int(3) CHECK(s_age > 18 and s_age < 100), `s_born_date` date , `classname` varchar(10), `score` double(5,1), `s_tel` int(11) UNIQ ...
【MySQL】表的操作
(一)修改表结构(1)添加字段(默认尾部)alter table 表名 add 新字段名 新字段的类型;123-- 修改表结构-- 增加性别字段alter table stu_info add s_sex char(1); (2)添加字段(头部)alter table 表名 add 新字段名 新字段的类型 first; 1alter table stu_info add s_sex char(1) first; (3)添加字段(指定位置后)alter table 表名 add 新字段名 新字段类型 after 旧字段名; 12-- 在s_name后添加s_sexalter table stu_info add s_sex char(1) after s_name; (二)删除字段alter table 表名 drop 字段名; 12-- 删除s_sex字段alter table stu_info drop s_sex; (三)修改字段的类型alter table 表名 modify 字段名 新类型; 1alter table stu_info modify score ...
【C++】基础总结(未完待续)
一、c和c++中const的区别C语言:加const 生成的是全局的符号; const修饰的是变量(是一个常属性的变量); C++:加const 不生成符号,在编译阶段直接对初始化时值进行替换(常量); 作用域是本文件; 必须初始化,且后面无法修改; 二、c和c++堆区开辟二维数组C语言:malloc、free 12345678910111213141516171819202122232425262728293031323334353637383940414243//一维数组:int *arr = (int*)malloc(sizeof(int) * 10); assert(arr != NULL);free(arr); //二维数组:10 * 20int** ApplySecondArr(){ int **brr = (int *)malloc(10 * sizeof(int *)); assert(NULL != brr); for(int i = 0; i < 10; i++) { brr[i] = (int *)malloc(si ...
【C++】指针和引用的区别
引用(左值引用)的特点: 引用即别名:只是给已存在的对象起别名 引用的类型必须与被引用的对象类型相同。 引用本身不是一个对象,不能作为被引用的对象。 指针和引用的区别: 是否初始化:指针可以不用初始化,引用必须初始化 性质不同:指针是一个变量,引用是对被引用的对象起的别名 所占内存单元:指针有自己的空间地址,引用和被引用对象占同一个空间地址 是否可用const修饰:指针可以使用const修饰,引用也可以(const int a = 10; const int& b = a;) 是否可变:指针可以改变,引用一旦初始化,就不可改变 使用sizeof结果不同:sizeof(指针) = 4字节/8字节,sizeof(引用) == sizeof(被引用对象) 单目运算符++/—运算结果不同:指针++/—表示移动,引用++/—表示被引用对象的值++/— 动态开辟的对象情况:返回值时必须使用指针,引用会引起内存泄漏 以上区别都可以通过测试来验证!需要牢记,在使用时注意避坑即可!!
【MySQL】表中数据的增删改查
(一)数据的查询select语句用法: (1)查询单个字段select 字段名 from 表名; (2)查询多个字段select 字段名1, 字段名2, ... from 表名; (3)查询所有字段(通配符)`select from 表名` (二)数据的添加(1)指定字段添加数据 方式一: insert into 表名(列名1, 列名2...) values(数据1, 数据2...); 12-- 指定字段插入数据insert into stu_info(s_id,s_name,s_age,s_born_date,classname,s_tel) values(2,'甘雨',19,'2001-07-08','软工1200',1112223); 方式二:insert into 表名 set 列名n = 值n, 列名2 = 值2, ... ; 12-- 指定字段插入数据insert into stu_info set s_id=4, s_name='测试'; (2)所有字段添加数据insert in ...
【MySQL】基本数据类型介绍
(一)整型类型 注意: Mysql支持显示的数值的宽度(例如:int(5)),显示宽度是5,但实际存储的数据范围是表格中的范围 (二)浮点类型 注意: double(4, 2)表示显示总宽度4位,小数部分显示1位 (三)字符串类型注意: char长度固定,varchar长度可变(动态开辟) char和varchar表示的是字符的个数,不是字节个数 blob:存放二进制文本文件数据 (四)日期和时间类型注意:TIMESTAMP类型与DATETIME的区别 TIMESTAMP取值范围小 未设置TIMESTAMP的值(或NULL值),自动填充系统当前时间 TIMESTAMP可使用CURRENT_TIMESTAMP来获取当前时间 TIMESTAMP有时区的区别
【MySQL】Navicat中SQL创建数据库表
Navicat中SQL基本操作(1)创建数据库 (2)新建查询 (3)查询界面 (4)注释写法123456##这是一条单行注释-- 这是一条单行注释/*这是多行注释*/ (5)新建表练习创建一张表,存放学生的信息字段包含学号、姓名、年龄、出生年月、班级、联系方式 1234567891011121314CREATE TABLE stu_info ( -- 学号(10)显示10位 s_id INT(10), -- 姓名(10)10个字符 s_name VARCHAR(10), -- 年龄 s_age INT(3), -- 出生年月 s_born_date date, -- 班级 classname VARCHAR(10), -- 联系方式 s_tel int(11)); (6)查询表的结构 (7)查看表中数据 (8)查看建表语句 12345678CREATE TABLE `stu_info` ( `s_id` int(10) DEFAULT NULL, `s_name` varchar(10) DEFAULT NULL, `s_age` int(3) DEFAULT NULL, ...