1. 程式人生 > >MySql(一、MySQL基礎、庫操作和表操作)

MySql(一、MySQL基礎、庫操作和表操作)

MySQL資料庫

MySQL資料庫是一種C/S結構的軟體:客戶端/服務端,若想訪問伺服器,必須通過客戶端(伺服器一直執行,而客戶端在需要使用的時候執行。)

互動方式:
1、客戶端連線認證:連線伺服器,認證身份:mysql.exe -hPup
2、客戶端傳送SQL指令
3、伺服器接收SQL指令,處理SQL指令,返回操作結果。
4、客戶端接收結果:顯示結果。
5、斷開連線(釋放資源:伺服器併發限制):退出的3種方式:exit/quit/ \q

MySQL伺服器物件

將mysql伺服器內部粗略視為四層:系統(DBMS)-> 資料庫(DB)->資料表(Table)->欄位(field)
分層示意圖:
這裡寫圖片描述

SQL基本操作(CRUD)

將SQL的基本操作根據操作物件進行分類,分為三類:庫操作,表操作(欄位),資料操作。

庫操作(對資料庫的增刪改查)

建立資料庫:

create database 資料庫名字 [庫選項];
庫選項:用來約束資料庫,分為兩個選項:
    1、字符集設定:charset/character set 具體字符集(資料儲存的編碼格式),常用字符集:  
    GBK,UTF8
    2、校對集設定:collate 具體校對集(資料比較的規則)

--:雙中劃線:註釋(單行註釋),也可以用#號
\:轉義

eg:
create database mydatabase charset utf8;
這裡寫圖片描述

其中,資料庫名字不能用關鍵字(已經被使用的字元)或者保留字(將來可能會用到的)
如果非要使用關鍵字或者保留字,那麼必須使用一對反引號(esc鍵下面的鍵,英文字元)包裹關鍵字。

當建立資料庫的SQL語句執行之後,發生了什麼?

1、在資料庫系統中,增加了對應的資料庫資訊。
2、會在儲存資料的資料夾下:Data目錄,建立一個對應資料庫名字的資料夾。
    檢視資料庫所在物理位置:show global variables like "%datadir%";
3、每個資料庫下都有一個opt檔案:儲存了庫選項。
(字符集改變,校對集一定會改變)

這裡寫圖片描述

檢視資料庫:

1、檢視所有資料庫:show databases
2、檢視指定部分的資料庫:模糊查詢
    show databases like ‘pattern’; -- pattern是匹配模式
    %:表示匹配多個字元。
    _:表示匹配單個字元。 
3、檢視資料庫的建立語句:show create database  資料庫名;

這裡寫圖片描述

更新資料庫:
資料庫名字不可以修改。
資料庫的修改僅限庫選項的修改:字符集和校對集(校對集依賴字符集)

alter database 資料庫名字 [庫選項]; 
庫選項:charset/character set [=] 字符集
校對集: collate 校對集

eg:修改資料庫mydatabase的字符集
alter database mydatabase charset GBK;

這裡寫圖片描述

刪除資料庫:

drop database 資料庫名;

當刪除資料庫語句執行之後,發生了什麼?

1、在資料庫內部看不到對應的資料庫。
2、在對應的資料庫儲存的資料夾內:資料庫名字對應的資料夾也被刪除(級聯刪除:裡面的資料表全部刪除)。

注意:資料庫的刪除需要慎重。先進行備份後操作(刪除不可逆)

資料表操作

表與欄位是密不可分的。

新增資料表:

create table [if not exists] 表名(欄位名字 資料型別, 欄位名字 資料型別 -- 最後一行不需要逗號)[表選項]
if not exists:如果表名不存在,那麼就建立,否則不執行建立程式碼:檢查功能
表選項:控制表的表現
    字符集:charset/character set 具體字符集;--保證表中資料儲存的字符集。
    校對集:collate 具體校對集;
    儲存引擎:engine 具體儲存引擎(innodb 和myisam)

eg:

create table if not exists student(
name varchar(10),
gender varchar(10),
number varchar(10),
age int
) charset utf8;

執行後報錯:
這裡寫圖片描述

任何一個表的設計都必須指定資料庫。
方案1:顯式的指定所屬的資料庫

create table 資料庫名.表名(); --將當前資料表建立在指定的資料庫下。

方案2:隱式的指定表所屬的資料庫:先進入到某個資料庫環境,這樣建立的表自動歸屬到某個指定的資料庫。

進入資料庫環境:use 資料庫名字;

當建立資料表的SQL指令執行之後,到底發生了什麼?

1、指定資料庫下已經存在對應表。
2、在資料庫對應的資料夾下,會產生對應表的接哦古檔案(跟儲存引擎有關係)。

檢視資料表:

1、檢視所有表:show tables;
2、檢視部分表:模糊匹配 show tables like ‘pattern’;
3、查看錶的建立語句:show create table 表名;
4、查看錶結構:查看錶中的欄位資訊;desc/describe/show columns from 表名;

eg:

檢視所有表:show tables;
檢視以s結尾的表:show tables like '%s';
查看錶建立語句:show create table student
查看錶結構:
    desc class;
    describe class;
    show columns from class;

這裡寫圖片描述

修改資料表:
表的修改分為兩個部分:修改表本身和修改欄位。
修改表本身:表名和表選項。

修改表名:rename table old表名 to new表名;
修改表選項:字符集,校對集,儲存引擎。
alter table 表名 表選項 值;

eg:

rename table student1 to student;
alter table student charset GBK;

修改欄位:
欄位操作很多:新增,修改,重新命名,刪除

新增欄位:

alter table 表名 add[column] 欄位名 資料型別 [列屬性] [位置];
位置:欄位名可以存放表中的任意位置。
first:第一個位置;
after:在哪個欄位之後, after 欄位名;預設是在最後一個欄位之後。

eg:

--新增一個id欄位:
alter table student add column
id int
first;

修改欄位:

修改通常是修改屬性或者資料型別。
alter table 表名 modify 欄位名 資料型別 [屬性] [位置]

eg:

alter table student
modify number char(10)
after id;--將numer欄位長度修改為固定長度,且放到id列後面

重新命名欄位:

alter table 表名 change old欄位名 new欄位名 資料型別  [屬性][位置];

eg:

--修改gender欄位名為sex
alter table student 
change gender sex varchar(10);

刪除欄位:

如果表中已經存在資料,那麼刪除欄位會清空該欄位的所有資料(不可逆)
alter table drop 欄位名;

eg:

--刪除age欄位
alter table student
drop age;

刪除資料表:(操作不可逆)

drop table 表名1,表名2...; --可以一次性刪除多張表。

eg:

--刪除資料表student
drop table student;

當刪除資料表的指令執行之後,發生了什麼?

1、在表空間中,沒有了指定的表(資料也沒有了)。
2、在資料庫對應的資料夾下,表對應的檔案(與儲存引擎有關)也會刪除。

資料操作

新增資料:

兩種方案:
方案1、給全表字段插入資料:不需要指定欄位列表,要求資料的值出現的順序必須與表中設計的欄位出現的順序一致。凡是非數值資料,都需要使用引號(建議是單引號)包裹。
insert into 表名 values(值列表)[,(值列表)];--可以一次性插入多條記錄

方案2、給部分欄位插入資料,需要選定欄位列表。欄位列表出現的順序與欄位的順序無關,但是值列表的順序必須與選定的欄位的順序一致。
inset into 表名 (欄位列表) values (值列表)[,(值列表)];

eg:

--方案一 插入資料
insert into student values(1, '10001', 'lili', 'girl');

--方案二 插入資料
insert into student (number, sex, name, id ) values ('10006', 'female', 'lili2', 2);

檢視資料:

select */欄位列表 from 表名 [where 條件];

eg:

--檢視所有資料
select * from student;

--檢視指定條件的資料
select id, name from student where name = 'lili';

更新資料:

update 表名 set 欄位 = 值 [where 條件];   -- 建議都有where;要不是更新全部。

eg:

--更新資料(更新的sql語句執行成功,但是更新不一定成功。需要看受到影響的個數)
update student set name = 'lili' where sex = 'girl';

刪除資料:

delete from 表名 [where 條件];

eg:

--刪除資料
delete from student where name = 'lili';