字符編碼與組態檔
# 由于5.6版本編碼不統一 會造成亂碼 我們需要把它統一修改成》:utf8
1.MySQL里的my-default.ini是 windows下MySQL默認的組態檔
2.拷貝檔案并重新命名為my.ini
3.添加字符編碼相關的配置
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
ps:由于組態檔涉及到了mysql的配置修改 需要重啟服務端才可以生效
相關配置:

直接mysql登錄:

查看修改之后的配置:

存盤引擎
# 存盤引擎就是針對相同的資料采取不同的策略
1.MYISAM :
MySQL5.5之前版本默認的存盤引擎
特點是:存取資料的速度快 但是功能較少 安全性較低
2:INNODB:
MySQL5.5之后版本默認的存盤引擎
特點是:存取資料的速度沒有myisam快,但是支持事務,行鎖,外鍵等諸多功能 安全性較高
3:memory:
基于記憶體的存盤引擎,存取資料極快,但是斷電立刻丟失資料
4:blackhole:
黑洞,任何寫進去的資料都會立刻丟失 類似于垃圾站
ps:MySQL對于大小寫不敏感 可以任意寫
引擎區別
# 先創建表 分別用不同的引擎
create table t1(id int) engine=myisam
create table t2(id int) engine=innodb
create table t3(id int) engine=memory
create table t4(id int) engine=blackhole
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
------------
myisam .frm 表結構
.MYD 表資料
.MYI 表索引(加快資料查詢)
innodb .frm 表結構
.ibd 表資料,表索引(加快資料查詢)
memory .frm 表結構 (重新啟動MySQLt3的資料就沒有了)
blackhole .frm 表結構

創建表的完整語法
create table 表名(
欄位名1 欄位型別(數字) 約束條件,
欄位名2 欄位型別(數字) 約束條件,
欄位名3 欄位型別(數字) 約束條件
)engine=存盤引擎
1.欄位名和欄位型別是必須的(至少寫一個)
2.數字約束條件是可選的
3.約束條件可以寫多個 空格隔開即可
4.最后一個欄位的結尾千萬不能加逗號
數字的含義
char(4) 括號里的數字是用來限制資料的長度的
int(4)整型后面的數字是用來展示資料的長度的
create table s1(id int(3) zerofill);
insert into s1 values(1),(12);
總結:涉及到整型欄位的定義 型別后面不需要加括號加數字 除非有固定業務需求

欄位型別
整型
1.tinyint 1bytes
2.smallint 2bytes
3.int 4bytes
4.bigint 8bytes
1.驗證整型是否自帶負號
create table a1(id tinyint);
inster into a1 values(-129),(256);
上述所有的整型型別默認都會自帶負號
2.自定義移除符號
create table a2(id tinyint unsigned)
insert into a2 values(-129),(256);
usigned 是約束條件之一 意思是不需要負號
ps:由于給MySQL配置了屬性sql_mode=STRICT_TRANS_TABLES 以上方法超出范圍都無法執行
浮點型
1.float
2.double
3.decimal
# 三者都可以存盤浮點型資料 但是各自的精確度不一致
float(300,90) # 第一個數表示總共有多少位數 第二位數表示小數占多少位
double(300,90)
decimal(300,90)
驗證精確度問題
create table a3(id float(255,30));
create table a4(id double(255,30));
create table a5(id decimal(255,30));
insert into a3 values(1.11111111111);
insert into a4 values(1.11111111111);
insert into a5 values(1.11111111111);
總結:float<double<decimal
一般使用float 就可以了 ,如果想要輸入什么得到什么,可以使用字串
驗證結果:

字符型別
char 定長
char(4): 最大只能存盤四個字符 如果超出范圍直接報錯
如果不超出范圍 則用空格填充至四個字符
varchar 可變長字串
varchar(4):最大只能存盤四個字符 如果超出范圍直接報錯
如果不超出范圍 則有幾位就存幾位
驗證兩者的區別;
create table d1(id int,name char(4));
create table d2(id int,name varchar(4));
結果如下圖:
1.超出范圍都會報錯!
2.驗證定長和變長特性
char_length() # 統計欄位資料的長度
# 默認情況下char在存盤的時候會自動將沒有滿足固定位數的空格填充,在讀取的時候又會將空格移除 如果想取消該機制 需要sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
這個命令是替換不是新增
char 優點是整存整取 速度快 , 缺點是浪費存盤空間
varchar 節省存盤空間 存取速度要慢于char
總結: 知道具體資料長度的時候用char、不知道具體資料長度的時候用varchar
兩者使用頻率都很高 現在默認是varchar

列舉與集合
列舉用于多選一:
create table z1(id int,name varchar(32),gender enum('male','female'));
insert into z1 values(1,'summer','female')
# gender引數只能選擇括號內的一個 ,選擇其他的會報錯
集合用于多選多(包含多選一)
create table z2(id int,name varchar(32),hobby set('read','rap','dance','run'));
insert into z2 values(1,'summer','read,dance,run')


日期型別
date 年月日
datetime 年月日時分秒
time 時分秒
year 年份
create table w1(id int,name varchar(32),birth date,join_time year);
insert into w1 values(1,'summer','2004-6-19','2022');

欄位約束條件
1.unsigend 無負號 id int unsigend
2.zerofill 零填充 id int zerofill
3.not null 非空 name varchar(32) not null
4.default 默認值 name varchar(32) default 'summer'
5.unique 唯一值 id int unique 單列唯一
port int
unique(host,port)

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/501865.html
標籤:.NET技术
