MySQL的GIS、GEO入门笔记

MySQL的GIS、GEO入门笔记,第1张

探索和学习MySQL中GIS相关功能和特性

这里记录了学习和了解MySQL中GIS特性相关内容的过程。

MySQL官方论坛中GIS的举例

测试数据已经导入成功,下面开始对GIS相关函数和GEOHASH进行了解和体验;

mysql中geometry类型的简单使用

MySQL空间数据类型

经纬度信息存储在geometry格式的字段中,该字段必须非空。

MySQL80前按照longitude-latitude的顺序存储位置

MySQL80前按照longitude-latitude的顺序存储位置

MySQL80前按照longitude-latitude的顺序存储位置

插入数据时候可使用如下语句:

MySQL存储geometry信息的方式采用了25bytes,相比WKB的21bytes,多了4bytes的坐标系表示,组成部分如下:

WTF字符串格式说明

select ST_GeomFromText(WTF格式字符串);

WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。通过WTF字符串生成geometry的方法:

点: POINT(x y)

线: LINESTRING(x1 y1, x2 y2, x3 y3)

多边形: POLYGON((0 0, 10 0, 10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))

多点集: MULTIPOINT(0 0, 20 20, 60 60) 或 MULTIPOINT((0 0),(5 5),(5 0))

多线集: MULTILINESTRING((10 10, 20 20), (15 15, 30 15))

多多边形集: MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))

例如两点一线组成的几何集: GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

A geometry is syntactically well-formed if it satisfies conditions such as those in this (nonexhaustive) list:

Collections are not empty (except GeometryCollection)

更多内容参见

ST_PointFromText('POINT(X Y)');

ST_LineStringFromText('LINESTRING(0 0,1 1,2 2)');

ST_PolygonFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))');

ST_GeomCollFromText();

更多内容参见

参见

Point(x,y)

LineString((x1,y1),(x2,y2))

Polygon(LineString(),LineString())

参见

ST_AsText()

ST_AsBinary()

ST_AsWKT()

参见

ST_Dimension(geom) :返回geom的维度(-1,0,1,2)

ST_Envelope(geom) :返回geom的最小外接矩形(MBR)

ST_GeometryType(geom) :返回geom的类型

ST_IsEmpty(geom) :该函数并不能真实的判空,当geom为任何有效的几何值时返回0,无效的几何值返回1;

ST_IsSimple(geom) :当geom无任何异常几何点返回1(如自相交和自切线等),否则返回0

ST_SRID(geom) :返回geom的坐标系ID

参见

ST_X(Point) :获取Point的X值

ST_Y(Point) :获取Point的Y值

参见

ST_StartPoint(linestrng) : 线的起点

ST_EndPoint(linestring) :返回线的最后一个点

ST_IsClosed(linestring或multilinestring) :线是否闭合(若为线,则判断起点与终点是否一致;若为线组,则判断组内每个元素是否符合闭合线)

ST_Length(linestring) :返回线的长度,若入参为线集,则返回集合内所有长度的和

ST_NumPoiints(linestring) :返回点的数量;

ST_PointN(linestring,N) :返回第N个点(从1开始)

参见

具体不在一一列举,主要有计算多边形面积、中心点、最小外接圆,最大内接圆等函数,列举几个可能会用到的:

ST_Area(Poly|mPoly) :返回双精度的面积或面积的和

'ST_Centroid(Poly|mPoly)':返回数学上的中心点

ST_ExteriorRing(Poly) :返回外接圆

参见

ST_Buffer说明

不再列举,主要有:ST_Buffer(不懂干啥用),ST_ConvexHull(geom)凸包,ST_Dfference(g1,g2)比较差异,ST_Intersecton(g1,g2)交叉点,ST_SymDifference(g1,g2)对称差分,ST_Union(g1,g2)连接、合并等。

检查geometry Objects之间的空间关系的方法。

参见

计算两个Object之间的空间关系的函数,有两个间距离、相交、不相交,包含、相等、相切、重叠、接触、在内等等空间关系。下面列举几个可能会常用的方法:

ST_Contains(g1,g2) :g1是否完全包含g2

ST_Within(g1,g2) :g1是否包含于g2中

ST_Distance(g1,g2) :返回g1和g2之间的距离,已坐标单位计算的

ST_Equals(g1,g2) :返回g1和g2是否相等

参见

MBRContains(g1,g2) :g1的mbr是否包含g2的mbr

MBRWithin(g1,g2) :g1的mbr是否在g2的mbr内

MBRCoveredBy(g1,g2) :g1的mbr是否被g2的mbr覆盖

MBRCovers(g1,g2) :g1的mbr是否覆盖g2的mbr

MBRDisjoint(g1,g2) :g1的mbr,g2的mbr是否不相交

MBRIntersects(g1,g2) :g1mbr,g2mbr是否相交

MBREqual(g1,g2) :g1的mbr,g2的mbr的外接是否相等

MBREquals(g1,g2) :g1的mbr,g2的mbr的外接是否相等

MBROverlaps(g1,g2) :g1mbr、g2mbr

其他函数请参看原文

GeoHash介绍

GeoHash Wiki百科

MySQL中自带函数 st_geohash(longtude,latitude,max_length) 或 st_geohash(point, max_length) 即可生成某一点的geohash值。

返回一个geohash字符串中的latitude或longitude

返回一个geohash解析出的point数据

官方文档

通过geometry生成一个GeoJSON Object, select st_asgeojson(geometry,max_length,options);

通过GeoJSON生成GeoMetry对象。

ST_GeomFromGeoJSON(jsonstring, [options [, srid]])

具体使用方法参见官方文档

官方文档

MySQL中提供的方便空间运算的函数们

select ST_Distance_Spher(geomPoint1,geomPoint2 [, radius]);

此方法用于计算两点或多个点之间的地球上的距离(是地球球面距离而不是直线距离),返回单位为米,

select ST_IsValid(ST_GeomFromText('LINESTRING(0 0,1 1)'))

判断入参是否是符合地理位置描述的格式。返回1(符合)或者0(不符);

例如:

返回0:

select st_isvalid(st_geomfromtext('linestring(0 0, -000 0, 00 0)')

返回1:

select st_isvalid(st_geomfromtext('linestring(0 0,1 1)')

select st_astext(st_makeenvelope(pt1, pt2));

返回两点构成的包络。(此计算是基于笛卡尔坐标系而非球面)

例如:

SELECT ST_AsText ( st_makeenvelope ( st_geomfromtext ( 'point(0 0)' ), st_geomfromtext ( 'point(1 1)' ) ) );

返回结果:

POLYGON((0 0,1 0,1 1,0 1,0 0))

效果说明

JS抽稀算法

select st_simplify(geometry, max_distance);

用道格拉斯-普克算法(抽稀函数)简化geometry,并返回与原格式相同格式的结果。

例如,以下点集拟合为直线,步长05:

SELECT st_simplify ( st_geomfromtext ( 'LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)' ), 05 )

返回结果:

LINESTRING(0 0, 0 1, 1 1, 2 3, 3 3)

再如,步长10:

SELECT st_simplify ( st_geomfromtext ( 'LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)' ), 10 )

返回结果:

LINESTRING(0 0, 3 3)

SELECT ST_Validate(geometry);

验证geometry是符合正确的地理位置信息格式。例如 Point(0 0) 是合格的; Linestring(0 0) 是非法的; Linestring(0 0, 1 1) 是合格的

了解了上述MySQL中关于集合对象的功能,下面来实践一下

由上面geohash长度-精度对应表可知,前6位表示±610米左右的误差,这里先查询前六位范围之后再用上述方法精确筛选一次即可:

可将上述查询方法封装为MySQL函数方便和简化程序调用

该方法是运用了内置的几何关系运算函数 ST_Contains 和 ST_MakeEnvelop 来实现的,05对应大概500米左右的范围,具体如下;

jagn

初学数据库应该从以下几点进行学习:

一、编程语言基础

新手学大数据,首先要掌握基础的编程语言基础,比如Java、C++等,要初步掌握面向的对象、抽象类、接口及数据流及对象流等基础,如果有疑问,可以去网上搜索相关书籍,再结合自己的疑问去翻书,就能很快的熟悉了解数据库的基础技术原理。

二、Linux系统的基本 *** 作

Linux系统的基本 *** 作是大数据不可分割的一部分,企业的MySQL大数据的组件都是跑在linux环境下的,所以学会linux常用命令不能缺少,重点是要学习一下Linux环境的搭建,搭建平台,,能写shell程序就会更好了。

三、学习Hadoop架构设计

要学大数据,首先要了解的是如何在单台Windows系统上通过虚拟机搭建多台Linux虚拟机,从而构建Hadoop集群,再建立spark开发环境,环境搭建成功后在网上搜罗一些demo,sql脚本之类,直接动手敲进去一点一点体会。

四、采用机器学习模式

为了发挥出大数据的优势,提升你的办公效率,就需要实 *** 并应用其中的内容,必然也会涉及大量机器学习及算法,这能最大化的发挥出计算机的性能,也是大数据的优势所在。

想了解更多有关数据库的相关信息,推荐咨询达内教育。作为国内IT培训的领导品牌,达内的每一名员工都以“帮助每一个学员成就梦想”为己任,也正因为达内人的执着与努力,达内已成功为社会输送了众多合格人才,为广大学子提供更多IT行业高薪机会,同时也为中国IT行业的发展做出了巨大的贡献。

权限包括:

SELECT 

INSERT

UPDATE[(col1,col2)]; 可以加括号表示只赋予特定列的权限

DELETE

ALTER

ALL PRIVILEGES

CREATE INDEX

CREATE TABLE

ALL PRIVILEGES

PUBLIC 关键字可以替换用户名 代表全体用户

ALL 关键字替代权限 代表所有权限

WITH GRANT OPTION 表示 赋予用户权限的权限

GRANT OPTION FOR表示撤销赋予用户权限的权限

我们可以把权限赋予角色 然后将角色赋予用户 简化 *** 作。

创建角色

CREATE ROLE ROLENAME;

GRANT 权限 ON 表名 TO 角色;

将角色赋予用户

GRANT ROLENAME TO USERNAME;

GRANT CONNECT TO laurent IDENTIFIED BY motDePasse

问题一:在SQL中,附加和分离数据库的目的和意义是什么呢? 附加和分离数据库

一、可以切断数据库的使用 (比如当数据库日志很大占用了空间时,可以用分离数据库的方法来切断数据库,从而删除以前的数据库日志,来节省空间)

实践中碰到 数据库日志 很大(10G)占用了硬盘空间的情况处理:

方法:

1、停掉iis,然后分离数据库

2、修改数据库日志的名字

3、附加数据库,成功后可以删除数据库日志

二、可以在需要更换数据库物理存放地址时使用如果您数据库系统安装在系统盘(比如 C 盘),由于 C 盘容易受病毒侵害,您也许希望您的数据存放在非系统盘(比如 D 盘),要做的这点很简单,您并不需要重装数据库,只要把数据“分离”,然后将相关文件移动到 D 盘的某个目录,接着“附加”数据库即可。

SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上。分离数据库将从 SQL Server 删除数据库,但是保证在组成该数据库的数据和事务日志文件中的数据库完好无损。然后这些数据和事务日志文件可以用来将数据库附加到任何 SQL Server 实例上,骇使数据库的使用状态与它分离时的状态完全相同。

应注意,只有“使用本数据库的连接”数为0时,该数据库才能分离。所以分离数据库时尽量断开所有对要分离数据库 *** 作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。

问题二:数据库的分离和附加有什么作用?可以说详细点吗? 一、可以切断数据库的使用 (比如当数据库日志很大占用了空间时,可以用分离数据库的方法来切断数据库,从而删除以前的数据库日志,来节省空间)

实践中碰到 数据库日志 很大(10G)占用了硬盘空间的情况处理:

方法:

1、停掉iis,然后分离数据库

2、修改数据库日志的名字

3、附加数据库,成功后可以删除数据库日志

二、可以在需要更换数据库物理存放地址时使用如果您数据库系统安装在系统盘(比如 C 盘),由于 C 盘容易受病毒侵害,您也许希望您的数据存放在非系统盘(比如 D 盘),要做的这点很简单,您并不需要重装数据库,只要把数据“分离”,然后将相关文件移动到 D 盘的某个目录,接着“附加”数据库即可。

SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上。分离数据库将从 SQL Server 删除数据库,但是保证在组成该数据库的数据和事务日志文件中的数据库完好无损。然后这些数据和事务日志文件可以用来将数据库附加到任何 SQL Server 实例上,这使数据库的使用状态与它分离时的状态完全相同。

应注意,只有“使用本数据库的连接”数为0时,该数据库才能分离。所以分离数据库时尽量断开所有对要分离数据库 *** 作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。

问题三:附加数据库是为了更好地使用 附加和分离数据库的意思:

可以切断数据库的使用 (比如当数据库日志很大占用了空间时,可以用分离数据库的方法来切断数据库,从而删除以前的数据库日志,来节省空间)。

分离数据库就是将某个数据库(如student_Mis)从SQL Server数据库列表中删除,使其不再被SQL Server管理和使用,但该数据库的文件(MDF)和对应的日志文件(LDF)完好无损。分离成功后,我们就可以把该数据库文件(MDF)和对应的日志文件(LDF)拷贝到其它磁盘中作为备份保存。

附加数据库就是将一个备份磁盘中的数据库文件(MDF)和对应的日志文件(LDF)拷贝到需要的计算机,并将其添加到某个SQL Server数据库服务器中,由该服务器来管理和使用这个数据库。

问题四:为什么要测试数据库是否附加,这有什么作用呢? 因为 程序就是对数据库的 *** 作,所以要验证 *** 作的数据库是否存在,不一定要附加,只要有数据库管理器中已经有这个数据库,且用户名密码正确;这两个构成程序穿访问数据库的基本条件(一、数据库是否存在;二、程序里定义的 数据库连接字符串是否能正常打开数据)

问题五:附加数据库和还原数据库的区别 1在管理器中将数据分离后,只需要mdf文件即可附加,如果只是将数据库进行了脱机或停止SQL 服务,那么mdf和ldf文件都需要才能附加(SQL不允许在使用的状态下复制数据库文件)

2没啥区别吧,都是新产生一个库,也就是对原来库的备份。

3附加和还原都可以在不创建一个新库的情况下进行附加或还原 *** 作

4同上。

问题六:数据库索引有什么作用和好处? 数据库索引是为了增加查询速度而对表字段附加的一种标识。见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处。这里想把之前的索引学习笔记总结一下: 首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果 。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。那么在任何时候都应该加索引么?这里有几个反例:1、如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了。2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新。 那么在什么时候适合加上索引呢?我们看一个Mysql手册中举的例子,这里有一条sql语句: SELECT cpanyID, cpanyName FROM panies c, User u WHERE cpanyID = ufk_panyID AND cnumEmployees >= 0 AND cpanyName LIKE '%i%' AND ugroupID IN (SELECT ggroupID FROM Groups g WHERE ggroupLabel = 'Executive') 这条语句涉及3个表的联接,并且包括了许多搜索条件比如大小比较,Like匹配等。在没有索引的情况下Mysql需要执行的扫描行数是77721876行。而我们通过在panyID和groupLabel两个字段上加上索引之后,扫描的行数只需要134行。在Mysql中可以通过Explain Select来查看扫描次数。可以看出来在这种联表和复杂搜索条件的情况下,索引带来的性能提升远比它所占据的磁盘空间要重要得多。 那么索引是如何实现的呢?大多数DB厂商实现索引都是基于一种数据结构――B树。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表。B树的定义是这样的:一棵m(m>=3)阶的B树是满足下列条件的m叉树: 1、每个结点包括如下作用域(j, p0, k1, p1, k2, p2, ki, pi) 其中j是关键字个数,p是孩子指针 2、所有叶子结点在同一层上,层数等于树高h 3、每个非根结点包含的关键字个数满足[m/2-1]>

问题七:什么时候使用数据库的附加和分离?附加和分离的关系是什么? 使用数据库的附加:添加其他数据库时使用;

分离:不需要海个数据库时使用;

附加和分离的关系是:加载和卸载的关系。

问题八:请问SQL数据库分离与附加的作用和功能是什么?有哪位朋友可以告诉我? 一、可以切断数据库的使用 (比如当数据库日志很大占用了空间时,可以用分离数据库的方法来切断数据库,从而删除以前的数据库日志,来节省空间)

实践中碰到 数据库日志 很大(10G)占用了硬盘空间的情况处理:

方法:

1、停掉iis,然后分离数据库

2、修改数据库日志的名字

3、附加数据库,成功后可以删除数据库日志

二、可以在需要更换数据库物理存放地址时使用如果您数据库系统安装在系统盘(比如 C 盘),由于 C 盘容易受病毒侵害,您也许希望您的数据存放在非系统盘(比如 D 盘),要做的这点很简单,您并不需要重装数据库,只要把数据“分离”,然后将相关文件移动到 D 盘的某个目录,接着“附加”数据库即可。

SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上。分离数据库将从 SQL Server 删除数据库,但是保证在组成该数据库的数据和事务日志文件中的数据库完好无损。然后这些数据和事务日志文件可以用来将数据库附加到任何 SQL Server 实例上,这使数据库的使用状态与它分离时的状态完全相同。

应注意,只有“使用本数据库的连接”数为0时,该数据库才能分离。所以分离数据库时尽量断开所有对要分离数据库 *** 作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。

问题九:在mysql数据库中为字段添加索引,是什么意思,有什么好处,谢谢!! 字段添加索引的语句可以百度找 mysql 添加索引命令。

索引的好处在于可以讲指定列进行排序,提高检索的速度。

一个简单的例子:

某个列的数据是

id name

12 小李

10 小龙

5 小青

99 小红

id列创建索引后就会生成一个索引表

id inde订

5 3

10 2

12 1

99 4

当查询 where id =10的 时候,使用到索引表。由于10下面是15,不可能有大于10的数。所以不再进行扫描表 *** 作。返回第二条数据,对应回主表的第二行。

这样就提高了查询的速度,如果没添加索引;则扫描整张主表。

索引的类型,什么列需要加索引等相关信息的你还需百度查询一下,这里告诉你的是一些基本的概念。

查询语句:select 语句

三种能力:投影、选择、连接

投影:在一张二维表中根据所需要的条件选出所需要的列

选择:在二维表中根据所需的条件选择合适的行

连接:从一张或者多张表中获取所需要的行,并且把这个行结合在一起的查询

SQL语句大小写不敏感。

select语句是可以计算的

算术表达式和运算符优先级

举例:select ename,sal 12sal+100 from emp

计算出年薪+100块

NULL值是不可用,且未分配的,未知并且不适用的值,可以当成是保留值

AS其实可以省略

例如:select ename as name,sal salary from emp;

查询出的字段会自动换成别名

例子:select ename "Name",sal12 "Annual Salary" from emp;

级联 *** 作是将列或字符串和其他列串联,由两条竖线(||)表示

select ename,job,ename || job as "Employees" from emp;

可以看出Employees就将ENAME和JOB进行结合的一个 *** 作

在select句子中适用DISTINCT 关键字消除重复行

select distinct deptnp from emp;

限制选择的行:

where关键字

如果where后面查的数据是字符串类型或者日期类型的要加''号

#######比较条件

举几个例子:

select ename,job,sal,deptno from emp where sal between 5000 and 10000;

这个是包含了5000和10000的

in的表达:

select empno,ename,mgr,deptno from emp where mgr in (7788,7782,7000);

只要mgr有括号里面的值都显示出来。

通配符:%通配的是多个字符,_通配的是一个字符

IS NULL是查询某个字段为空的显示出来

and、or、not

例子:

查询sal>=2000和job的内容是包括MAN字符串的,当同时满足两个条件时候才返回结果。

and就是两边同时为真,or的话是有一边为真就行,not就是不等于

ASC 升序,默认升序

DESC 降序

例子:

将deptno中进行升序排列,排列出来后,在将sal进行降序排列。

单行函数:就是对单行数据进行处理的函数,只针对这一条数据得出一个结果

函数工作的过程

ROUND(45926,2)是将45926这个数字的小数点后两位进行四舍五入 *** 作得到4593

TRUNC(45926,2) 是将45926这个数字的小数点后两位后面的进行丢掉。

返回当前系统日期

经常是不同类型之间的转换

TO_CHAR就是将日期型数字型转换成字符型

例子:

数字型的转换

把字符转换成数字:

把字符转换成日期:

什么是分组函数?

另外的名字叫多行函数,针对于多行数据进行一个汇总处理的一类函数,最后会得到一个汇总的结果。

例子:

其实就是对一系列数据找最大值

基本格式:select group_function(column), from table [where condition];

首先对一个数据进行分类汇总把每一组的数据单独的拿出来。就是对每一列数据的相同数据进行一个分组,然后在将分组后的结果再去执行select后面跟的一个分组函数的 *** 作。

例子:

那下面这样的怎么 *** 作呢?

其实就是对分组以后的结果再次进行一个限制筛选

where和Having的区别?

where是针对于整体的一个查询结果

Having是针对于分组后的查询结果的一个条件限制,它是不能单独存在的,它只能够在group by后面

下面是它的表达式:

显示部门的最大平均薪水是多少

select max(avg(sal))

是这样的一个嵌套

当我们查的数据存在于多个表的时候就需要多表查询

下面是用到的表

一个是EMP的职员表、一个是DEPT的部分表

表连接的三种方式:

从总类上来看:自连接、等值连接、外连接(又可以分为三类:左连接、右连接、全连接)

自连接:一个表自己与自己建立连接成为自连接或自身连接。

在查询的时候多表,这两张表是同一张表,所以在查询前我们需要对这个表进行一个别名的重命名。

举例:查询出员工编号、名字及其经理名字

MGR对应的是经理的ID号,这个对应的就是另一张经理表中的名字

表示比较连接列的值显示出最终的一个结果,其查询结果中列出被连接表中的所有列,包括其中的重复列。

查询员工的姓名 工作 部门号 部门名称

左连接就是返回左边的匹配行,不考虑右边的表是否有相应的行

(+)的意思就是dept是个匹配表,左边是一个基础表,基础表优先,如果右边这个表找不到对应的值去匹配,会自动填空

右连接就是返回右边的匹配行,不考虑左边的表是否有相应的行,如果没有会自动填空

左表右表都不做限制,所有的记录都显示,不足的地方用null填充

FULL JOIN表示emp和dept做一个全连接

ON表示触发条件 。

2017-03-09

1查询三要素:

1)查那张表的数据?class

2)查那些列?sname,salary,company

3)要查哪一行?where条件

mysql>select sname,salary,company fromclass where id=1

2暴力查询,利用代表所有列:

3取出class中所有人的姓名和工资;

mysql>select sname,salary from class;

3查id大于1的所有列

mysql>select from class where id>1;

4取部分行部分列:取id小于等于2的姓名和饭补

mysql>select sname,fanbu from classwhere id<=2;

5建表的过程就是一个声明字段(声明列)的过程,列类型的存储范围和占据字节的关系

1)数值型

   整型:一般而言,占N字节则:0-2^8N-1或2^(8N-1)~+2^(8N-1)-1

tinyint:1个字节 -128~+127 或0~255;

smallint:2个字节 -32768~+32767或0-65535

mediumint:3个字节

int:4个字节

bigint:8个字节

声明tinyint怎么样让他0-255怎么样让他-128~=127:

整型声明的时候的参数问题:

<1>建表:

mysql>create table class1(

    ->sname varchar(10) notnull default ‘’,

    ->age tinyint not nulldefault 0

    ->)engine myisamcharset utf8;

<2>查看表结构

mysql>desc class1;

<3>插入数据,age到底是-128~+127还是0-255:

mysql>insert into class1

    ->(sname,age)

    ->values

    ->(‘刘备’,128);

报错:超出范围所以说明范围不是0-255,再测试127成功

经过测试,默认范围是-128~+127;

故:int系列不加说明默认有符号

<4>通过声明int类型的符号,来走无符号的0-255范围,给class1加一个列

mysql>alert table class1 add chengji tinyint unsigned not nulldefault 0;

插入数据范围测试,故再列类型后加unsigned可以范围切换成正数范围

<5>分析列类型的m参数,m参数必须和zerofill配合才有意义,给class1增加一个学号列(学号一般不为负,而且位数相同如000013,012345不够位数也会用0填充;

mysql>alter table class1 add xuehao smallint(5) zerofill not nulldefault 0;

查看表结构

往表中插入学号数字

插入的是345 但是会自动补齐0,这就是先用m规定了学号列的长度,然后不足长度部分用0不足是zerofill的定义实现的。

查看表结构发现,只要声明了是zerofill那么就属于unsigned类型了

以上就是关于MySQL的GIS、GEO入门笔记全部的内容,包括:MySQL的GIS、GEO入门笔记、初学数据库应该从何学起、PLSQL数据库权限基础笔记(GRANT,REVOKE)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10199249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存