1 回表的性能消耗 无论单列索引 or 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含: 索引里的字段值 主键值 即使根据索引树按条件找到所需数据,也仅是索引里的几个字段的值和主键值,万一你搞个...所以类似 select * from table order by xx1,xx2,xx3 得从联合索引的索引树里按序取出所有数据,接着对每条数据都走一个主键的聚簇索引查找,性能不高。...有时MySQL执行引擎可能认为,你要是类似 select * from table order by xx1,xx2,xx3 相当于得把联合索引和聚簇索引,两个索引的所有数据都扫描一遍,那还不如不走联合索引...,直接全表扫描得了,这样就只需扫描一个主键索引。...即使无可避免地要回表,你也尽可能用limit、 where限定一下回表的次数,就从联合索引里筛选少数数据,再回表,这样性能好一点。
在一个业务功能中要求先清空一张基础表(user表)再插入一批新数据。 在删除过程中报错为其它表有外键引用,无法删除。 于是,查询库中哪些表引用了 user 表中的主键为外键。...从 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表中查。...select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME='被引用表的表名' 如图 红色框中是当前连接中的数据库...,黄框中的是引用了 user 表为外键的其它表,蓝色框中的是黄框中表的外键字段。...要想删除 user 表中的数据,就要先删除后面 2 个框中的外键引用。
: mysql> create table if not exists user1( -> id int, -> name varchar(20) comment '用户名',...-> )character set utf8 collate utf8_general_ci engine MyIsam; Query OK, 0 rows affected (0.00 sec) mysql...> 创建表user2: mysql> create table if not exists user2( -> id int, -> name varchar(20) comment...xingming varchar(60) DEFAULT NULL; 向表中插入数据insert into values mysql> insert into user values (1,'张三...54321','2010-11-1'); Query OK, 1 row affected (0.00 sec) 表中添加一个字段 例如在user表的birthday字段后面添加一个image_path
[FROM 表名] [WHERE ...]...id > 2的学生: 3.指定列查询: 指定列的顺序不需要按定义表的顺序来,这里我们查name和mail; 4.查询字段为表达式: 4.1 表达式不包含字段: 4.2 表达式包含一个字段..., 不等于BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)IN (option, ...)如果是 option 中的任意一个...% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 逻辑运算符: 注: 1. Where条件可以使用表达式,但不能使用别名。...AND, 查询分数在30到50的成绩 8.3模糊查询:LIKE % 匹配任意多个(包括 0 个)字符:查询带' 孙' 字的同学 匹配严格的一个任意字符:查询 "
MySQL基本查询 表的增删改查:CRUD Create(创建)包含insert Retrieve(读取)包含select Update(更新) Delete(删除) 一.增加数据Create 主要是...,但冲突数据的值和 update 的值相等 1 row affected: 表中没有冲突数据,数据被插入 2 row affected: 表中有冲突数据,并且数据已经被更新 此外,通过 MySQL...有三种方式: 方式一:limit n 表示显示前n条数据。...去重表数据分三步: 首先,创建另一个表,此表与需要去重的表的结构完全一致。...将上述SQL保存到文件中,然后在MySQL中使用source命令依次执行文件中的SQL。如下: 执行完文件中的SQL后查看数据库,就能看到多了一个名为scott的数据库。
MySQL表的增删改查(基础) 据库最主要的操作就是增(create)删(update)改(retrieve)查(delete)。(CURD) 注意:进行增删改查操作的时候,请务必选中数据库。...mysql关系型数据库,每次进行一个sql操作,内部都会开启一个事务。每次开启事务也是有一定开销的。 查询(select) select是sql中最复杂的操作。...查询的时候,针对列来去重(把有重复的记录,合并成一个) select distinct 列名 from 表名; 针对查询结果进行排序 select 列名 from 表名 order by 列名/表达式...如果想要降序,那么手动指定desc(descend 降序)注意和上文desc(describe)表名区别。 MySQL中数据量是非常大的,因此有可能采用的是归并排序。...不加order by,看起来好像是根据插入的顺序,依次排序的,但实际上,mysql并没有对顺序做任何承诺。 如果是要排序的列中,有NULL,NULL视为“最小值”。
确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。...对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。...,语法: foreign key (字段名) references 主表(列) 用例: -- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识 DROP TABLE IF EXISTS...,一个学生对应一个班级,一个班级对应多个学生。...这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。
注意: 实际开发中,大部分的表,一般都会带有一个主键,主键往往是一个整数表示的id 在mysql中,一个表里,只能有一个主键,不能有多个 虽然主键不能有多个,mysql允许把多个列放到一起共同作为一个主键...mysql的数据量比较小,所有的数据都在一个mysql服务器上,自增主键是可以很好地工作的,如果mysql的数据量很大,一台主机放不下就需要进行分库分表,使用多个主机来进行存储。...表的设计 表的设计/数据库的设计,要做的工作,就是明确一个程序里,需要使用几个数据库,几个表,表里有哪些列~ 设计表/数据库基本思路: 先明确实体 再明确实体之间的关系(关系是固定的套路:1.没关系...一对多 4.多对多) 根据上述内容,套入到固定的“公式”中,然后就可以得到表。 一对一关系 在教务系统中,有一个实体,学生,还有一个实体,账号。...有课程名字(class表),有分数(分数表) 先对三张表进行笛卡尔积 引入连接条件()此处有两个引入条件需要同时满足 针对要求的列进行精简 同样是使用join on也可以进行三个表的查询
1.创建表 首先创建一个 数据库 testForTable mysql> create database if not exists testForTable; 当前创建的 数据库 testForTable...三个文件 2.查看表 身处某个数据库中,可以通过 show tables 查看当前数据库中有哪些表 mysql> show tables; 当前数据库中就只有之前创建的两张表 2.1.查看表结构 知道有哪些表后...是否存在 主键/外键/唯一键 约束 Default 表示 是否有默认值 Extra 表示 额外信息 2.2.查看建表信息 如果想查看关于表更详细的信息,可以通过指令查看建表时的语句内容,语法为 SHOW...a, drop b, drop c; 刚刚新增的无用字段立马就被删除了 在 MySQL 中,删除 一直都是一个 高危 操作,毕竟数据丢了不容易找回,比如这里的删除字段,如果表中有数据,那么表中数据关于该字段的信息会被全部删除...中对应的文件名也会被修改 注意: 如同修改字段名一样,修改表名也是一个危险操作,同样会影响上层使用 修改 person 表名为 students mysql> alter table person rename
用例:创建一张学生表 -- 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT, sn INT comment...查询字段为表达式 -- 表达式不包含字段 SELECT id, name, 10 FROM exam_result; -- 表达式包含一个字段 SELECT id, name, english + 10...> 不等于 BETWEEN a0 AND a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) IN (option, …) 如果是 option 中的任意一个...% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 逻辑运算符: 运算符 说明 AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1) OR 任意一个条件为 TRUE(1),...[LIMIT ...] -- 删除表中某一数据 DELETE FROM 数据表名 WHERE 条件; -- 删除整表数据 DELETE FROM 数据库名; ?
出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻辑。...一个 Java 对象到底有多大? 想要精确计算一个 Java 对象占用的内存,首先要了解 Java 对象的结构表示。...下面以 32 位系统为例子,计算一下 java.lang.Integer 到底占用多大内存: ObjectHeader 和 Pointer 都是固定的,4+4=8byte 。...没错,这个对象有点特殊,它比其他对象多了一个属性:长度(length)。 所以我们计算数组长度的时候,需要额外加上一个长度的字段,即一个 int 的大小。...由此我们得出第一个节约内存的原则: (1) 尽量使用基本类型,而不是包装类型。 数据库建表的时候字段类型需要仔细推敲,同样 JavaBean 中的属性字段类型也需要仔细斟酌。
一个Java对象到底有多大? 想要精确计算一个Java对象占用的内存,首先要了解Java对象的结构表示。...下面以32位系统为例子,计算一下 java.lang.Integer到底占用多大内存: ObjectHeader和 Pointer都是固定的,4+4=8byte;再看看字段,只有这一个,表示数值: /*...没错,这个对象有点特殊,它比其他对象多了一个属性:长度(length)。所以我们计算数组长度的时候,需要额外加上一个长度的字段,即一个int的大小。...由此我们得出第一个节约内存的原则: (1) 尽量使用基本类型,而不是包装类型。 数据库建表的时候字段类型需要仔细推敲,同样JavaBean中的属性字段类型也需要仔细斟酌。...一个long比一个int才多4byte,但是你要想,如果内存中有100W个long,那就白白浪费了约4MB空间,不要小看这一点点的空间浪费,因为随便一个跑着在线应用的JVM中,对象都能达到上千万!
编写Java代码的时候,大多数情况下,我们很少关注一个Java对象究竟有多大(占据多少内存),更多的是关注业务与逻辑。但是殊不知,在我们不经意间,大量的内存被无形地浪费了。...一个Java对象到底有多大? 想要精确计算一个Java对象占用的内存,首先要了解Java对象的结构表示。...下面以32位系统为例子,计算一下java.lang.Integer到底占用多大内存: Object Header 和 Pointer 都是固定的,4+4=8byte;再看看字段,只有这一个,表示数值:...没错,这个对象有点特殊,它比其他对象多了一个属性:长度(length)。所以我们计算数组长度的时候,需要额外加上一个长度的字段,即一个int的大小。...由此我们得出第一个节约内存的原则: (1)尽量使用基本类型,而不是包装类型。 数据库建表的时候字段类型需要仔细推敲,同样JavaBean中的属性字段类型也需要仔细斟酌。
ALTER TABLE 旧表名 RENAME 新表名; 此语句可以修改表的名称,其实一般我们在终端中使用,有可视化工具完全没必要用命令。...说一下,我这里DataGrip运行后会及时更新,如果你使用其他工具,有可能要手动刷新才能有反应!!!...但是最好按规范来,pk+下划线+表名,如:PK_STU`。...表里面,外键表是result,不要搞反了。...外键名规范是FK_表1_表2。 小知识 我们发现,我们上面的语句常用ALTER TABLE这个关键字。 我们可以常识查看帮助文档。 如果英语不咋地,就老老实实搜浏览器吧。
打开数据库: 步骤:新建查询(Ctrl+Q)→写SQL语句→运行→刷新→创建表成功 ①新建查询(Ctrl+Q) ②写SQL语句: 创建表的SQL语句一般格式: CREATE TABLE...( [列级完整性约束定义] {, [列级完整性约束定义] … } [,表级完整性约束定义] ) 下面来举个列子来说明一下就更清晰了,比如我需要创建一个...Student表: CREATE TABLE Student( Sno char(7) PRIMARY KEY, Sname char(10) NOT NULL, Ssex char(2), Sage...tinyint, Sdept char(20) ) 顺便把图也附上: ③运行,然后刷新 最后运行,再刷新一下,表就出来了。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
本页目录 库语句 建库 修改库字符集 指定库排序规则 当前库状态的建表语句 删除库 Navicat编辑数据库时执行的SQL 表语句 建表 添加字段 修改表 修改字段 修改表字符集、排序规则 截断表 删除表...添加索引 一直都是用MySQL可视化工具,几乎没碰过建库、表等语句了。...我们无法人为控制,只能建库完毕后执行修改库字符集或者建库前修改MySQL配置 CREATE DATABASE IF NOT EXISTS `school` DEFAULT CHARACTER SET...直接执行就行,没有参数 SELECT @@character_set_database, @@collation_database 表语句 建表 添加字段 修改表 修改字段 修改表字符集、排序规则 截断表...删除表 添加索引
题目部分 在Oracle中,贵公司的数据库有多大?大一点的表有多大?有多少行?...答案部分 对于数据库的大小,需要注意的问题是数据库的大小不能以表空间的分配大小而论,而应该以表空间的占用空间大小而论,并且需要减掉SYSTEM、SYSAUX、TEMP和Undo这些表空间占用的空间。...这里作者给出自己一个常用的查询表空间大小的SQL语句,该SQL语句列出了表空间的名称、表空间的分配大小和使用大小,并且列出了所有表空间的总体情况,如下所示: 1SET PAGESIZE 9999 LINE...至于大一点的表有多大?有多少行?...这个问题考察DBA对自己库的熟悉程度,通过下面的SQL语句可以查询一个表的大小: 1SYS@RACLHR2> SELECT * 2 2 FROM (SELECT D.OWNER, D.SEGMENT_NAME
查询 首先创建一张表,并插入一些数据作为案例; -- 创建考试成绩表 DROP TABLE IF EXISTS exam_result; //如果之前创建过这个名字的表就删除掉 CREATE...; 3.3 查询字段为表达式 -- 表达式不包含字段 SELECT id, name, 10 FROM exam_result; -- 表达式包含一个字段 SELECT id, name,...如果是 option 中的任意一个,返回 TRUE(1) IS NULL 是 NULL IS NOT NULL 不是 NULL LIKE 模糊匹配。...% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符 逻辑运算符 运算符 说明 AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1) OR 任意一个条件为 TRUE(1),...,删除的是表的内容,表的结构还在.
在上一小节中介绍了 MySQL 数据库的一些最最最基础的入门级也是必须要掌握的10条语句,本节将继续深入学习 MySQL 的增删改查语句。本节讲的增删改查是相对于表 而言的。...1、准备工作 想要对表进行增删改查,首先应该有张表,假设我们要统计大学同学工作之后的工作情况,建立了如下表格: 姓名 性别 公司 工资 准备工作: mysql> create...01.准备工作 此处建立了一个表,但是不要困惑于建表语句里面的数据类型等,后续会详细讲解。 表创建完成之后要设置一下 数据库的字符集,因为我们要使用到中文: set names gbk; ?...04.插入数据省略列名 2.2 添加部分列 有时候我们不需要添加所有列的数据,比如 司徒小翠 在一个保密机构工作,其公司名称和薪水都不能透露,我们可以使用如下语句插入数据: mysql> insert...12.查询指定行的指定列 至此数据库的增删改查的基本语法都已介绍了,当然增删改查还有高级的用法,以后有机会讲到。
每个字段由若干按照某种界限划分的相同数据类型的数据项组成,这里指的数据表中的列,一列就是一个字段 1.1增 1.1.1列表的创建: create table 表名(字段名 列约束 [可选的参数] ,...方式二 create table 新表名 like 被复制的表名;需要强调的是,这里的复制仅仅是复制表的结构,而不复制表的内容,新表示一个空表。...8位,int占4个字节 在整数类型上加上 unsigned 代表不能取负数,不加是有符号的,且unsigned只适用于整型,且必须在数据类型前面。...id<=2 and id=3; Query OK, 0 rows affected (0.00 sec) 3.2.2删除整个表所有的数据 1.delete from 表名; mysql> delete...[with grant option]; grant create on db1.* to zero@localhost with grant option; 注:权限有select,delete,update
领取专属 10元无门槛券
手把手带您无忧上云