一.  BloB和Text 1. 合成索引 合成索引可以提高大文本字段BLOB和Text的查询性能, 合成索引是在表中增加一个字段存放散列值,这种技术只能用于精确匹配的查询,可以使用md5()或sha1,crc23() 来生成散列值, 数值型散列值可以提高存储效率 .下面演示下 -- hash_value字段用来存储散列值 ),context BLOB, hash_value )) -- 插入数据 存放MD5散列值 , REPEAT(),MD5(context)); , REPEAT(),MD5…
一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定长度,所以字的处理速度比varchar快,但也浪费存储空间,随着mysql 的不断升级,varchar数据类型的性能也在不断改进提高,varchar的字节是L+1字节,1字节是用来记录其长度的字节. char长度可选范围在0-255之间,也就是char最大能存储255个字符,varchar的长度范围为0-65…
字符集是一套文字符号及其编码,比较规则的集合.第一个字符集是ascll(american standard code for information interchange).  1.  选择合适的字符集 对于数据库来说,字符集很重要,因为数据库存储的数据大部分是各种文字,字符集对数据库的存储,处理性能,以及日后系统的移植,推广都有会影响 如何选择呢? UTF-8: 如果应用要处理各种各样的文字,或将发布使用不同语言的国家或地区,就应该选择 Unicode字符集,对于mysql 目前就是UTF-…
一. memory存储引擎 memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.   该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引,但服务关闭,表中的数据就会丢失掉. -- 下面创建一个memory表,并从city表获得记录 CREATE TABLE tab_memory ENGINE=MEMORY SELECT city_id,country_id FROM city GROUP BY city_id -- 给momory 表…
一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在于函数必须有返回值,存储过程的参数可以使用in,out ,inout类型,而函数参数只能是in类型. 创建需要create routine 权限, 修改删除需要alter routine权限,执行需要execute权限. 1.1 创建存储过程,调用,删除 -- 创建 DELIMITER $$ CRE…
一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字节. myisam和innodb引擎的表默认是btree索引,支持前缀索引,前缀索引长度跟存储引擎相关,对于myisam引擎 ,长度可达1000字节长,对于innodb 长度可达767字节,在使用多字节字符集的列指定前缀长度时要考虑. 支持全文索引(fulltext),只有myisam引擎支持,只限…
一. 表的存储引擎 1. 概述 插件式存储引擎是mysql数据库最重要的特性之一, 用户可以根据应用的需要选择如何存储和索引数据,是否使用事务等.在mysql 5.0里支持的引擎包括: MyISAM,InnoDB,BDB,Memory,Merge,Example,NDB Cluster, Archive,CSV, BlackHole, Federated等.其中InnoDB和BDB提供事务安全表,其它存储都是非事务安全表. 2. 默认情况下,创建表不指定表的存储引擎,新表是默认的存储引擎,如需要…
在安装完数据库后,不管是windows 还是linux平台,  mysql的sql命令都大同小异,相关命令都是相同的,每个命令结束后 都以  ;  结尾, 注意在windows平台中表名是不区分大小写的,在linux中是区分的. 例如tl1 与TL1在linux中是区分的. 为了一致所有的数据库名,表名,列名都采用小写.为了方便简单使用了sqllog客户端工具学习. 在安装完数据库后会出现的几个系统数据库: Mysql 库: 该数据库存储了系统的用户权限信息 In_formation_schem…
一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql model 常用来解决下面几类问题 (1) 通过设置sql mode, 可以完成不同严格程度的数据校验,有效地保障数据准备性. (2) 通过设置sql model 为ansi 模式,来保证大多数sql符合标准的sql语法,这样应用在不同数据库之间进行迁移时,则不需要对业务sql 进行较大的修改. (…
1.  隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 SELECT * FROM country WHERE country='德国'; 记录为空 SELECT * FROM country WHERE country='德国'; 记录为空 --  对country表进行加 写锁 LOCK TABLE country WRITE; -- 查询 整个表读…
一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使用事务控制和锁定语句来完成. 特点 myisam innodb memory merge ndb 事务安全 支持 锁机制 表锁 表锁 行锁(默认) 表锁 表锁 行锁 页锁(默认) 1.  lock table 和nolock table lock table是锁定当前线程的表.如果当前表被锁定,其它…
1. 光标的使用(游标) 在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close. 下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重要, 重点在于如何使用光标: SELECT city_id FROM test.city DELIMITER $$ CREATE PROCEDURE proc_demo_cursor() BEGIN -- 定义变量,获取光标中的数据 ; -- 声明光标 DECLARE cur_city CURSOR…
一. 概述: InnoDB存储引擎提供了具有提交,回滚,和崩溃恢复能力的事务安全,对比MYISAM 的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引.它的特点有如下: 1. 自动增长列特点 (AUTO_INCREMENT) InnoDB表的自动增长列可以手工插入,但插入的值如果是空或者是0,则实际插入的将是自动增长的值,下面演示下 CREATE TABLE autoincre_demo ( i SMALLINT NOT NULL AUTO_INCREMENT,…
MyISAM是mysql 默认存储引擎,它不支持事务,外键.但访问速度快,对事务完整性没有要求或者以select,insert 为主的应用基本上都可以使用这个引擎.每个MyISAM在磁盘上存储成3个文件,文件名都和表名相同,扩展分别是:.frm(存储表定义).MYD(MYdata 存储数据).MYI( MYIndex 存储索引)数据文件和索引文件可以放置在不同的目录,平均分布IO,获取更快速度. 1.  指定索引文件和数据文件的路径 在创建表的时候通过data directory和 index…
字符串函数 1.  concat (s1,s2,...sn) 连接里面的参数成一个字符串(注意上面写错了函数名称) SELECT CONCAT('ddd','CCC'); 2.  insert(str,x,y,instr) 将字符串str 从x位置开始,y个长度替换成instr ,,'sqlserver'); 3. lower(str)和upper(str) 将字符串转成小写和大写 SELECT LOWER('MYsql'),UPPER('mySql'); 4. left(str,x)和 rig…
Mysql 的数据类型 1. 对整数类型, Mysql 还支持类型名称后面的小括号内指定的显示宽度,例如int(5) 表示宽度小于5位时填满宽度,如果不显示指定宽度默认是int(11),一般配合zerofill使用下面来描述下 -- 创建表t1 有id1和id2字段,指定数值宽度分别为int 和int(5) )); -- 在里面都插入1 ,); -- 查询格式没有异常, 值是 id1=1, id2=1 SELECT * FROM t1; -- 分别修改id1 和id2字段类型, 加入 zerof…
触发器是与表有关的数据库对象,触发器只能是针对创建的永久表,而不能是临时表. 1.1 创建触发器 -- 语法: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt trigger_time:是触发器的触发时间,可以是 before或after, before是检查约束前触发,而after是检查约束后触发. trigger_event:是触发器的触发事件,可以是 i…
一. 什么是视图视图是一种虚拟存在的表,行和列数据来自,定义视图的查询中使用的表,并且是在使用视图时动态生成的.优势有: 简单: 使用视图的用户完全不需要关心后面对应的表的结构,关联条件,筛选条件. 安全:使用视图的用户只能访问他们被允许查询的结果集. 数据独立: 源表增加列对视图没有影响,源表修改列名,则通过修改视图 对应好源表的列名来解决,不会造成对访问者的影响. 1.1 创建视图的操作 -- 创建视图 CREATE OR REPLACE VIEW view_city AS SELECT *…
一.流程函数 -- 创建表来介绍 ,)); ,),(,), (,),(,),(,), (,NULL); SELECT * FROM salary 1. if(value,t,f)  超过2000的用high,否则用low ,'high','low') FROM salary 2. ifnull(value1,value2) 下面语句是把null值替换0 ) FROM salary; 3.case when ...   用来实现中高低薪的问题 SELECT CASE THEN 'low' THEN…
一. 数值函数 1.  abs(x) 返回x的绝对值 SELECT ABS(-0.8),ABS(0.8); 2.ceil(x) 返回大于x的最大整数 SELECT CEIL(-0.8),CEIL(0.8); 3.floor(x) 返回小于x的最大整数 SELECT FLOOR(-0.8),FLOOR(0.8); 4.mod(x,y) 返回x/y的模 ,),MOD(,),MOD() 5. rand() 返回0到1内的随机值 SELECT RAND(),RAND(); 还可是指定范围的随机数,如0~…
1. 算术运算符 2.比较运算符 注意NULL值不能用= 运算符 SELECT * FROM t WHERE c =NULL; -- 需要改成 SELECT * FROM t WHERE c IS NULL; -- 或改成 SELECT * FROM t WHERE c <=> NULL; --between 相当于 a>=min and a<=max的运算 -- 包含则返回1, 否则为0 SELECT 'abcdef' REGEXP 'ab', 'abedefg' REGEXP…
字符串类型 1.1 CHAR 和VARCHAR 类型 CHAR 列的长度固定为创建表时声明的长度,VARCHAR 列中的值为可变长字符串.在检索的时候,CHAR 列删除了尾部的空格,而VARCHAR 则保留这些空格.(在sqlserver里都是长度2) ), c )); INSERT INTO vc VALUES ('ab ', 'ab '); SELECT LENGTH(v),LENGTH(c) FROM vc; 1.2 BINARY 和VARBINARY 类型 BINARY 和VARBINA…
日期类型 如果要用来表示年月日,通常用DATE 来表示. 如果要用来表示年月日时分秒,通常用DATETIME 表示. 如果只用来表示时分秒,通常用TIME 来表示. TIMESTAMP表示格式 :YYYY-MM-DD HH:MM:SS. 如果只是表示年份,可以用YEAR 来表示.DATE,DATETIME,TIME是常用三种. CREATE TABLE t(d DATE,t TIME,dt DATETIME) -- 插入当前日期 INSERT INTO t VALUES(NOW(),NOW(),…
日期类型 如果要用来表示年月日,通常用DATE 来表示. 如果要用来表示年月日时分秒,通常用DATETIME 表示. 如果只用来表示时分秒,通常用TIME 来表示. TIMESTAMP表示格式 :YYYY-MM-DD HH:MM:SS. 如果只是表示年份,可以用YEAR 来表示.DATE,DATETIME,TIME是常用三种. CREATE TABLE t(d DATE,t TIME,dt DATETIME) -- 插入当前日期 INSERT INTO t VALUES(NOW(),NOW(),…
NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 大集群的出现 在成本方面,集群中应用关系数据库,许可费用是一笔很大的支出: 横向扩展和纵向扩展:关系数据库一般只能是纵向扩展,通过对单机服务器的性能换代增强而实现:而对于扩展到多个服务器, DBMS先天不足:(DBMS不是设计给集群使用的) 对数据的访问效率要求高 NoSQL数据库的分类 键值数据…
内容目录: 为什么使用NoSQL数据库? 键值数据库 文档数据库 列族数据库 图数据库 附思维导图 参考 NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 大集群的出现 在成本方面,集群中应用关系数据库,许可费用是一笔很大的支出: 横向扩展和纵向扩展:关系数据库一般只能是纵向扩展,通过对单机服务器的性能换代增强而实现:而对于扩展到多个服务器, D…
原文:[Xamarin开发 Android 系列 13] 应用打包部署 开始倒叙咯................ 先更新大宝部署吧,这个章节比较的Easy,童鞋们不用费脑筋.点解?从界面上填写几个参数,其他都是傻瓜式的[下一步],童鞋们是否喜欢.卤煮 反正很是受用. 我们开发好的程序,需要打包成 .apk,成为安卓的安装包.然后就可以通过下载的形式安装到 用户终端手机/平板/TV/Watch....... 发布程序 主要的还是将应用发布到 谷歌的官方商店 Google Play..再然后就是其…
(1.1)mysql 选择合适的数据类型 1.char与varchar [1.1]char 在内容未满定义长度时,做空格填充,且字符串末尾空格会被截断:超出定义长度也会被截断.  如:char(4)    'abcde' => 'abcd' [1.2]varchar 在内容未满定义长度时,内容是多少就占多少,以\0 为系统自动加上的默认结束符.额外多占一个字节. 2.浮点与定点(float/decimal) [2.1]浮点:当插入数值超过浮点定义时设置的精度时,会四舍五入截断. [2.2]定点:…
目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star.Fork.Watch三连哈,感谢你的…
系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列12 服务端API之文件转换>中详细介绍了7种文件转换的方法.发起源文件/模型转换后,转换过程可能成功也可能失败.那么在这种情况下就需要查询源文件/模型的转换状态.一共有三种方式可以知道转换是否成功. 第一种:调用文件转换接口 https://api.bimface.com/translate,该接口的返回结果中包含转换结果信息. 第二种:调用文件转换接口 https://api.bimface.com/tr…