关系模型 外键 在 students 表中,通过 class_id 的字段,可以把数据与另一张表关联起来,这种列称为外键。...(id) 指定了这个外键将关联到 classes 表的 id 列(即 classes 表的主键)。...要删除一个外键约束,也是通过 ALTER TABLE 实现的: ALTER TABLE students DROP FOREIGN KEY fk_class_id; 注意:删除外键约束并没有删除外键这一列...删除列是通过 DROP COLUMN 实现的。 索引 索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。...索引名称是任意的,索引如果有多列,可以在括号里依次写上,例如: ALTER TABLE students ADD INDEX idx_name_score (name, score); 索引的效率取决于索引列的值是否散列
限制工作数据集的大小 检查那些SELECT语句中用到的表,看看你是否可以应用WHERE子句进行过滤。一个典型的例子是,当表中只有几千行记录时,一个查询能够很好地执行。...•当使用一个面向列的DBMS时,只有你选择的列会从磁盘读取。在你的查询中包含的列越少,IO开销就越小。 移除不必要的表 移除不必要的表的原因,和移除查询语句中不需要的字段的原因一致。...假设你有以下的表,它们通过定义OUTER JOINS来确保返回所有的数据: ? 解决办法是在customer表的行中增加一个占位符,并更新sales表中的所有NULL值到占位符。 ?...其他开发人员不必编写额外语句,例如ISNULL(customer_id, “No customer yet”)。...在sales表中利用年和月增加一列,可以提高性能。更新后的SQL语句将如下: ?
NULL: 代表查询在mysql能够在优化阶段分解查询语句的时候直接能完成,不需要查询表和索引,例如获取逐渐最大列或最小列: EXPLAIN select min(id),max(id) from film...Select tables optimized away:代表从表信息中就能获取结果 system: 如果要达到sysytem级别,那么它必须要达到以下几个条件: 1.是系统表或者是临时表 2.表中有且只有一条记录...from film where id = 1) tmp; 可以看到查询类型为PRIMARY已经达到了system级别,它是从派生表(临时表)中查询,并且派生表中只有一条记录,也能够达到system级别...explain 时可能出现 possible_keys 有列,而 key 显示 NULL 的情况,这种情况是因为表中 数据不多,mysql认为索引对此查询帮助不大,选择了全表查询。...ref 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常 量),字段名(例:film.id) rows 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数
NULL: 代表查询在mysql能够在优化阶段分解查询语句的时候直接能完成,不需要查询表和索引,例如获取逐渐最大列或最小列:EXPLAIN select min(id),max(id) from film...(select * from film where id = 1) tmp; 可以看到查询类型为PRIMARY已经达到了system级别,它是从派生表(临时表)中查询,并且派生表中只有一条记录,也能够达到...explain 时可能出现 possible_keys 有列,而 key 显示 NULL 的情况,这种情况是因为表中 数据不多,mysql认为索引对此查询帮助不大,选择了全表查询。...key 这一列显示mysql实际采用哪个索引来优化对该表的访问。如果没有使用索引,则该列是 NULL。...ref 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常 量),字段名(例:film.id) rows 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数
如果还没有选择数据库,则可以使用 db_name.table_name 格式指定要新建的表所在的数据库; IF NOT EXISTS 指示只有给定的表不存在的时候才进行创建。它是可选的。...\ 改语句定义了表中的一列。...该列的值从 1 开始,每增加一个行就会加 1。一个表中只能有一个自增列。...上面这种方式适合只有一列作为主键的情况,如果主键包含多列,请使用下面的方式: CREATE TABLE user ( com_id INT, user_number INT, name VARCHAR...与主键约束不同的是,唯一约束在一个表中可以有多个,并且设置唯一约束的列是允许有空值的,虽然只能有一个空值。例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。
从以下四个方面考虑: 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity) :例如:年龄范围0-120,性别范围...可以作用在多个列上,不与列一起,而是单独定义 列级约束与表级约束的区别 位置 支持的约束类型 是否可以起约束名 列的后面 语法都支持,但外键没有效果 不可以 所有列的下面 默认和非空不支持,其他支持 可以...主键约束对应着表中的一列或者多列(复合主键) 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。 MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。...创建(CREATE)表时就指定外键约束的话,先创建主表,再创建从表 删表时,先删从表(或先删除外键约束),再删除主表 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据...设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的值,这样新插入的记录的自增字段值从初始值开始递增,如在表中插入第一条记录,同时指定id值为5,则以后插入的记录的id
FROM是SQL关键字,表示从哪张表查询。tablename是表名。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。...例如: SELECT * FROM students; ? SELECT语句还可以单独使用,通常用来检查当前数据库连接是否有效。通常是使用SELECT 1;来进行判断。...COUNT(*)表示查询所有列的行数,要注意聚合的计算结果虽然是一个数字,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT(*)。...除了COUNT()函数外,SQL还提供了如下聚合函数: 函数 说明 SUM 计算某一列的合计值,该列必须为数值类型 AVG 计算某一列的平均值,该列必须为数值类型 MAX 计算某一列的最大值 MIN 计算某一列的最小值...现在,我们希望结果集同时包含所在班级的名称,上面的结果集只有class_id列,缺少对应班级的name列。我们可以将students表作为主表,把classes表中的name列连接在主表上。
聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 1....概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长 2....多对多: * 如:学生和课程 * 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择 2. 实现关系: 1....第一范式(1NF):每一列都是不可分割的原子数据项 2....码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码 例如:该表中码为:(学号,课程名称)
要删除一个外键约束,也是通过ALTER TABLE实现的: ALTER TABLE students DROP FOREIGN KEY fk_class_id; 注意:删除外键约束并没有删除外键这一列。...投影查询 ---- 使用SELECT * FROM 表名> WHERE 可以选出表中的若干条记录。我们注意到返回的二维表结构和原表是相同的,即结果集的所有列与原表的所有列都一一对应。...例如,从students表中返回id、score和name这三列: SELECT id, score, name FROM students; 这样返回的结果集就只包含了我们指定的列,并且,结果集的列的顺序和原表可以不一样...,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT(*)。...现在问题来了,存放班级名称的name列存储在classes表中,只有根据students表的class_id,找到classes表对应的行,再取出name列,就可以获得班级名称。
聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 1....概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长 2....多对多: * 如:学生和课程 * 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择 2. 实现关系: 1....第一范式(1NF):每一列都是不可分割的原子数据项 2....码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码 例如:该表中码为:(学号,课程名称) * 主属性:码属性组中的所有属性
,只有 Hive 可以访问。...验证外部表中的数据是否位于托管表中,然后删除外部表,并验证数据是否仍在托管表中。...例如,names_text将其从Hive Metastore中删除,并将存储数据的CSV文件也从HDFS中删除。 5. 防止外部表中的数据被DROP TABLE语句删除。...此限制有助于与第三方工具集成和优化约束声明,例如物化视图重写。 CHECK 可以放置在列中的值的范围的限制。 DEFAULT 确保存在一个值,该值在数据仓库卸载案例中很有用。...支持的修饰符 您可以使用以下可选的修饰符: ENABLE 确保所有传入数据符合约束。 DISABLE 不确保所有传入数据都符合约束。 VALIDATE 检查表中所有现有数据是否符合约束。
,使用联合查询将数据存放到一起显示 例如:男生身高升序排序,女生身高降序排序 例如:QQ1表获取在线数据、QQ2表获取在线数据 … >>>> 将所有在线的数据显示出来 基本语法: select 语句...+ 第二张表字段数 内连接:inner join,从一张表中取出所有的记录去另外一张表中匹配:利用匹配条件进行匹配,成功了保留,失败了放弃 流程: 从第一张表中取出一条记录,然后去另外一张表中进行匹配...:结果是一个数据(一行一列) 列子查询:结果是一列(一列多行) 行子查询:结果是一行(一行多列) 表子查询:结果是多行多列(多行多列) exists子查询:返回结果1或0(类似布尔操作) 子查询按位置分类...,查询其班级名 通过学生表获取班级id,得到一个数据(一行一列) 通过班级id获取班级名 mysql> select * from tbClass where id = (select class_id...>); 举例: 获取有学生的班级名 查询学生表中所有班级id,得到一列数据(一列多行) 通过班级id获取班级名 mysql> select name from tbClass where id in (
写入内容为空时,默认从1,2,3...往下填充写入表格中。...外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); 删除外键:alter table 表名 drop foreign key 外键名称...SELECT 命令可以读取一条或者多条记录。 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 你可以使用 WHERE 语句来包含任何条件。...表 order by 列 desc - 根据 “列” 从大到小排列 select * from 表 order by 列1 desc,列2 asc - 根据 “列...1” 从大到小排列,如果相同则按列2从小到大排 select * from students order by id desc; #--->按id倒叙排列 6.分组 1.按名字分组后,并且统计名字出现的次数
另外,由于我们使用的是 select * ,也就是查询表中的所有字段的值,但是 name 索引树中只存有主键 id 的值,无法满足要查询所有字段的需求,而所有字段的数据都是存放在主键 id 索引树上的,...我们在创建 name 索引的时候,实际上创建的是单列索引(只选用了 name 这一列),而在 MySQL 中,我们是可以在创建索引时,选择多个列进行索引创建,这一类索引我们称之为联合索引。...在使用联合索引时,索引的每一列只能做等值判断,因为 MySQL 会使用最左匹配原则进行匹配,也就是从索引最左边的列开始连续匹配,在碰到范围查找时会停止匹配,如遇到 like、>、中,所有节点上的数据是有序的,当我们创建联合索引时,首先保证的是所有数据的第一列是有序的,然后再保证第二列、第三列以及后面的列有序。...以上面的 user 表中的联合索引为例,在该索引树中,name 这一列在所有数据上是有序的,但是 age 这一列,却不是有序的,只有对于 name 相同的情况的下,age 才有序。
Greenplum有两种数据分布策略: Hash分布 当选择Hash分布策略时,可以指定表的一列或者多列组合。...对于分布键的选择,有以下方式及行为: 1.指定分布键,分布键可以是表的一列或者多列组合,但不建议组合分布键的列数超过两列。...3.若没有指定分布键,且表中没有主键及唯一键,则默认使用第一列作为分布键。 4.若没有指定分布键,且表中存在主键或唯一键(二者不能同时存在),则选择主键或唯一键作为分布键。...虽然随机分布可以确保数据平均分散至所有segment,但是在进行表关联分析时,仍然会按照关联键重分布数据,所以随机分布策略通常不是一个明智的选择(除非你的SQL只有对单表进行全局的聚合操作,即没有group...计划中的每个节点或者步骤表示一个数据库操作,例如表扫描、连接、聚集或者排序。计划的读取和执行按照从底向上的顺序进行。
FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。...使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。...FK_HOB ; #FK_HOB 是之前添加的外键名 ALTER TABLES HOBBY_DETAIL DROP key FK_HOB ; DESC HOBBY_DETAIL ; 去除外键后就可以删除表了...: 如果键是 PRI,则列是主键或多列主键中的列之一。...如果键是 UNI,则该列是唯一索引的第一列。(唯一索引允许多个空值,但可以通过检查NULL字段来判断该列是否允许空。) 如果键为 MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。
EXPLAIN命令是查看查询优化器是如何决定执行查询的主要方法,从它的查询结果中可以知道一个SQL语句每一步是如何执行的,都经历了些什么,分为哪几步,有没有用到索引,哪些字段用到了什么样的索引,是否有一些可优化的地方等...从上面的例子中,我们看到返回的有很多列,为了更加清楚的了解每一列的含义,便于我们更好的完成优化SQL。 涉及到的列有: 列名 含义 id id列,表示查询中执行select子句或操作表的顺序。...1. id列 id列是一个编号,用于标识SELECT查询的序列号,表示执行SQL查询过程中SELECT子句或操作表的顺序。 如果在SQL中没有子查询或关联查询,那么id列都将显示一个1。...3)id相同又不同 1)、2)两种情况同时存在。id如果相同,认为是一组,从从上往下执行。在所有组中,id值越大,优先级越高,越先执行。...7)system 表只有一行记录,这是const类型的特例,比较少见,如:系统表。 6. possible_keys列 显示在查询中使用了哪些索引。
因为这时候表中的数据差不多都可以完全缓存在内存中。所以就算是进行全表扫描也不会太慢。 ? 随着表中数据越来越多,查询频率越来越高,内存已经不能完全缓存所有数据的时候,索引的作用就会显得越来越重要 ?...我们常见的两种极端的情况 在表中除了主键没有任何的索引。 给表中的每一列都建立一个索引。 MySQL的索引是在存储引擎层来实现的,而不是在服务器层来实现的。...关于Hash的原理可以参考数据结构整理 中Hash的小节。 1、Hash索引是基于Hash表实现的,只有查询条件精确匹配Hash索引中的所有列时,才能够使用到Hash索引。...增加数据导入的速度点最好方法是把所有的索引全部删除(主键除外)。 太多的索引会增加查询优化器的选择时间。...5、使用索引扫描来优化排序 通过排序操作 按照索引顺序扫描数据 索引的列顺序和Order By子句的顺序完全一致 索引中所有列的方向(升序,降序)和Order By子句完全一致 Order By中的字段全部在关联表中的第一张表中
这些问题可以通过分区分表或者缓存解决 6.选择率低的列不适合建立索引。如果索引项对应cardinality较小,例如小于10,那么使用索引时就需要考虑是否有必要。...如果我们可以忍受,那么可以不建索引 3.使用短索引,索引长度不宜过大,利用B Tree的特性使用最左匹配查找高效利用索引第一列、对选择率高的列索引、使用覆盖索引避免回表查询 4.及时删除不再使用的索引,...当联合索引中,每一列的查询频率都相差不多时,可以优先将选择率最高的列作为联合索引第一列,这样第一列即可过滤更多列,效率更高。...DEPENDENT UNION:子查询中的UNION,且为UNION中从第二个SELECT开始的后面所有SELECT,同样依赖于外部查询的结果集。...system:系统表,表中只有一行数据; unique_subquery:子查询中的返回结果字段组合是主键或唯一约束。 Possible_keys:该查询可以利用的索引。
从以下四个方面考虑: 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录。...例如,学生信息表中的学号是唯一的。 唯一约束 唯一约束用于保证指定列或指定列组合不允许出现重复值。 例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。...检查约束 检查约束允许你定义满足特定条件值的范围或规则,用于检查字段值是否有效。 例如,学生信息表中的年龄字段是没有负数的,并且数值也是有限制的。如果是小学生,年龄不低于 6 岁才可入学。...这意味着 id 列将唯一标识表中每一行。 创建唯一约束 建表时在字段后使用 UNIQUE 创建唯一约束。 例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。...(expr) 从 MySQL 8.0.16 开始,CREATE TABLE 允许所有存储引擎使用表和列 CHECK 约束的核心功能。
领取专属 10元无门槛券
手把手带您无忧上云