MySQL數(shù)據(jù)庫基礎知識
MySQL自帶4個數(shù)據(jù)庫
information_schema:存儲表信息,列信息等等,用戶信息芽偏,簡單理解為數(shù)據(jù)目錄信息, 元數(shù)據(jù)
mysql:mysql數(shù)據(jù)庫的核心數(shù)據(jù)庫
performance_schema:數(shù)據(jù)庫性能相關的信息
sys:數(shù)據(jù)都來自performance_schema,給DBA人員看更加方便
基礎操作語句
查看所有的數(shù)據(jù)庫????show databases;
創(chuàng)建數(shù)據(jù)庫????create database 數(shù)據(jù)庫名;
刪除數(shù)據(jù)庫????drop database 數(shù)據(jù)庫名;
使用數(shù)據(jù)庫????use 數(shù)據(jù)庫名;
查看當前使用的數(shù)據(jù)庫:????select database();????????·默認沒有使用數(shù)據(jù)庫,顯示null
退出mysql:????exit 或者 quit
開發(fā)時,選擇utf8編碼,mysql配置就是utf8
查看編碼相關信息:????show variables like '%character%';
創(chuàng)建表基本語法:
create table 表名(
????列1 類型 [約束],
????列2 類型 [約束],
????...
????列n 類型 [約束]
);
表的命名:
組成:
mysql:字母,_,數(shù)字? ? ? ? ? oracle:字母,_,$,#,數(shù)字
長度不能超過32個字母
一般都是小寫,多個單詞之間用_分隔
建議:系統(tǒng)關系字大寫, 大小寫都不會報錯
不能使用系統(tǒng)關鍵字
數(shù)據(jù)類型:
數(shù)值型
整型:
tinyint(1字節(jié)),smallint(2字節(jié)),mediumint(3字節(jié)),int(4字節(jié)),bigint(8字節(jié))
主要使用int
小數(shù):
浮點型:存儲的是近似值
float(4字節(jié)):
double(8字節(jié)):
eg: float(10,2):根據(jù)需要制定有效位數(shù)是10,小數(shù)位2位
定點型:
decimal:精確存儲,內部用字符串來存儲的
eg:decimal(10,3): 有效位10位,小數(shù)位3位,實際占用空間有效位+2
文本型
char:定長的文本型
eg: name char(20):開辟20個字節(jié),如果沒有存儲滿,用空格填滿
varchar:變成的文本型
eg: name varchar(20):最多可以存儲20個字節(jié),實際開辟空間由內容大小決定
char效率更高,如果值的長度是固定的,可以選擇char
varchar:節(jié)約空間,如果值的長度不一致,可以選擇varchar,使用的比較多
日期型
date:存儲年月日? 2019-01-21
time:存儲時分秒? 22:48:30
year:存儲年 ? 2019
datetime:存儲年月日時分秒 2019-01-21 22:48:30 1000~9999范圍 重點
timestamp:存儲年月日時分秒? 1970~2038范圍, 如果不指定值,值會取當前時間
大數(shù)據(jù)量類型:
blob:可以存儲大數(shù)據(jù)量的字節(jié)數(shù)據(jù)
text:可以存儲大數(shù)據(jù)量的文本數(shù)據(jù)
比如存儲圖形信息:可以選擇blob,但是也可以把圖片存儲到本地,把圖片路徑存到數(shù)據(jù)庫
查看當前數(shù)據(jù)庫下有哪些表:????show tables;
查看某個表的結構:????desc 表名;
查看表的創(chuàng)建語句:????show create table 表名;????show create table 表名 \G?
刪除表:????drop table 表名;
約束:
非空約束: not null????????????空:沒有給值,任意的,未知的
唯一約束: unique ? ? ? ? ? ? 如果有值,不能重復????????學號可以使用唯一約束
默認約束:default,? default 值????????添加時,如果沒有賦值,則取默認值
主鍵約束:primary key ?? 保證行的唯一性
自動增長:auto_increment
適合主鍵,數(shù)值型憾赁,默認從1開始,每增加一行,值增加1
如果希望從n開始 create table 表名 (...) auto_increment=n;
導入腳本
source sql文件路徑
source命令執(zhí)行腳本,會按照從上到下的順序依次執(zhí)行
數(shù)據(jù)庫設計三大范式:
設計關系數(shù)據(jù)庫時呜袁,遵從不同的規(guī)范要求,設計出合理的關系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式躏筏,后面的范式基于前面范式,越高的范式數(shù)據(jù)庫冗余越小专肪。
目前關系數(shù)據(jù)庫有六種范式:第一范式(1NF)刹勃、第二范式(2NF)、第三范式(3NF)嚎尤、巴斯-科德范式(BCNF)荔仁、第四范式(4NF)和第五范式(5NF,又稱完美范式)芽死。
第一范式(1NF):
字段不可再分乏梁,比如:收貨人地址拆分成????省,市,區(qū)....
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 電話聯(lián)系人????姓,? 名
第二范式(2NF):
表中的字段不能部分依賴主鍵,只要不用聯(lián)合主鍵, 只用一個列作為主鍵即可
通常,添加一個非業(yè)務字段作為主鍵
基于第一范式
第三范式(3NF):
表中的字段不能傳遞依賴
b字段依賴主鍵,? c字段依賴b ,這就是一種傳遞依賴
單獨設計一張和b有關的表,c放到b對應的表中
減少字段的冗余.
基于第二范式
外鍵約束:foreign key
mysql中InnoDB引擎支持外鍵約束
當兩個表有關系的時候,一個表的列a引用另外一個表(也可能當前表)的列b(主鍵列,唯一列)
可以給列a添加外鍵約束
被引用的表:父表,
引用的表:子表
被引用的列只能是主鍵列或唯一列
引用的列值只能取被引用列存在的值或空
on update 選擇,on delete 選擇:父表發(fā)生更新操作或者刪除操作時,子表如何做
選擇:
restrict:父表刪除修改被引用列值時,如果子表有關聯(lián)的數(shù)據(jù),不能完成操作,報錯,默認參數(shù)
cascade:級聯(lián)刪除或級聯(lián)修改
set null:當父表數(shù)據(jù)刪除或者修改時,對應子表數(shù)據(jù)置空
no action:在innoDB引擎下,和restrict效果一樣
父表數(shù)據(jù)刪除時,對應的外鍵值置null????修改時,級聯(lián)修改
單獨添加外鍵:表修改語句 ? ?
alter table 表名 add constraint foreign key(列名) references 被關聯(lián)的表(被關聯(lián)的列);