转载请注明出处,谢谢。
非关系型数据库简介
Nosql=not only sql,不仅仅是sql。
关系型数据库使用的是SQL。
非关系型数据库不需要SQL。
如:mogondb、redis。
特点:存取快捷、结构简单。
非关系型数据库的数据是键值结构,key/value。
**注意:**Memcache的数据结构就是键值结构,它的数据存放于内存中;Memcache是一个缓存系统,没有存储数据到磁盘文件的功能,所以不是非关系型数据库。
NoSQL数据库的四大分类
键值(Key-Value)存储数据库
列存储数据库。
文档型数据库
图形(Graph)数据库
存储引擎
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
mysql是存在于多种引擎的一种数据库系统;对于操作的存储引擎来说使用不同的引擎,会影响
数据的文件存储方式以及是否支持事务处理功能。
Myisam:数据操作快速的一种引擎,不支持事务处理功能,支持全文检索。文件保存在数据库名称为目录名的目录中,有3个文件。
Innodb:功能强大的一种引擎,支持事务处理功能,不支持全文检索。文件保存在两个地方,一个是在数据库名称为目录名的目录中存放表结构文件,它的数据是保存在一个共有的文件中的。
Innodb
数据文件保存在一个共有的文件中
myisam
它的所有表结构、表数据、表索引文件都存放在数据库名为目录名的目录中。
建议使用innodb引擎。
字符集与校对集
字符集
(摘自百度百科)字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。
校对集
指字符集的排序规则。
字符集有4个级别
服务器级
在安装服务器时指定。
数据库级
创建数据库时指定,如果不指定,则使用服务器的默认字符集。
数据表级
创建数据表时指定,如果不指定,则使用数据库的默认字符集。
字段级
在创建数据表时定义字段属性时指定,如果不指定,则使用数据表的默认字符集。
注意
汉字在Utf8编码下占用3个字节存储空间
汉字在gbk编码下占用2个字节存储空间
不同的字符集存储时会占用不同的空间。
查看数据库支持的字符集
每一种字符集都有一个默认的校对集与之对应
校对集:它是数据比较的一种规则
可以使用下面的命令查看所有的校对集(或者加上筛选条件)
每一种校对集都从属于一种字符集。校对集里会指定一种做为默认的校对集。
其实我们在定义数据表和字段时,可以只给出校对集,而不指定字符集。这种情况下会自动把校对集从属的字符集做为其字符集。
校对集有三种方式
Ci:不区分大小写
Cs:区分大小写
Bin:使用二进制去进行比较
使用ci方式创建数据表
create table tb_ci ( str varchar(20) collate gbk_chinese_ci );
insert into tb_ci values ('A'), ('b'), ('C'), ('d');
查询
创建bin校对集的
create table tb_bin ( str varchar(20) collate gbk_bin );
insert into tb_bin values ('A'), ('b'), ('C'), ('d');
查询
它是按照ascii码值来进行的排序
结论:字符集实际上只在字段的定义时设置有价值,但是我们一般不习惯在定义字段时单独定义字符集,而通常是使用表的定义。
校对集对排序有影响
客户端乱码
直接用set name gbk;(代替:character_set_client, character_set_results, character_set_connection)