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章