總結(jié)零散的 MySQL 基礎(chǔ)知識(shí)
點(diǎn)擊上方“Java專欄”,選擇“置頂或者星標(biāo)”
第一時(shí)間閱讀精彩文章!
點(diǎn)擊這段文字獲?。?/strong>5個(gè)可以寫(xiě)到簡(jiǎn)歷的項(xiàng)目實(shí)戰(zhàn)視頻教程(含源碼)
前言
在日常開(kāi)發(fā)中,一些不常用且又比較基礎(chǔ)的知識(shí),過(guò)了一段時(shí)間之后,總是容易忘記或者變得有點(diǎn)模棱兩可。本篇主要記錄一些關(guān)于MySQL數(shù)據(jù)庫(kù)比較基礎(chǔ)的知識(shí),以便日后快速查看。
SQL命令
SQL命令分可以分為四組:DDL、DML、DCL和TCL。四組中包含的命令分別如下
DDL
DDL是數(shù)據(jù)定義語(yǔ)言(Data Definition Language)的簡(jiǎn)稱,它處理數(shù)據(jù)庫(kù)schemas和描述數(shù)據(jù)應(yīng)如何駐留在數(shù)據(jù)庫(kù)中。
CREATE:創(chuàng)建數(shù)據(jù)庫(kù)及其對(duì)象(如表,索引,視圖,存儲(chǔ)過(guò)程,函數(shù)和觸發(fā)器)ALTER:改變現(xiàn)有數(shù)據(jù)庫(kù)的結(jié)構(gòu)DROP:從數(shù)據(jù)庫(kù)中刪除對(duì)象TRUNCATE:從表中刪除所有記錄,包括為記錄分配的所有空間都將被刪除COMMENT:添加注釋RENAME:重命名對(duì)象
# 建表
CREATE?TABLE sicimike (
??id int(4) primary key auto_increment COMMENT '主鍵ID',
??name varchar(10) unique,
??age int(3) default 0,
??identity_card varchar(18)
??# PRIMARY KEY (id) // 也可以通過(guò)這種方式設(shè)置主鍵
??# UNIQUE KEY (name) // 也可以通過(guò)這種方式設(shè)置唯一鍵
??# key/index (identity_card, col1...) // 也可以通過(guò)這種方式創(chuàng)建索引
) ENGINE = InnoDB;
# 設(shè)置主鍵
alter?table sicimike add primary key(id);
# 刪除主鍵
alter?table sicimike drop primary key;
# 設(shè)置唯一鍵
alter?table sicimike add unique key(column_name);
# 刪除唯一鍵
alter?table sicimike drop index column_name;
# 創(chuàng)建索引
alter?table sicimike add [unique/fulltext/spatial] index/key index_name (identity_card[(len)] [asc/desc])[using btree/hash]
create [unique/fulltext/spatial] index index_name on?sicimike(identity_card[(len)] [asc/desc])[using btree/hash]
example:alter table sicimike add index idx_na(name, age);
# 刪除索引
alter?table sicimike drop key/index identity_card;
drop?index index_name on?sicimike;
# 查看索引
show?index from sicimike;
# 查看列
desc?sicimike;
# 新增列
alter?table sicimike add column column_name varchar(30);
# 刪除列
alter?table sicimike drop column column_name;
# 修改列名
alter?table sicimike change column_name new_name varchar(30);
# 修改列屬性
alter?table sicimike modify column_name varchar(22);
# 查看建表信息
show?create table sicimike;
# 添加表注釋
alter?table sicimike comment '表注釋';
# 添加字段注釋
alter?table sicimike modify column column_name varchar(10) comment '姓名';DML
SELECT,INSERT,UPDATE,DELETE等,它用于存儲(chǔ),修改,檢索和刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。-- 查詢從第11條數(shù)據(jù)開(kāi)始的連續(xù)5條數(shù)據(jù)
select?* from?sicimike limit?10, 5group bygroup by)語(yǔ)句,不要求select返回的列,必須是分組的列或者是一個(gè)聚合函數(shù)。select查詢的列不是分組的列,也不是聚合函數(shù),則會(huì)返回該分組中第一條記錄的數(shù)據(jù)。對(duì)比下面兩條SQL語(yǔ)句,第二條SQL語(yǔ)句中,cname既不是分組的列,也不是以聚合函數(shù)的形式出現(xiàn)。所以在liming這個(gè)分組中,cname取的是第一條數(shù)據(jù)。mysql> select * from c;
+-----+-------+----------+
| CNO |?CNAME | CTEACHER |
+-----+-------+----------+
| 1 |?數(shù)學(xué) | liming |
| 2 |?語(yǔ)文 | liming |
| 3 |?歷史 | xueyou |
| 4 |?物理 | guorong |
| 5 |?化學(xué) | liming |
+-----+-------+----------+
5?rows in?set (0.00?sec)
mysql> select cteacher, count(cteacher), cname from c group by cteacher;
+----------+-----------------+-------+
| cteacher |?count(cteacher) | cname |
+----------+-----------------+-------+
| guorong |???????????????1?| 物理 |
| liming |???????????????3?| 數(shù)學(xué) |
| xueyou |???????????????1?| 歷史 |
+----------+-----------------+-------+
3?rows in?set (0.00?sec)havinghaving關(guān)鍵字用于對(duì)分組后的數(shù)據(jù)進(jìn)行篩選,功能相當(dāng)于分組之前的where,不過(guò)要求更嚴(yán)格。過(guò)濾條件要么是一個(gè)聚合函數(shù)(?... having count(x) > 1),要么是出現(xiàn)在select后面的列(select col1, col2 ... group by x having col1 > 1)update?tableA a inner?join?tableB b on?a.xxx = b.xxx set?a.col1 = xxx, b.col1 = xxx where?...delete?a, b from?tableA a inner?join?tableB b on?a.xxx = b.xxx where?a.col1 = xxx and?b.col1 = xxxDCL
GRANT之類的命令,并且主要涉及數(shù)據(jù)庫(kù)系統(tǒng)的權(quán)限,權(quán)限和其他控件。GRANT?:允許用戶訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限REVOKE:撤消用戶使用GRANT命令賦予的訪問(wèn)權(quán)限
TCL
COMMIT:提交事務(wù)ROLLBACK:在發(fā)生任何錯(cuò)誤的情況下回滾事務(wù)
范式
數(shù)據(jù)庫(kù)規(guī)范化,又稱正規(guī)化、標(biāo)準(zhǔn)化,是數(shù)據(jù)庫(kù)設(shè)計(jì)的一系列原理和技術(shù),以減少數(shù)據(jù)庫(kù)中數(shù)據(jù)冗余,增進(jìn)數(shù)據(jù)的一致性。關(guān)系模型的發(fā)明者埃德加·科德最早提出這一概念,并于1970年代初定義了第一范式、第二范式和第三范式的概念,還與Raymond F. Boyce于1974年共同定義了第三范式的改進(jìn)范式——BC范式。
除外還包括針對(duì)多值依賴的第四范式,連接依賴的第五范式、DK范式和第六范式。
第一范式


第二范式




第三范式



插入異常:如果某個(gè)實(shí)體隨著另一個(gè)實(shí)體的存在而存在,即缺少某個(gè)實(shí)體是無(wú)法表示這個(gè)實(shí)體,那么這個(gè)表就存在插入異常。 更新異常:如果更改表所對(duì)應(yīng)的某個(gè)實(shí)體實(shí)例的單獨(dú)屬性時(shí),需要將多行更新,那么就說(shuō)明這個(gè)表存在更新異常 刪除異常:如果刪除表的某一行來(lái)表示某實(shí)體實(shí)例失效時(shí),導(dǎo)致另一個(gè)不同實(shí)體實(shí)例信息丟失,那么這個(gè)表就存在刪除異常

橫表縱表
# 橫表
CREATE TABLE `table_h2z` (
`name` varchar(32) DEFAULT?NULL,
`chinese` int(11) DEFAULT?NULL,
`math` int(11) DEFAULT?NULL,
`english` int(11) DEFAULT?NULL
) ENGINE=InnoDB AUTO_INCREMENT=4?DEFAULT?CHARSET=utf8;
/*Data for the table `table_h2z` */
insert into `table_h2z`(`name`,`chinese`,`math`,`english`) values
('mike',45,43,87),
('lily',53,64,88),
('lucy',57,75,75);
# 縱表
CREATE TABLE `table_z2h` (
??`name` varchar(32) DEFAULT?NULL,
??`subject` varchar(8) NOT NULL?DEFAULT?'',
??`score` int(11) DEFAULT?NULL
) ENGINE=InnoDB DEFAULT?CHARSET=utf8;
/*Data for the table `table_z2h` */
insert into `table_z2h`(`name`,`subject`,`score`) values
('mike','chinese',45),
('lily','chinese',53),
('lucy','chinese',57),
('mike','math',43),
('lily','math',64),
('lucy','math',75),
('mike','english',87),
('lily','english',88),
('lucy','english',75);橫表轉(zhuǎn)縱表
SELECT?NAME, 'chinese'?AS?`subject`, chinese AS?`score`?FROM?table_h2z
UNION?ALL
SELECT?NAME, 'math'?AS?`subject`, math AS?`score`?FROM?table_h2z
UNION?ALL
SELECT?NAME, 'english'?AS?`subject`, english AS?`score`?FROM?table_h2z+------+---------+-------+
| name |?subject | score |
+------+---------+-------+
| mike |?chinese | 45 |
| lily |?chinese | 53 |
| lucy |?chinese | 57 |
| mike |?math | 43 |
| lily |?math | 64 |
| lucy |?math | 75 |
| mike |?english | 87 |
| lily |?english | 88 |
| lucy |?english | 75 |
+------+---------+-------+
9?rows in?set (0.00?sec)SELECT?NAME,
?SUM(CASE?`subject`?WHEN?'chinese'?THEN?score ELSE?0?END) AS?chinese,
?SUM(CASE?`subject`?WHEN?'math'?THEN?score ELSE?0?END) AS?math,
?SUM(CASE?`subject`?WHEN?'english'?THEN?score ELSE?0?END) AS?english
FROM?table_z2h
GROUP?BY?NAME+------+---------+------+---------+
| name |?chinese | math |?english |
+------+---------+------+---------+
|?lily | 53 |???64?| 88 |
| lucy |??????57?| 75 |??????75?|
|?mike | 45 |???43?| 87 |
+------+---------+------+---------+
3?rows in?set (0.00?sec)參考
https://www.w3schools.in/mysql/ddl-dml-dcl/
評(píng)論
圖片
表情


