來自:CSDN(作者:Sicimike)
原文連結(底部連結可直達):
https://blog.csdn.net/Baisitao_/article/details/104714764
前言在日常開發中,一些不常用且又比較基礎的知識,過了一段時間之後,總是容易忘記或者變得有點模稜兩可。本篇主要記錄一些關於MySQL資料庫比較基礎的知識,以便日後快速查看。
SQL命令SQL命令分可以分為四組:DDL、DML、DCL和TCL。四組中包含的命令分別如下
DDL
DDL是數據定義語言(Data Definition Language)的簡稱,它處理資料庫schemas和描述數據應如何駐留在資料庫中。
CREATE:創建資料庫及其對象(如表,索引,視圖,存儲過程,函數和觸發器)TRUNCATE:從表中刪除所有記錄,包括為記錄分配的所有空間都將被刪除# 建表
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) // 也可以通過這種方式設置主鍵
# UNIQUE KEY (name) // 也可以通過這種方式設置唯一鍵
# key/index (identity_card, col1...) // 也可以通過這種方式創建索引
) ENGINE = InnoDB;
# 設置主鍵
alter table sicimike add primary key(id);
# 刪除主鍵
alter table sicimike drop primary key;
# 設置唯一鍵
alter table sicimike add unique key(column_name);
# 刪除唯一鍵
alter table sicimike drop index column_name;
# 創建索引
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 '姓名';
-- 查詢從第11條數據開始的連續5條數據
select * from sicimike limit 10, 5
mysql> select * from c;
++--++
| CNO | CNAME | CTEACHER |
++--++
| 1 | 數學 | liming |
| 2 | 語文 | liming |
| 3 | 歷史 | xueyou |
| 4 | 物理 | guorong |
| 5 | 化學 | 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 | 數學 |
| xueyou | 1 | 歷史 |
++--+--+
3 rows in set (0.00 sec)
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 = xxx
DCLDCL是數據控制語言(Data Control Language)的簡稱,它包含諸如GRANT之類的命令,並且主要涉及資料庫系統的權限,權限和其他控制項。REVOKE:撤消用戶使用GRANT命令賦予的訪問權限TCLTCL是事務控制語言(Transaction Control Language)的簡稱,用於處理資料庫中的事務範式資料庫規範化,又稱正規化、標準化,是資料庫設計的一系列原理和技術,以減少資料庫中數據冗餘,增進數據的一致性。關係模型的發明者埃德加·科德最早提出這一概念,並於1970年代初定義了第一範式、第二範式和第三範式的概念,還與Raymond F. Boyce於1974年共同定義了第三範式的改進範式——BC範式。# 橫表
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);
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)
喜歡我可以給我設為星標哦