MYSQL是什么東西呢?
此模塊僅作了解,留一個大致印象即可
MySQL 是關系型資料庫管理系統
關系資料庫管理系統的特點:
1.資料以表格的形式出現
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的資料域
4.許多的行和列組成一張表單
5.若干的表單組成database
資料庫: 資料庫是一些關聯表的集合,
資料表: 表是資料的矩陣,在一個資料庫中的表看起來像一個簡單的電子表格,
列: 一列(資料元素) 包含了相同型別的資料, 例如郵政編碼的資料,
行:一行(=元組,或記錄)是一組相關的資料,例如一條用戶訂閱的資料,
冗余:存盤兩倍資料,冗余降低了性能,但提高了資料的安全性,
主鍵:主鍵是唯一的,一個資料表中只能包含一個主鍵,你可以使用主鍵來查詢資料,
外鍵:外鍵用于關聯兩個表,
復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引,
索引:使用索引可快速訪問資料庫表中的特定資訊,索引是對資料庫表中一列或多列的值進行排序的一種結構,類似于書籍的目錄,
參照完整性: 參照的完整性要求關系中不允許參考不存在的物體,與物體完整性是關系模型必須滿足的完整性約束條件,目的是保證資料的一致性,
表頭(header): 每一列的名稱;
列(col): 具有相同資料型別的資料的集合;
行(row): 每一行用來描述某條記錄的具體資訊;
值(value): 行的具體資訊, 每個值必須與該列的資料型別相同;
鍵(key): 鍵的值在當前列中具有唯一性,
現在開始進入MySQL的正式學習:
MySQL的基本命令:
1.選擇資料庫:
use 資料庫名;
選擇要使用的MySQL的資料庫,此后所有的命令都只針對該資料庫,在對資料庫,資料表進行增刪改查等操作之前需要選擇資料庫
2.顯示所有資料庫:
show databases;
3.顯示某個資料庫中所有資料表:
show tables;
在使用前應該先使用use 資料庫名;來顯示所作用的資料庫
4,顯示資料表的屬性及其他資訊;
show columns from 資料表;
desc 資料表名;
5.顯示資料表的詳細資訊,包括主鍵
show index from 資料表;
MySQL 創建資料庫:
create database 資料庫名;
該資料庫名可自定義
MySQL 洗掉資料庫:
drop database 資料庫名;
該資料庫名必須已存在
MySQL 選擇資料庫:
use database 資料庫名;(就是上文的基本命令第一條)
mysql>use xiaofu;
database changed
mysql>
選擇xiaofu這一資料庫成功!
資料庫名區分大小寫哦
MySQL 創建資料表:
create table 表名
(欄位1 回傳型別 是否空,
欄位2 回傳型別 是否空
欄位3 回傳型別 是否空…);
創建資料表需要的資訊:
表名 表欄位名 定義每個表欄位
下面看一個例子:
mysql>use xiaofu;
database changed
mysql>create table bufu(
->bufu_id int not null auto_increment,
->bufu_title varchar(100) not null,
->bufu_author varchar(40) not null,
->submission_date date,
->primary key(bufu_id)
->)engine=innodb default charset=utf8;
query ok,0 rows affected(0.16 sec)
如果上述代碼難理解,就理解下面這個代碼:
mysql>create table bufu(
->id int not null primary key,
->name varchar(100) not null);
query ok,0 rows affected(0.16 sec)
小符發現的問題:不可以直接create 資料表名;因為一個資料表里至少要有一個欄位1!
注意每個表頭用,隔開,易忽略!
這個例子我們在資料庫xiaofu中建立了一個名為bufu的資料表,此時,我們可以用上文中提到的MySQL的基本命令中的3,4,5來查看資料表中的相關資料
MySQL 洗掉資料表:
drop table 表名;
建議不要將剛剛的bufu刪掉哦
MySQL 插入資料:
insert into 資料表名
(欄位1,欄位2,欄位3…)
values
(內容1,內容2,內容3…)
如果插入的資料為字符型,則要加上雙,單引號
mysql>use xiaofu;
databases changed;
mysql insert into bufu
->(bufu_title,bufu_author,submission_date)
->values
->("學習PHP","小符是天才",now());
query ok 1 rows affected,1 warnigs(0.01sec)
代碼中的標點符號要用英文版的哦!
now()函式代表表示現在的時間
MySQL 讀取資料表,查詢資料:
1.select * from 資料表
回傳這個資料表的全部記錄
我們就可以看見我們設定的bufu資料表中的內容
2.select 表頭名,表頭名…from 該資料表
回傳提到模塊里的資料
select bufu_title,bufu_author from bufu;
查詢不同模塊之間用逗號隔開;
where陳述句中包含不同條件;
limit 屬性設定回傳記錄數;
offset 指定select查詢資料偏移量;
MySQL where子句:
上文提到:若需要有條件的選擇資料,則用where子句添加到select陳述句中;
where 條件1[and[ or]] 條件2…
where陳述句相當于C語言中的if陳述句,根據MySQL中的欄位值來讀取指定的資料也可用于delete陳述句和update陳述句
運算子:
=,>,< >=,<= !=
若符合,則回傳true;不符合,則回傳false;
如果給出的條件沒有符合的條件,則不會回傳資料
select where 子句:
select* from bufu where bufu_author ="小符是天才";
MySQL update更新陳述句:
此陳述句可用于sql資料中的修改更新
update 資料表名 set 欄位名=新內容
where 條件
可以同更新一個或多個表中的資料,這時where就很有必要
修改加展示:
更新資料表中 bufu_id 為 3 的 bufu_title 欄位值:
mysql> UPDATE bufu SET bufu_title='學習 C++' WHERE bufu_id=3;
Query OK, 1 rows affected (0.01 sec)
mysql> SELECT * from bufu WHERE bufu_id=3;
+-----------+--------------+---------------+-----------------+
| bufu_id | bufu_title | bufu_author | submission_date |
+-----------+--------------+---------------+-----------------+
| 3 | 學習 C++ | 小符是天才 | 2002-05-24 |
+-----------+--------------+---------------+-----------------+
1 rows in set (0.01 sec)
MySQL delete洗掉陳述句:
可用MySQL陳述句中的delete from命令來洗掉資料表中的內容
delete from 資料表名 where 條件
where 陳述句用于指定洗掉內容,若沒有where陳述句,則整個資料表將被洗掉;
mysql> use xiaofu;
Database changed
mysql> DELETE FROM bufuWHERE runoob_id=3;
Query OK, 1 row affected (0.23 sec)
這樣就將資料表bufu中的3號資料洗掉
MySQL like獲取子句:
前文提到若要讀取資料,則使用select陳述句,并使用where子句來獲取指定資料,在where子句中常使用=設定獲取資料的條件;
bufu_author="小符是天才";
需要獲取bufu_author中所有帶有com字符的所有記錄時,需要在where子句中使用like子句,在like子句中,%代表任意字符,若沒有%,則like子句的作用就相當于一個=;
SELECT 元素1,元素2…元素n
FROM 資料表名
WHERE元素1 LIKE 條件 (AND /OR元素2 = 條件)
mysql> use xiaofu;
Database changed
mysql> SELECT * from bufu WHERE bufu_author LIKE '%COM';
但此時bufu中沒有com,故不在此展示結果,僅展示如何表示
MySQL union連接子句:
union運算子用于連接兩個或兩個以上的select陳述句的結果到一個集合中去,多個select陳述句會洗掉重復語段
SELECT 表頭名1,表頭名2…表頭名n
FROM 資料表名
WHERE 條件
UNION [ALL/ DISTINCT] 全部回傳/回傳不重復的
SELECT 表頭名1,表頭名2…表頭名n
FROM 資料表名
WHERE 條件; (選擇連接的元素)
select xingming from aaa
->union(all)
select xingming from bbb
->order by contry;
此處假設aaa和bbb中都有xingming這一項
如果union后什么也不加,則為回傳全部元素值
MySQL 排序 order by子句:
SELECT * FROM資料表名1,資料表名2…
ORDER BY 表頭名1 (ASC /DESC)表頭名2 (ASC /DESC)
asc:升序(默認) desc:降序
讀取 bufu 表中所有資料并按 submission_date 欄位的升序排列
mysql> SELECT * from bufu ORDER BY submission_date DESC;
+-----------+---------------+---------------+-----------------+
| bufu_id | bufu_title | bufu_author | bufu_date |
+-----------+---------------+---------------+-----------------+
| 3 | 學習 C++ | 小符是天才 | 2020-11-27 |
| 3 | 學習 mysql | 小符是天才 | 2020-11-27 |
| 3 | 學習 pythen | 小符是天才 | 2002-05-24 |
+-----------+---------------+---------------+-----------------+
4 rows in set (0.01 sec)
MySQL 分組group by陳述句:
SELECT 表頭名1, 表頭名2
FROM 資料表名
WHERE 條件
GROUP BY 表頭名1;
按表頭名1進行分組
with rollup:
with rollup 可以實作在分組統計資料基礎上再進行相同的統計(SUM,AVG,COUNT…)可以使用這些函式
SELECT 表頭名1,
sum(表頭名2)as 表頭名2
FROM 資料表名
WHERE 條件
GROUP BY 表頭名1 with rollup;
將資料表按表頭名1進行分組,表頭名2的累加
MySQL 連接的使用join:
INNER JOIN(內連接,或等值連接):獲取兩個表中欄位匹配關系的記錄,
LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄,
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應匹配的記錄,
MYSQL NULL值處理:
is null :當列為null時,回傳值為true;
is not null:當列不為null時,回傳值為true;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/238614.html
標籤:其他
