小符MYSQL的筆記

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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章