MySQLのストレージエンジン、データ型と文字セット

テーブル型(ストレージエンジン)選択

MyISAMテーブル、InnoDBは、BDB、MERGE、実施例、NDB、クラスタ、ARCHIVE、CSV、BLACKHOLE、FEDERATEDとInnoDBテーブルとBDBは、セキュリティテーブルを提供し、他のものを含むMySQLのストレージエンジンのサポートは、他のストレージエンジンは、非トランザクションセーフテーブルです。

現在のデフォルトのストレージエンジンを見ます

show variables like 'table_type';
SHOW ENGINES;

画像-20200215185337576

あなたが作成すると、テーブルは、テーブルには、キーワードエンジンを追加することによって、新しいストレージエンジンを設定することができます

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

画像-20200215201434381

適切なストレージエンジンを選択

画像-20200215202855775

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;

画像-20200215210634744

声明力が自動拡張列、1から始まるデフォルトの初期値を設定します。

あなたは、1つ以上のレコードを、そして成長の柱の自動復帰が使用する最初のレコードであるが挿入されている場合LAST_INSERT_ID()は、最後に使用した挿入されたレコードのスレッドの現在の値を照会するために使用することができます。

画像-20200215210723014

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

画像-20200215211825305

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;

image-20200215213610423

3.ストレージ

image-20200215205124523

データの種類

CHAR和VARCHAR

image-20200215214005502

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

image-20200215224701226

CHARは固定長であるため、処理速度がはるかに速くよりVARCHARであるが、欠点は、収納スペースの無駄です

image-20200215225035876

TEXTとBLOB

2つの主な違いは、写真などのバイナリ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;

image-20200215234628415

あなたは、クエリ「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;

image-20200216000022563

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

image-20200216000405273

image-20200216000521039

Date型の選択

image-20200215235521850

文字セット

image-20200216120753726

show character set;

image-20200216122151309

現在のキャラクタセットおよび照合サーバを照会します。

show variables like 'character_set_server';

image-20200216121209691

新しい文字セットと新しいデータベースを作成します。

create database databasename default charset gbk;

おすすめ

転載: www.cnblogs.com/zhichun/p/12316352.html
おすすめ