Mysql存储引擎、数据类型和字符集

表类型(存储引擎)的选择

MySQL支持的存储引擎包括MyISAM、InnoDB、BDB、MERGE、EXAMPLE、NDB、Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等其中InnoDB和BDB提供事物安全表,其他存储引擎都是非事务安全表。

查看当前的默认存储引擎

show variables like 'table_type';
SHOW ENGINES;

在创建表的时候可以通过增加ENGINE关键字设置新建表的存储引擎

CREATE TABLE ai(
    i bigint(20) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(i)
)ENGINE=MyISAM DEFAULT CHARSET=gbk;

CREATE TABLE country(
    country_id samllint unsigned not null auto_increment,
    country varchar(30) not null,
    last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)engine=InnoDB DEFAULT CHARSET=gbk;

更改存储引擎

ALTER TABLE ai engine = INNODB
show create table ai 

运行结果如下,显示引擎变为InnoDB

CREATE TABLE `ai` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `bin` bit(1) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

选择合适的存储引擎

InnoDB

InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全处理。

1 自动增长列
CREATE table autoincre_demo
(i smallint not null auto_increment,
 name varchar(10), PRIMARY key(i)
)engine=innodb;

insert into autoincre_demo values(1,'1'),(0,'2'),(null,'3')

select * from autoincre_demo;

语句强制设置自动增长列的初始值,默认从1开始。

可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值,如果一次插入了多条记录,那么返回的是第一条记录使用的自动增长列。

select LAST_INSERT_ID();
INSERT into autoincre_demo(name) VALUES('5'),('6'),('7')

对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列。

2.外键约束
CREATE TABLE `country` (
  `country_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `country` varchar(50) NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
create table city(
    city_id smallint unsigned not null auto_increment,
    city varchar(50) not null,
    country_id smallint unsigned not null,
    last_update timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY key(city_id),
    key idx_fx_country_id(country_id),
    constraint 'fk_city_country' foreign key(country_id) references country(country_id) on DELETE restrict on update CASCADE
)engine=INNODB default charset=utf8;

3.存储方式

数据类型

CHAR和VARCHAR

CREATE TABLE vc1(v VARCHAR(4), c CHAR(4));
insert into vc1 VALUES('ab  ','ab   ');
select concat(v,'+'),concat(c,'+') from vc1;

由于CHAR是固定长度,处理速度比VARCHAR快的多,但是缺点是浪费储存空间

TEXT和BLOB

二者主要差别是BLOB能用来保存二进制数据,比如照片;而TEXT只能保存字符数据。

对表进行优化操作

insert into table1 VALUES(1,repeat('haha',20));
insert into table1 VALUES(2,repeat('haha',20));
insert into table1 VALUES(3,repeat('haha',10));

insert into table1 select * from table1;
insert into table1 select * from table1;

optimize table table1;

使用合成索引来提高文本字段的查询措施

create table table2(id varchar(100),context blob,hash_value varchar(40));
insert into table2 values(1,repeat('beijing',2),md5(context));
insert into table2 values(2,repeat('beijing1',2),md5(context));
insert into table2 values(3,repeat('beijing2',2),md5(context));
select * from table2;

如果要查询“beijing2 beijing2”的记录,可以通过散列值来查询。

select * from table2 where hash_value=md5(repeat('beijng1',2))

浮点数和定点数

浮点数一般用来表示含有小数部分的数值,当一个字段被定义为浮点数之后,如果插入数据的精度超过该列的实际精度,则插入值会被四舍五入到实际定义的精度值。

CREATE table table3(f float(8,1));
insert into table3 VALUES(1.23456);
SELECT * from table3;

CREATE table test(c1 float(10,2), c2 decimal(10,2));
insert into test values(131072.32,131072.32);
select * from test;

日期类型选择

字符集

show character set;

查询当前服务器的字符集和校对规则:

show variables like 'character_set_server';

使用新的字符集创建新的数据库:

create database databasename default charset gbk;

原文地址:https://www.cnblogs.com/zhichun/p/12316352.html

时间: 2024-10-28 10:25:29

Mysql存储引擎、数据类型和字符集的相关文章

MySQl学习-——Mysql体系结构与Mysql存储引擎

Mysql体系结构与Mysql存储引擎 Mysql体系结构 mysql体系结构图: 1)        Connectors:指的是不同语言中与SQL的交互 max_connections 就是整个MySQL实例的最大连接数限制 max_user_connections 是单个用户的最大连接数,这里未指明是哪个用户,是任意一个用户. 2)        Management Serveices & Utilities:系统管理和控制工具 备份和恢复的安全性,复制,集群,管理,配置,迁移和元数据

mysql 存储引擎对比

mysql 存储引擎:存储引擎也通常被称作"表类型" 修改原始hellodb.sql存储引擎为InnoDB  sed -i '[email protected][email protected][email protected]' /home/hellodb.sql 导入修改后的sql文件  mysql -uroot -p  mydb < /home/hellodb.sql 查看表引擎,状态  mysql> show engines;    mysql> show t

mysql存储引擎的种类与区别(innodb与myisam)

查找数据库的存数引擎: show engines show variables like '%storage_engine%' 更改数据库的引擎更改配置文件/etc/my.cnf 修改default-storage-engine=InnoDB(需要更改的存储引擎),然后重启数据库 service mysqld restart alter table engine=innodb 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存

mysql基础之-mysql存储引擎概述(八)

0x01 mysql 存储引擎:存储引擎也通常被称作“表类型” mysql> show engines;   --- 查看当前所有所支持的存储引擎 mysql> show table status 存储引擎格式: SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] mysql> show table status in hellodb where Name='class'\G Name 表名 Engi

MySQL存储引擎总结

前言 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式.有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差:而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

mysql 存储引擎,字段类型,索引介绍

一:常用的存储引擎:1,myisam:    我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:     1>tb_demo.frm,存储表定义:     2>tb_demo.MYD,存储数据:     3>tb_demo.MYI, 存储索引.   特点: 查询快,写入慢,支持表锁,支持符合全文索引    适合管理邮件,web服务器的日志数据,选择密集结构表的时候用,插入密集结构   表的时候用2,innodb     1>更新密集的表.InnoDB存储引擎

第三章 MySQL存储引擎介绍

1 MySQL存储引擎的概念 MySQL中数据用各种不同的技术存储在文件(或内存)中,这些技术都使用不同的存储机制.索引技巧,锁定水平,并且最终提供广泛的.不同的功能,通过选择不同的技术,能够获得额外的速度或功能,从而改善整体功能. SQLServer和Oracle都使用了一种存储引擎,而MySQL有多种存储引擎. 所谓的存储引擎,其实就是表的类型 2 查询MySQL中支持的存储引擎 show engines; show engines \g show variables like 'have%

MySQL存储引擎介绍

MySQL主要有两个层次组成:MySQL核心[MySQL服务器层].插件式存储引擎    MySQL处理机制无论在核心上如何被解析,最后如果真正实现跟文件系统上的文件交互时,一定要经过存储引擎来完成.真正把MySQL操作接收下来并提交给底层文件上对应的数据完成操作,并将结果返回给上层MySQL核心的是MySQL存储引擎,各存储引擎通过统一的API向MySQL服务器提供一个统一的数据存取.加锁等操作.        MySQL内部表状态信息查看,使用  show table status like

【超简单】MySQL存储引擎的选择与配置

[超简单]MySQL存储引擎的选择与配置 存储引擎简介 MySQL中的数据用各种不同的技术存储在文件(或内存)中.每一种技术都使用不同的存储机构,索引技巧,锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能.这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎. 下面就为大家介绍两种MySQL中比较常见的两种存储引擎:MyISAM和InnoDB MyISAM存储引擎 MyISAM存储引擎是MySQL关系数据库系统5.5版本之