深刻淺出MySQL++數據庫開發、優化與管理維護+第2版+唐漢明 -- 存儲引擎 - 數據類型 - 字符集和校驗規則 -

create schema deepInMySql;
use deepInMySql;mysql

-- 查看當前默認存儲引擎
show variables like '%table_type%';sql

-- 查看當前數據庫支持的存儲引擎
show engines;
show variables like '%have%';數據庫

-- myisam緩存

-- 建立表 ai
create table ai(
i bigint(20) not null auto_increment,
primary key (i)
)engine = MyISAM default charset = gbk;服務器

create table country(
country_id smallint 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 = gbk;ui

-- 查看錶ddl
show create table ai;線程

-- 修改表的存儲引擎
alter table ai engine = innodb;orm

create table myisam_char(
name char(10)
) engine = MyISAM default charset = gbk;server

-- 插入記錄
insert into myisam_char values('abcde'), ('abcde '), (' abcde'), (' abcde ');內存

-- 查詢記錄
select name, length(name) from myisam_char;

-- innodb

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;

-- 查詢當前線程最後插入記錄使用的值
select last_insert_id();

insert into autoincre_demo values(4, '4');
insert into autoincre_demo values(5, '5'), (6, '6'), (7, '7');

create table autoincre_demo_myisam(
d1 smallint not null auto_increment,
d2 smallint not null,
name varchar(10),
index(d2,d1)
) engine = MyISAM;

insert into autoincre_demo_myisam(d2, name) values(2, '2'), (3, '3'), (4, '4'),(2, '2'), (3, '3'), (4, '4');

select * from autoincre_demo_myisam;

-- char 和 varchar
create table vc(
v varchar(4),
c char(4)
);

show create table vc;

insert into vc values('ab ', 'ab ');

select concat(v, '+'), concat(c, '+') from vc;

-- text 和 blob
create table t(
id varchar(100),
context text
);

insert into t values(1, repeat('haha', 100));
insert into t values(2, repeat('haha', 100));
insert into t values(3, repeat('haha', 100));

select * from t;

insert into t select * from t;
insert into t select * from t;

select * from t;

optimize table t;

delete from t where id = 1;

optimize table t;

-- 浮點數 和 定點數

create table t2(
f float(8,1)
);

desc t2;

insert t2 value(1.23456);

select * from t2;

insert t2 value(1.25456);

select * from t2;

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;

desc information_schema.CHARACTER_SETS;

-- 校對規則
show collation like '%gbk%';

select case when 'A' collate gbk_chinese_ci = 'a' collate gbk_chinese_ci then 1 else 0 end;

select case when 'A' collate gbk_bin = 'a' collate gbk_bin then 1 else 0 end;

select case when 'A' collate utf8_general_ci = 'a' collate utf8_general_ci then 1 else 0 end;

-- 字符集設置 -- 服務器級別 -- 數據庫級別 -- 表級別 -- 字段級別

-- 服務器字符集和校對規則
show variables like 'character_set_server';

show variables like 'collation_server';

-- 數據庫字符集和校對規則
show variables like 'character_set_database';

show variables like 'collation_database';

-- 表字符集和校對規則
show create table test;

-- 列字符集和校對規則

-- 鏈接字符集和校驗規則

-- 字符集的修改
-- alter database character set ***
-- alter table tablename character set ***
-- 這兩個命令都沒有更新已有記錄的字符集,而只是對新建立的表或記錄生效

-- 已有記錄的字符集調整,須要先將數據導出,通過適當的調整從新導入後纔可完成。
-- 模擬將latin1字符集的數據庫修改爲GBK字符集的數據庫的過程
-- 1. 導出表結構
-- mysqldump -uroot -p --default-character-set=gbk -d databasename > createtab.sql
-- 其中--default-character-set=gbk表示設置以什麼字符集鏈接,-d表示只導出表結構,不導出數據。
-- 2. 手動修改createtab.sql 中表結構定義中的字符集爲新的字符集。
-- 3. 確保記錄再也不更新,導出全部記錄
-- mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename > data.sql
-- --quick 該選項用於轉儲大的表。它強制mysqldump從服務器一次一行地檢索表中的行而不是檢索全部行,並在輸出前將它緩存到內存中。
-- --extended-insert 使用包括幾個VALUES列表的多行INSERT語法。這樣是轉儲文件更小,重載文件時能夠加速插入。
-- --no-create-info 不導出每一個轉儲表的CREATE TABLE語句。
-- --default-character-set=latin1 按照原有的字符集導出數據,這樣導出的文件中,全部中文都是可見的,不會保存成亂碼。
-- 4. 打開data.sql, 將SET NAMES latin1 修改爲 SET NAMES gbk。
-- 5. 使用新的字符集建立新的數據庫。
-- create dateabase databasename default charset gbk;
-- create database deepInMySql2 default charset gbk;
-- 6. 建立表,執行createtab.sql
-- mysql -uroot -p databasename < createtab.sql
-- mysql -uroot -p deepInMySql2 < createtab.sql
-- 7. 導入數據,執行data.sql
-- mysql -uroot -p databasename < data.sql
-- mysql -uroot -p deepInMySql2 < data.sql

 

-- 第9章 

相關文章
相關標籤/搜索