测试数据库的编码:
show variables like 'character_set%';
引擎:
mysql中的数据用不同的技术存储在文件或(内存中),这些技术中的每一种技术都使用不同的存储机制,索引技巧,
锁定水平并且最终提供广泛的不同的功能和能力,通过选择不同的技术,能够获得额外的速度或者功能,
从而改善你的应用的整体功能
总结:
同样的数据,同样的表,指定不同的存储引擎,代表了数据存储的时候的不同方式
mysql
支持很多不同的引擎,来帮助我们适应各种场景来进行数据操作,
对速度存取要求高,稳定性要求没有那么高
对查询速度要求高,但是对修改和删除的效率要求没有那么高
对建立表与表之间的联系
支持引擎的种类:
mysql5.6支持支持的存储引擎包括innoDB,MySAM,MEMORY,CSV,BLACKHLE,FESERATED,MRG_MYISAM,ARCHIVE,
PERFORMANCE_SCHEMA,其中NBD和innoDB提供事务安全表,其他存储引擎都是非事务安全表
各种引擎的特性:
并发性:某些引用,程序比其他应用程序具有很多的颗粒锁定要求(如行级锁定).
行级锁:保证数据的安全性(更好的支持了在并发情况中数据修改的安全性)
表级锁:
事务支持:并非所有的引用程序都需要事务的应用程序来说,有着定义良好的需求,如ACID
让多条语句变成一个整体,要成功都成功,失败都失败,name所有的状态都要回到事物之
前
外键:在a表中,有一个字段,能对应到b表中的数据,name a表中的这一个字段就是一
个外键(外键就是突出了表与表之间联系)
引用完整性:通过DDL定义的外键,服务器需要强制保持关联数据的引用完整性
索引支持:
不同的应用程序倾向于采用不同的索引策略,每种引擎通常有自己的编制索引方法,但
某些索引方法对几乎所有的存储引擎来说是共同的
可以理解为书的目录,帮助我们加快查询速度
物理存储:他包括各种各样的实行,,从表和索引的总的页大小,到存储数据所需的格式,到物理磁盘
coche:
把一部分数据放到内存中
性能的帮助:包括针对并行操作的多I/O线程,线程并发性,数据库检查点,成批插入处理等
InnoDB MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,
它具备提交、回滚以及崩溃恢复的功能以保护用户数据。
InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。
InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。
为了保证数据的完整性,InnoDB 还支持外键约束。 MyISAM MyISAM既不支持事务、也不支持外键、其优势是访问速度快,
但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。 Memory 在内存中存储所有数据,应用于对非关键数据由快速查找的场景。
Memory类型的表访问数据非常快,因为它的数据是存放在内存中的,
并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失 BLACKHOLE 黑洞存储引擎,类似于 Unix 的 /dev/null,Archive 只接收但却并不保存数据。
对这种引擎的表的查询常常返回一个空集。这种表可以应用于 DML 语句需要发送到从服务器,
但主服务器并不会保留这种数据的备份的主从配置中。 CSV 它的表真的是以逗号分隔的文本文件。CSV 表允许你以 CSV 格式导入导出数据,
以相同的读和写的格式和脚本和应用交互数据。由于 CSV 表没有索引,
你最好是在普通操作中将数据放在 InnoDB 表里,只有在导入或导出阶段使用一下 CSV 表。 NDB (又名 NDBCLUSTER)——这种集群数据引擎尤其适合于需要最高程度的正常运行时间和可用性的应用。
注意:NDB 存储引擎在标准 MySql 5.6 版本里并不被支持。目前能够支持 MySql 集群的版本有:基于 MySql 5.1 的 MySQL Cluster NDB 7.1;
基于 MySql 5.5 的 MySQL Cluster NDB 7.2;基于 MySql 5.6 的 MySQL Cluster NDB 7.3。
同样基于 MySql 5.6 的 MySQL Cluster NDB 7.4 目前正处于研发阶段。 Merge 允许 MySql DBA 或开发者将一系列相同的 MyISAM 表进行分组,
并把它们作为一个对象进行引用。适用于超大规模数据场景,如数据仓库。 Federated 提供了从多个物理机上联接不同的 MySql 服务器来创建一个逻辑数据库的能力。
适用于分布式或者数据市场的场景。 Example 这种存储引擎用以保存阐明如何开始写新的存储引擎的 MySql 源码的例子。
它主要针对于有兴趣的开发人员。这种存储引擎就是一个啥事也不做的 "存根"。
你可以使用这种引擎创建表,但是你无法向其保存任何数据,也无法从它们检索任何索引。 各种搜索引擎介绍
InnoDB
用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
MyISAM
如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。
Memory
将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。
数据库简单的操作:
mysql的账号操作
#进入mysql客户端 $mysql mysql> select user(); #查看当前用户 mysql> exit # 也可以用q quit退出 # 默认用户登陆之后并没有实际操作的权限 # 需要使用管理员root用户登陆 $ mysql -uroot -p # mysql5.6默认是没有密码的 #遇到password直接按回车键 mysql> set password = password('root'); # 给当前数据库设置密码 # 创建账号 mysql> create user 'eva'@'192.168.10.%' IDENTIFIED BY '123';# 指示网段 mysql> create user 'eva'@'192.168.10.5' # 指示某机器可以连接 mysql> create user 'eva'@'%' #指示所有机器都可以连接 mysql> show grants for 'eva'@'192.168.10.5';查看某个用户的权限 # 远程登陆 $ mysql -uroot -p123 -h 192.168.10.3 # 给账号授权 mysql> grant all on *.* to 'eva'@'%'; mysql> flush privileges; # 刷新使授权立即生效 # 创建账号并授权 mysql> grant all on *.* to 'eva'@'%' identified by '123'
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
1. 操作文件夹(库) 增:create database db1 charset utf8; 查:show databases; 改:alter database db1 charset latin1; 删除: drop database db1; 2. 操作文件(表) 先切换到文件夹下:use db1 增:create table t1(id int,name char); 查:show tables; 改:alter table t1 modify name char(3); alter table t1 change name name1 char(2); 删:drop table t1; 3. 操作文件中的内容(记录) 增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3'); 查:select * from t1; 改:update t1 set name='sb' where id=2; 删:delete from t1 where id=1; 清空表: delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。 truncate table t1;数据量大,删除速度比上一条快,且直接从零开始, *auto_increment 表示:自增 *primary key 表示:约束(不能重复且不能为空);加速查找
*desc 表名 查看表的结构
*use 库名 切换到某个库下
查看当前默认数据库的引擎
查看当前的默认存储引擎: mysql> show variables like "default_storage_engine"; 查询当前数据库支持的存储引擎 mysql> show engines G;
在建表时指定
mysql> create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM; mysql> create table country(id int(4),cname varchar(50)) ENGINE=InnoDB; 也可以使用alter table语句,修改一个已经存在的表的存储引擎。 mysql> alter table ai engine = innodb;
在配置文件中指定
#my.ini文件 [mysqld] default-storage-engine=INNODB