三十分鐘MySQL快速入門(圖解)_Mysql

來源:互聯網
上載者:User

一、MySQL安裝

MySQL的下載

http://dev.mysql.com/downloads/mysql/

MySQL版本選擇

MySQL功能自訂選擇安裝

功能自訂選擇

路徑自訂選擇

設定root使用者密碼

安裝完成,點擊MySQL Workbench 6.3 CE進入MySQL用戶端

二、SQL基礎

SQL語句分類

1.DDL(Data Definition Languages)語句:資料定義語言 (Data Definition Language),這些語句定義了不同的資料區段、資料庫、表、列、索引等資料庫物件。常用的語句關鍵字主要包括create/drop/alter

2.DML(Data Manipulation Language)語句:資料操縱語句,用於添加、刪除、更新和查詢資料庫記錄,並檢查資料完整性。常用的語句關鍵字主要包括 insert/delete/update/select等

3.DCL(Data Control Language)語句:資料控制語句,用於控制不同資料區段直接的許可和存取層級的語句。這些語句定義了資料庫、表、欄位、使用者的存取權限和安全層級。主要的語句關鍵字包括grant/revoke等

DDL語句(涉及表的定義、結構的修改)

一、create語句

Query Ok代表語句執行成功

1 row affected代表資料庫一行收到影響

0.01 sec代表操作執行的時間

create table student(SID int not null auto_increment,sNo int ,sName varchar(50) not null,primary key(SID));

1.查看系統中都存在哪些資料庫(show databases;)

2.在查看系統中已有的資料庫後,可以用(use dbname)選擇對應的資料庫

3.在選擇對應的資料庫後,查詢該資料庫下面的所有的表(show tables)

二、刪除資料庫

刪除資料庫的文法:drop databse dbname;

三、建立表

文法:create table tablename(column_name_1 column_type_1 constraints,column_name_2 column_type2 constrationts)

mysql的表名是以目錄形式儲存在磁碟上,表名的字元可以是任何目錄名允許的字元。

column_name是列名

column_type是列的資料類型

constrationts是列的約束條件

1.查看錶定義:desc tablename

2.查看建立表的SQL語句:show create table tablename

四、刪除表

刪除表的文法:drop table tablename;

五、修改表

aleter 文法 | 說明

---|---alter table tablename modify columnname newColumnType | 修改表欄位的類型(==modify 不能更改欄位名稱==)alter table tablename add newColumnname newColumnType| 增加表欄位alter table tablename drop oldCloumnname|刪除表欄位alter table tablename change oldColumname newColumnname newColumntype|修改欄位的名稱及類型alter table tablename rename (to) newtablename|修改表名稱

修改欄位的排列順序

在alter的文法後面都有[first\after columnname]可選項

alter table user add address varchar(20) first ;alter table user add age int after name ; 

DML(對資料庫表記錄進行操作,增(insert)刪(delete)改(update)查(select))

1.insert語句

文法:

插入一條:insert into tablename(columnname1,columnname2...)values(val1,val2...);

插入多條:insert into tablename(columnname1,columnname2...)values(val1,val2...),(val1,val2...);

2.update語句

文法:update tablename set columnname=value [where condition]

如果使用MySQL Workbench,update語句不加where條件的會執行錯誤,需要如下圖設定取消設定:

-3.delete語句

文法:delete from tablename where condition

-4.select語句

文法:select * from tablename [where condition]

5.表串連

1.內串連(僅選出兩張表中互相匹配的資料)

select cno,cname,sname from student inner join course on cno=sno;select cno,cname,sname from student,course where cno=sno;

2.外串連

外串連又區分:

1.左串連(left join):包含左邊表的所有記錄,右邊沒有的為Null

2.右串連(right join):包含右邊表的所有記錄,左邊沒有的為null

6.子查詢

-7.記錄聯合

文法:

select * from t1 union all select * from t2;select * from t1 union select * from t2;

union all與union的區別:

union all是把結果集直接合并在一起,而union是將union all後的結果進行一次distinct,去除重複後的結果

DCL語句(DCL語句主要是dba用來管理系統中的對象許可權)

grant與revoke

三、MySQL支援的資料類型

數實值型別

MySQL支援類型後面的小括弧指定顯示寬度,例如:int(5)表示當數值寬度小於5的時候在數字前面填滿寬度,如果不顯示指定寬度則預設為int(11)。如果插入的資料大於這個數值寬度,對實際的插入值是沒有影響的,是按照int類型的實際大小進行的。

create table valuetype(age int,age1 int)insert into valuetype(age,age1)values(1,2);//這時候資料庫就顯示1alter table valuetype modify age int zerofill;//這時候資料庫就顯示'0000000001'

資料插入bit類型欄位時,首先轉換為二進位,如果位元允許,將插入成功,如果位元小於實際的位置,則插入失敗。

日期時間類型

mysql裡面擷取目前時間為now().mssql擷取目前時間為getdate()

timestamp,支援的範圍非常小,從1970-2038年,timestamp受時區的影響

create table timestamptest(tp timestamp)

系統會自動給tp賦予預設值current_timestamp(系統日期),但是mysql只給第一個timestamp設定預設值,如果有第二個timestamp類型,則預設值設定為0

字串類型

1.char與varchar類型的區別:

char列最後的空格已經刪除,而varchar保留空格

四、MySQL中運算子

算術運算子

比較子,滿足返回1,否則返回0

邏輯運算子(布林運算子)

位元運算符

運算子優先順序,大多情況下使用()進行操作

五、常用函數

字串函數

數值函數

日期和時間函數

流程函數

其他函數

六、選擇合適的資料類型

char與varchar

在Innodb儲存引擎中,建議使用varchar類型。對於Innodb資料表,內部的行儲存格式沒有區分固定長度和可變長度列,因此固定長度列的效能不一定比不可變長度的效能好。

Text與blob

一般在儲存少量字串的時候,我們會選擇char或者varchar,而在儲存較大文本的時候,通常會選擇使用text或者blob。兩者的區別:text只能儲存字元資料,比如日誌。blob能儲存位元據,比如照片。

浮點數與定點數

在MySQL中,decimal或者(numberic)用來表示定點數

日期類型的選擇

date/time/datetime/timestamp

七、索引的設計和使用

索引概述

索引是資料庫中用來提高效能的最常用工具。在MySQL中,MyISAM與Innodb儲存引擎的表預設建立的都是Btree索引。

1.索引的建立

create table indexTest(id int not null auto_increment,memberid int not null,createtime datetime not null default current_timestamp,primary key (id))alter table indextest add orderserial varchar(50) not null;create unique index IX_orderserial on indexTest(orderserial);

insert into indextest (memberid,createtime,orderserial)values(112123,'2016-08-14','sz121213')
說明:上面建立一個表,其中定義orderserial為唯一索引。

文法:create [unique\fulltext\spatial] index index_name on tablename(columname)

2.設計索引的原則

1.最合適的索引列是出現在where子句中列,或串連子句中指定的列,而不是出現在select關鍵字後面的挑選清單的列

2.使用唯一索引,需要考慮列中某個值得分布,如果索引列種的基數越大,則索引的效果越好。舉個例子:訂單號就可以設定唯一索引,因為訂單號的不一樣。而對於rowstatus就無須了,因為rowstatus要麼是有效要麼是無效。這樣的篩選出的範圍還是很多,沒有意義

3.不要過度索引。因為所有也要佔用額外的磁碟空間,如果一個索引很少使用,那麼會不必要的減緩表的修改速度
顯示MySQL的執行計畫:explain 後面加mysql語句

八、視圖

視圖(View)

定義:視圖是一種虛擬存在的表,對於使用視圖的使用者來說基本上是透明的,視圖並不是在資料庫中實際存在。

優勢:

1.簡單,使用者完全不需要關心後面對應的表的結構/關聯條件和篩選條件。對使用者來說已經是過濾好的合格結果集

2.安全,使用視圖的使用者只能訪問他們被允許查詢的結果集

3.資料獨立,一旦視圖的結構確定了,可以屏蔽表結構變化對使用者的影響,源表增加列對視圖沒有影響。

文法:

create or replace view index_view asselect * from indextest

1.建立create [or replace] view viewName as select ...

2.查詢 select * from 視圖名稱

3.展示視圖 show tables;

4.刪除視圖 drop view viewname

九、預存程序和函數

一、預存程序(store procedure)和函數

預存程序和函數是事先經過編譯並存在資料庫中的一段SQL語句的集合,調用預存程序和函數可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對於提高資料處理的效率是有好處的

文法:

create database finance;//建立finance資料庫use finance;create table orders(orderId bigint not null auto_increment,memberId int not null default 0,serialNumber varchar(50) not null default '',amount decimal(18,2) not null default 0,createTime datetime not null default current_timestamp,primary key (orderid))//建立orders訂單表insert into orders (memberId,serialNumber,amount) values(6561121,'sz12234222',5),(233444,'ys1652233',10)//插入測試資料delimiter &create procedure orders_serial(in serial varchar(50))reads sql databeginselect * from orderswhere serialNumber=serial;end &

注釋:delimiter $$命令就是將語句的結束符從分號;修改成其他符號,這裡指的是$$為結尾。這樣在number後面的分號就不會認為結束。

1.調用預存程序

call orders_serial('sz12234222')

2.預存程序的好處

邏輯封裝在資料庫端,調用者不需要瞭解中間的處理邏輯,一旦調用邏輯發生變化,只需要修改預存程序即可,而對調用者的程式完全沒有影響。

3.刪除預存程序

drop procedure if exists orders_serial//if exists可選

4.查看預存程序差狀態

show procedure status like 'orders_serial'

5.查詢預存程序的定義

show create procedure orders_serial

二、預存程序變數的使用

預存程序可以使用變數,並且在MySQL5.1版本後,不區分大小寫

1.變數的定義

變數的範圍只能在begin...end塊中,可以嵌套在塊中

declare currentTime date;

2.變數的賦值

set currentTime=now();//直接賦值select XX into currentTime from XX;//也可以通過sql語句進行賦值

3.定義條件和處理

declare handler_type handler for contidtion_value;

handler_type:

1.continue;
2.exit;
3.undo;

condition_value:

1.sqlstate
2.sqlwarning
3.not found
4.sqlexception

eg: declare continue handler for sqlstate '2' set @x=1;

三、游標的使用

在預存程序和函數中,可以使用游標對結果集進行迴圈處理,游標的使用包含游標的聲明: open、fetch、close

定義:

declare cur_id cursor for select * from orders;
open cur_id;
fetch cur_id;
close cur_id;

四、事件調度器

事件調度器是MySQL5.1後面新增的功能,可以將資料庫按照自訂時間周期觸發某種操作。資料庫預設操作是關閉的。需要開啟

create event xon scheduleevery 5 seconddoinsert into orders (memberId,serialNumber,amount) values(6561121,'222',5)
set global event_scheduler =1//開啟調度器alter event x disable;//禁用事件調度器drop event x;//刪除事件調度器

十、 觸發器

觸發器

觸發器是在5.02版本後支援的,觸發器是與表有關的資料庫物件,在滿足條件時觸發,並執行觸發器中定義的語句集合。可以協助應用在資料庫端確保資料的完整性

drop trigger orderlogdelimiter $create trigger orderlog after insert on orders for each rowbegininsert into orderslog (content) values(new.serialNumber);end insert into orders (memberId,serialNumber,amount) values(6561121,'sz12234222',5)

解釋:上面描述的是建立一個觸發器,當往訂單表中插入資料之後,在訂單日誌表插入一條記錄。使用old和new來引用觸發器發生變化的記錄內容,目前只支出行級觸發,不支援語句級觸發

觸發器執行的順序

before insert\before update\after update

十一、 事務控制和鎖定語句

MySQL儲存引擎的事務說明

1.Lock Table與Unlock Table

文法:

use finance;
lock table orders read;
unlock table;

如果某個進程(session1)lock定了表,那麼其他的進程(session2)可以查詢,但是不能進行更新操作,直到第一個進程釋放了鎖

2.事務控制

十二、總結

很高興您能閱讀到這裡,可能在三十分鐘很難吸收這麼多的知識,這篇文章也是我之前學習MySQL筆記整合的。這篇文章也是理論偏多,對於其中比較比較難理解知識點寫些Demo,權當個人理解,如有不足的地方,請您指出。如果對您有所協助,請點個贊!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.