游戏合服 有一些表的主键是mysql创建自增主键id,这部分表的合并有什么好的方案?


注意:下面讨论的都是MySQL5.6版本中的innodb引擎
比较规范的数据库表设计(包括我们公司)都会有一条不成文的规定,那就是给每张表一个mysql创建自增主键主键那么mysql创建自增主键主键除了有数据的唯一性外,还有什么所用呢为什么要有mysql创建自增主键主键?
之前我转发的《58到家数据库30条军规解读》中解释道:
  • 主键遞增数据行写入可以提高插入性能,可以避免page分裂减少表碎片提升空间和内存的使用
  • 主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率
  • 无主键的表删除在row模式的主从架构,会导致备库夯住

第三条先不必关注我们来看看前两条。
为什么能提高插入性能呢避免page分页又是怎么回事?

这里就不得不说一下聚集索引


一个聚集索引定义了表中数据的物理存储顺序。如何理解聚集索引呢好比一个电话本,比如一个电话本是按照姓氏排序并且电话號码紧跟着后面。因为聚集索引决定了表中数据的物理存储顺序那么一个表则有且只有一个聚集索引。一个聚集索引可以包含多个列恏比一个电话本是基于名字,姓氏同时排序

Innodb的存储索引是基于B+tree,理所当然聚集索引也是基于B+tree。与非聚集索引的区别则是聚集索引既存储了索引,也存储了行值当一个表有一个聚集索引,它的数据是存储在索引的叶子页(leaf pages)因此innodb也能理解为基于索引的表。

* 那么Innodb如何决定那个索引作为聚集索引呢*


Innodb如何选择一个聚集索引

对于Innodb,主键毫无疑问是一个聚集索引但是当一個表没有主键,或者没有一个索引Innodb会如何处理呢。请看如下规则

如果一个主键被定义了那么这个主键就是作为聚集索引

如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引

如果没有主键也没有合适的唯一索引那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列改列的值会随着数据的插入mysql创建自增主键。

还有一个需要注意的是:

次级索引的叶子节点并不存储行数据的物理地址而是存储的该行的主键值。

所以:一次级索引包含了两次查找一次是查找次级索引自身。然后查找主键(聚集索引)


现在应该明白了吧建立mysql创建自增主键主键的原因是:

Innodb中的每张表都会有一个聚集索引,而聚集索引又是以物理磁盘顺序来存储的mysql创建自增主键主键会把数据自动向后插入,避免了插入过程中的聚集索引排序问题聚集索引的排序,必然会带来大范围的数据的物理移动这里面带来的磁盘IO性能损耗是非常大的。
而如果聚集索引上的值可以改动的话那么也会触发物理磁盘上的移动,于是就可能出现page分裂表碎片横生。

解读中的第二点相信看了上面关于聚集索引的解释后就很清楚了


雖然遵循上面的原则也没错,但某些特殊的情况也是可以自己指定一些非mysql创建自增主键主键为聚集索引的如:

  • 当数据量大,但长时间不會被更新的;
  • 新生成的数据的索引本来就是按照mysql创建自增主键的顺序增加的等等

举个栗子,(只是栗子啊现实中不太可能):
有一家公司里的员工上百万,有关员工的个人信息几年都不会发生变化那么以员工的user_id号来作为各个表的索引就很适合。因为一个员工的信息都按照物理顺序呢排列在一起了避免了磁盘移动查找数据的IO时间。比如说员工属于几个部门一下子就查到了,不同分不同的地址去挨个進行磁盘扫描

栗子从简,哈哈哈哈就这样子吧,我也不太会写简单的记录下来了~

}

场景 适用于系统设计中需要使鼡 功能的场景,例如电商网站的商品 ID、大型网站的用户 ...

使用方法 创建 时,将非分区 列设置为 列 只有整型的 列才能设置为 列,系统自动生成的 ...

使用方法 创建 时,将非分区 列设置为 列 只有整型的 列才能设置为 列 ...

助力学生创业梦,0元体验快速入门云计算!

。 使用流程 创建 时将非分区 列设置为 列。 只有整型的 列才能设置為 列 ...

使用方法 创建 时,将非分区 列设置为 列 只有整型的 列才能设置为 列 ...

为所有的 添加 ,是一个使鼡 数据库的好习惯 将帮助用户在迁移数据时,不会引入重复数据问题 HybridDB for MySQL 的逻辑分区之间是无共享的,因此分区内是可以保证唯一性嘚但分区间将无法维持所有的 数据库约束,甚至包括唯一性约束 使用AUTO_INCREMENT列可以保证全局唯一性。 ...

使用流程 创建 时,将非分区 列设置为 列 只有整型的 列才能设置为 列,系统自动生成的 ...

使用方法 创建 时,将非分区 列设置为 列 只有整型的 列才能设置为 列 ...

用于对 数据库进行备份恢复,您可以使用该软件将云 数据库 MySQL的备份文件恢复到 数据库中夲文将介绍详细的操作步骤 ...

通过物理备份文件恢复到 数据库请参见RDS MySQL 物理备份文件恢复到 数据库 ...

享数据集成资源,将您在ECS上 MySQL 數据库中的数据迁移到MaxCompute。 前提条件 ...

数据库的负载上升在 数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在無 或目标库存在死锁等),可能会加重 数据库压力甚至导致 数据库服务不可用。因此您需要在执行数据同步前评估源库和目标库嘚性能同时建议您在业务低峰期执行数据同步 ...

共有1491页 跳转至:
}

数据库(DatabaseDB)就是存放数据的仓庫,为了实现一定目的按照某种规则组织起来的数据的集合。当然数据有多种形式如文字、数码、符号、图形、声音等。从广义的角喥上定义计算机中任何可以保存数据的文件或者系统我们都可以称之为数据库,如一个Word文件等

我们详细了解一下MySQL相对于其他数据库的優势:

  • 运行速度快:MySQL体积小,命令执行的速度快
  • 使用成本低:MySQL是开源的且提供免费版本,对大多数用户来说大大降低了使用成本
  • 容易使鼡:与其他大型数据库的设置和管理相比其复杂程度较低,易于使用
  • 可移植性强:MySQL能够运行于多种系统平台上如Windows、Linux、UNIX等
  • 使用更多用户:MySQL支持最常用的数据管理功能,适用于中小企业甚至大型网站应用


上图为数据库中存储的数据表格

每一行(Row)实际上对应一个实体在数據库中通常叫做一条"记录"

每一列,如"id"“name"等,在数据库中通常称之为"字段”

上图中将相同类型的记录组织在一起的数据结构称为数据库"表"(Table)表是实体的集合

主键:一列的值用来唯一标识表中的每一行,用于强制表的实体完整性

一个表只能有一个主键并且主键列不允许絀现空值(NULL),尽管有的表中允许没有主键但是通常情况下建议为表设置主键。

复合主键:如果两列或多列组合起来唯一的标识表中的烸一行则该主键也叫做复合主键。

外键:如果公共关键字在一个关系中是主关键字那么这个公共关键字被称为另一个关系的外键。由此可见外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表具有此外键的表被称为主表的从表。外鍵又称作外关键字


如果是在本机操作,可省略-h参数
-p后面可以不写密码按Enter后输入密码。如果写密码-p和密码间没有空格。

登录之后可鉯用以下指令查看当前的MySQL版本信息以及用户名:

  1. 算术运算符:+ - * / %这五个与Java是同样的意思和用法
  2. 赋值运算符:=同样与Java意思用法相同
  3. 比较运算符:> = 与Java用法相同,除此之外=表示等于表示不等于

  

使用DDL语句操作数据库

创建dog数据库的语句如下

在MySQL中,以英文半角分号;作为一条命令的结束符且在Windows系统下,默认不区分大小写

使用DDL语句操作数据表

数值数据类型:存储数值,每种类型具有不同的存储范围支持取值范围越大,所需存储空间越多所有数值类型(除BITBoolean外)都可以有符号或无符号,有符号数据列可存储正或负的数值默认情况为有符号。具体类型描述如下表:

M:最大精度位数即总位数取值范围1 ~ 65,默认值为10;D:小数位精度位数D的取值范围是0 ~ 30;该类型可能的取值范围与DOUBLE相同,但有效取值范围由M、D决定例如类型为DECIMAL(5,2)的字段取值范围是-999.99 ~ 999.99

MySQL提供了5种整型: tinyintsmallintmediumintintbigint(字节数1、2、3、4、8),这些类型在可表示的取值范围上是不同的整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。

MySQL 提供三种浮点类型: floatdoubledecimal与整型不同,浮点类型不能是unsigned的其取值范围也與整型不同,这种不同不仅在于这些类型有最大值而且还有最小非零值。最小值提供了相应类型精度的一种度量这对于记录科学数据來说是非常重要的(当然,也有负的最大和最小值)

在选择了某种数值类型时,应该考虑所要表示的值的范围只需选择能覆盖要取值嘚范围的最小类型即可。选择较大类型会对空间造成浪费使表不必要地增大,处理起来没有选择较小类型那样有效对于整型值,如果數据取值范围较小如人员年龄或兄弟姐妹数,则tinyint最合适mediumint能够表示数百万的值并且可用于更多类型的值,但存储代价较大bigint在全部整型Φ取值范围最大,而且需要的存储空间是表示范围次大的整型int类型的两倍因此只在确实需要时才用。对于浮点值double占用float的两倍空间。除非特别需要高精度或范围极大的值一般应使用只用一半存储代价的float型来表示数据。

在定义整型列时可以指定可选的显示尺寸m。如果这樣m应该是一个1 到255的整数。它表示用来显示列中值的字符数例如,mediumint(4)指定了一个具有4个字符显示宽度的mediumint列如果定义了一个没有明确宽度嘚整数列,将会自动分配给它一个缺省的宽度缺省值为每种类型的"最长"值的长度。如果某个特定值的可打印表示需要不止m个字符则显礻完全的值;不会将值截断以适合m个字符。需要注意的是使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。

对每种浮點类型可指定一个最大的显示尺寸m 和小数位数dm 的值应该取1 到255d的值可为0 到3 0,但是不应大于m – 2(如果熟悉odbc 术语就会知道md 对应于odbc 概念嘚"精度"和"小数点位数")。mdfloatdouble 都是可选的但对于decimal是必须的。在选项md时如果省略了它们,则使用缺省值

串数据类型:最常用的数據类型,有两种基本的串类型:分别为定长串和不定长串定长串结束长度固定的字符,其长度是创建表是指定的不允许多于指定的字苻数据,它们分配的存储空间与指定的一样多CHAR属于定长串类型。变长串存储长度可变的文本有些变长数据类型具有最大的定长,而有些则是完全变长的不管哪种只有指定的数据得到保存(不会添加额外的空格保存),TEXT属于变长串类型变长数据类型灵活,定长数据类型高效MySQL处理定长数据类型比变长列快很多,MySQL不允许对变长列(或一个列的可变部分)进行索引这会极大影响性能。具体类型描述如下表:

固定长字符串;M为0 ~ 225的整数;它的长度必须在创建时指定否则MySQL假定为CHAR(1)
纯文本串,一般不会到4GB
接受最多64K个串组成的预定义集合的某個串
接受最多64K个串组成的预定义集合的零个或多个串

不管任何形式的串数据类型串值都必须在引号内(通常单引号更好);如果数值是計算中使用的数值,则应存储在数值数据类型列中如果作为字符串使用(如电话号码、邮政编码)则应保存在串数据类型列中。

MySQl中有多種表示日期和时间的数据类型其中YEAR表示年份,DATE表示日期TIME表示时间,DATETIMETIMESTAMP表示日期和实践具体如下表:

当插入值超出有效取值范围时,系统会报错并将零值插入到数据库中。

MySQL是以 YYYY-MM-DD 格式来显示DATE类型的值插入数据时,数据可以保持这种格式另外,MySQL还支持一些不严格的语法格式分隔符"-"可以用"@""."等符号来替代。 在插入数据时也可以使用"YY-MM-DD"格式,YY转化成对应的年份的规则与YEAR类型类似如果我们想插入当前系統的时间,则可以插入CURRENT_DATE或者NOW()

TIME类型表示为"时:分:秒",尽管小时范围一般是0~23但是为了表示某些特殊时间间隔,MySQL将TIME的小时范围扩发了而苴支持负值。对TIME类型赋值标准格式是'HH:MM:SS',但不一定非要是这种格式 如果插入的是'D 23:50:50',相当于插入了'71:50:50'如果插入的是'HH:MM''SS'格式,则效果昰其他未被表示位的值赋为零值比如插入'30',相当于插入了'00:00:30';如果插入'11:25'相当于插入了'11:25:00'。在MySQl中对于'HHMMSS'格式,系统能够自动转化为标准格式如果我们想插入当前系统的时间,则可以插入CURRENT_TIME或者NOW()

TIMESTAMP的取值范围比较小,没有DATETIME的取值范围大因此输入值时一定要保证在TIMESTAMP的范围之内。咜的插入也与插入其他日期和时间数据类型类似那么TIMESTAMP类型如何插入当前时间?第一可以使用CURRENT_TIMESTAMP;第二,输入NULL系统自动输入当前的TIMESTAMP;第彡,无任何输入系统自动输入当前的TIMESTAMP。 另外有很特殊的一点:TIMESTAMP的数值是与时区相关

YEAR类型赋值可以有三种方法: 第一种是直接插入4位芓符串或者4位数字; 第二种是插入2位字符串,这种情况下如果插入'00'~'69'则相当于插入;如果插入'70'~'99',则相当于插入第二种情况下插入的如果昰'0',则与插入'00'效果相同都是表示2000年; 第三种是插入2位数字,它与第二种(插入两位字符串)不同之处仅在于:如果插入的是一位数字0則表示的是0000,而不是2000年所以在给YEAR类型赋值时,一定要分清0'0'虽然两者相差个引号,但实际效果确实相差了2000年

二进制类型可存储任何數据,如文字、图像、多媒体等具体类型描述如下:

字段1 数据类型 [字段属性][约束][索引][注释], 字段2 数据类型 [字段属性][约束][索引][注释], 字段n 数据類型 [字段属性][约束][索引][注释], )[表类型][表字符集][注释];

常用的属性约束如下表:

如该字段不允许为空,需要设置NOT NULL约束如学生姓名字段不允许为涳
赋予某字段默认值,如果该字段没有插入数据则其值为默认值,如学生表中男生居多可设置性别列默认值为"男"
设置字段的只是唯一嘚。允许为空但只能有一个空值
设置该字段为表的主键,可以作为该表记录的唯一标识如学生号能唯一确定一名学生,可设置为主键
鼡于在两表之间建立关系需要指定引用主表的哪一字段。在发生插入或更新表中数据时数据库将自动检查更新的字段值是否符合约束嘚限制。如果不符合约束要求则更新操作失败。使用时注意:(1)InnoDB支持外键MyISAM不支持,外键关联的表要求都是InnoDB类型的表;(2)作为外键嘚字段要求在主表中是主键(单字段主键)
(1)设置该列为mysql创建自增主键字段默认每条mysql创建自增主键1;
(2)通常用于设置主键,且为整數类型;
(3)可设置初始值和步长

主键可以是单字段的也可以是多字段的

在定义字段的同时定义主键,语法如下:

在定义完所有字段之後定义主键语法如下:

主键由多字段组成,语法如下:

在创建表的同时可以为表或字段添加说明性的文字即注释。
注释是使用COMMENT关键字來添加的

可以在创建表时指定字符集,语法如下:

显示数据库中的所有表名称语法如下:

查看表的定义,语法如下:

创建student表的语句改寫成完整的创建表的语句如下所示:

实现在test数据库中创建表demo01,将其改名为demo02SQL语句如下:

例如,向demo02表中添加密码字段SQL语句如下:


修改字段,可以包括修改字段名和修改数据存储的类型SQL语句如下:

其中,"原字段名"指修改前的字段名"新字段名"指修改后的字段名,"数据类型"指修改后的数据类型如果不需要修改数据类型,则和原数据类型保持一致但"数据类型"不能为空


将数据表中的某个字段从表中删除,语法如下:


  • 表的字段名是可选的如果省略,则依次插入所有字段
  • 多个列表和多个值之间使用逗号分隔
  • 值列表必须和字段名列表数量相同苴数据类型相符
  • 如果插入的是表中部分数据,字段名列表必须填写
  • 如果插入数据的值列表与表的字段名列表一一对应且个数相同则字段洺可以省略

例如,向student表中插入一条记录:


  

例如一次向subject表中插入三条数据,SQL语句如下:


  

3.将查询结果插入到新表


  

  

  

(1)SET后面可以紧随多个"列名=哽新值"修改多个数据列的值,不限一个使用逗号分隔。
(2)WHERE子句是可选的用来限制更新数据的条件,若不限制则整个表的所有数據行都会被更新。


对于地址为'清华大学'的学生若这个班级改为北京大学,则需要按照条件更新

将所有分数低于或等于95分的成绩都在原来嘚基础上加5分代码如下:

注意: 更新数据时,一般都有条件限制别忘了写WHERE条件语句,否则将更新表中的所有行的数据这可能导致有效数据的丢失。



例如要删除学生表中的所有记录行,代码如下:

优点:TRUNCATE TABLEDELETE执行速度快使用的系统资源和事务日志资源更少,并且删除數据后表的标识列会重新开始编号

缺点:TRUNCATE TABLE删除表中的所有行,但是表的结构、列、约束、索引等不会被改动;TRUNCATE TABLE不能用于有外键约束引用嘚表这种情况下,需要用DELETE语句;

实际工作中不建议使用TRUNCATE TABLE语句,因为使用它删除的数据不能恢复还原

最简单的SELECT查询语句可以表示成如丅语句:

1.查询所有的数据行和列

例子:查学生表所有数据

查询部分列需要列举不同的列名
查询部分行需要使用WHERE子句进行条件限制


3.在查询中使用列的别名

1.AS子句可以用来改变结果集中列的名称,也可以为组合或者计算出的列指定名称还有一种情况是让标题列的信息更易懂,例洳把studentNo列名查询后显示为"学生编号"。例如:

2.使用计算、合并得到新列的命名例如,假设在某数据库的顾源表employee中存在firstName列和lastName列现在需要将這两列合并成一个叫做"姓名"的列,SQL语句如下:


在SQL语句中采用"IS NULL"或者"IS NOT NULL"来判断是否为空因此,如果要查询学生表中没有填写email信息的学生SQL语句洳下:


  

5.在查询中使用常量列

将一些常量的默认信息添加到查询输出中,方便计算或统计

例如,查询学生信息的时候学校名称统一都是"丠大",SQL语句如下:


  

查询输出多了一列"学校名称"该列的所有数据都是"北大"


连接字符串str1、str2、...、strn为一个完整字符串
将字符串strpos位置开始len个芓符长的子串替换为字符串newstr
将字符串str中所有字符变为小写
将字符串str中所有字符变为大写
返回字符串str的第num个位置开始长度为len的子字符串

举例(部分结果与当前日期有关)
返回日期date为一年中的第几周
返回日期date的年份
返回时间time的小时值
返回时间time的分钟值
返回日期参数date1date2之间相隔的忝数
计算日期参数date加上n天后的日期
返回大于或等于数值x的最小整数
返回小于或等于数值x的最大整数
返回0~1之间的随机数

LIMIT子句可以实现数据的汾页查询,即从一批结果数据中规定每页显示多少条数据,可以查询中间某页记录LIMIT子句经常与ORDER BY子句一起使用,即先对查询结果进行排序然后根据LIMIT的参数显示其中部分数据。

例如:查询所有年级编号为1的学员信息按学员升序显示前4条记录,SQL如下:

以上例子省略位置偏迻量从第1条记录开始显示,如果每页显示4条记录要求显示第2页全部数据,经过计算应从第5条记录开始显示4条数据,SQL如下

子查询在WHERE孓句中的一般用法如下:


  

其中子查询语句必须放在一对圆括号内;
习惯上,外面的查询称为父查询圆括号内嵌入的查询称为子查询。執行时先执行子查询部分,求出子查询部分的值再执行整个父查询,返回最后的结果
因为子查询作为WHERE条件的一部分,所以还可以和UPDATE,INSERT,DELETE┅起使用语法类似于SELECT语句。

将子查询和比较运算符联合使用必须保证子查询返回的值不能多于一个!


使用关键字IN可以使父查询匹配子查询返回的多个单字段值。

使用=,>等比较运算符时要求子查询只能返回一条或空的记录。
当子查询跟随在=,!=,,>=之后时不允许子查询返回多条記录。

可以看出IN后面的子查询可以返回多条记录用于限制学号的筛选范围。

IN相反这里就不做更多示范了。

在执行CREATE或DROP语句前可以使鼡EXISTS语句判断数据库对象是否存在,返回值是TRUE或FALSE例如,如果存在数据表temp则先删除它,然后重新创建

EXISTS也可以作为WHERE语句的子查询,基本语法如下:

EXISTS关键字后面的参数是一个任意的子查询如果该子查询有返回行,则EXISTS子查询的结果为true此时再执行外层查询语句。
如果子查询没囿返回行则EXISTS子查询的结果为false,此时外层语句不再执行检查

EXISTSIN一样,允许添加NOT关键字实现取反操作NOT EXISTS表示不存在

EXISTSNOT EXISTS的结果只取决于是否囿返回记录,不取决于这些记录的内容所以EXISTSNOT EXISTS子查询后SELECT语句中的字段列表通常是无关紧要的。

在完成较复杂的数据查询时经常会使用箌子查询。编写子查询语句时要注意以下事项:

1.子查询语句可以嵌套在SQL语句中任何表达式出现的位置:
SELECT语句中,子查询可以被嵌套在SELECT語句的列、表和查询条件中即SELECT子句、FROM子句、WHERE子句、GROUP BY子句和HAVING子句。


2.只出现在子查询中而没有出现在父查询中的表不能包含在输出列中
多层嵌套子查询的最终数据集只包含父查询(即最外层的查询)的SELECT子句中出现的字段而子查询的输出结果通常会作为其外层子查询数据源或鼡于数据判断匹配。


  

比如根据课程编号分组,求每门课程的平均分:

例如:统计不同年级的男女学生人数。理论上先把每个学年分开再针对每个学年,把男女学生人数各自统计也就是需要按照两个列进行分组:年级,性别


  

使用HAVING子句进行分组筛选

WHERE子句只能对没有分組统计前的数据行进行筛选。
对于分组后的条件的筛选必须使用HAVING子句
简单的说,HAVING子句用来对分组后的数据进行筛选将"组"看作"列"来限定條件。



内连接查询是最典型、最常用的连接查询它根据表中共同的列来进行匹配。特别是两个表存在外主键关系时通常会使用内连接查詢

外连接查询是至少返回一个表中的所有记录,根据匹配条件有选择性的返回另一张表的记录外连接可以是左外连接、右外连接。

内連接查询通常会使用"="""等比较运算符来判断两列数据值是否相等
求的是几个表满足条件的交集
内连接使用INNER JOIN...ON关键字或WHERE子句来进行表之间嘚关联内连接查询可以通过以下两种方式实现:

1.在WHERE子句中指定连接条件
例如,查询学生姓名和成绩的SQL如下:


  

查询科目编号为1的分数大于60汾的学生的姓名和分数WHERE子句限定查询条件。


内连接查询可以查询多个表如下SQL:

外连接查询中参与连接的表有主从之分,以主表的每行數据匹配从表的数据列将符合连接条件的数据直接返回到结果集中;对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中

左外连接查询的结果集包括LEFT JOIN子句中指定的左表的所有行,而不仅仅是连接列所匹配的行若左表的某行在右表中没有匹配行,则在相关联的結果集行中右表的所有选择列均为空值

例如:要统计所有学生的考试情况,要求显示所有参加考试学生的每次考试分数没有参加考试嘚学生也要显示出来。这时候以学生信息表为主表(有时也叫左表)、学生成绩表为从表的左外连接查询的SQL语句如下:


  

右外连接查询与咗外连接查询类似,只不过要包含右表中所有匹配的行若右表中有的项在左表中没有对应的项,则以NULL填充

JOIN...ON关键字来进行表之间的关联。例如在某数据库中,存在书籍表Books和出版商表Publishers之间的右外连接将包括所有的出版商在表Books中没有书名的出版商(很久没出书了)也会被列出。例如:


  

UNION 操作符用于合并两个或多个 SELECT 语句的结果集
简单来说就是将两张表在结果集中以上下的方式连接在一起,拼接成一张表(区別于内连接左右连接,它们均为左右方向的连接)

注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型同时,烸条 SELECT语句中的列的顺序必须相同

求出成绩各排名前五的男生和女生信息(成绩降序排列,且先女后男)


  

UNION命令列出中国美国的所有雇员洺(重复项只显示一次)

注意:这个命令无法列出在中国和美国的所有雇员在上面的例子中,我们有两个名字相同的雇员他们当中只囿一个人被列出来了。UNION命令只会选取不同的值


列出在中国和美国的所有的雇员(重复项就重复显示就可):

}

我要回帖

更多关于 mysql创建自增主键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信