Msql淺析-基礎命令(二)

来源:https://www.cnblogs.com/plyx/archive/2018/07/07/9276327.html
-Advertisement-
Play Games

篇幅簡介 篇幅簡介 一、Msql數據類型 1、整型 tinyint, 占 1位元組 ,有符號: -128~127,無符號位 :0~255 smallint, 占 2位元組 ,有符號: -32768~32767無符號位 :0~65535 mediumint 占 3位元組 ,有符號: -8388608~838 ...



篇幅簡介

一、Msql數據類型

1、整型

tinyint,  占 1位元組 ,有符號: -128~127,無符號位 :0~255

smallint, 占 2位元組 ,有符號: -32768~32767無符號位 :0~65535

mediumint 占 3位元組 ,有符號: -8388608~8388607,無符號位:0~16777215:

int, 占 4位元組 ,有符號: -2147483648~2147483647,,無符號位 無符號位 :0~4 284967295

bigint, bigint,bigint, 占 8位元組

bool  等價於 tinyint

2、浮點型

float([m[,d]])  占 4位元組 ,1.17E-38~3.4E+3838~3.4E

double([m[,d]])  占 8位元組

decimal([m[,d]])  以字元串形式表示的浮點數 

3、字元型

char([m]): :定長的字元 ,占用 m位元組

varchar[(m)]::變長的字元 ,占用 m+1m+1 位元組,大於 255 個字元:占用 m+2m+2

tinytext,255 個字元 (2 的 8次方 )

text,65535 個字元 (2 的 16 次方 )

mediumtext,16777215字元 (2 的 24 次方 )

longtext (2的 32 次方 )

enum(value,value,...)占 1/2個位元組 最多可以有 65535 個成員 個成員

set(value,value,...) 占 1/2/3/4/8個位元組,最多可以 有 64個成員

二、Mysql數據運算

1、邏輯運算 and or not

for example:

選擇出 書籍價格 為(30,60,40,50)的記錄

sql> select bName,publishing,price from books where price=30 or price=40 or price=50 or price=60; 


1

2、in 運算符

in 運算符用於 WHERE 表達式,以列表的形式支持多個選擇,語法如下

where colunmm in (value1,value2,.......)

where colunmm not in (value1,value2,..........)

當in前面加上not時,表示與in相反,既不在結果中

sql> select bName,publishing,price from books where  price in (30,40,50,60)order by price asc;


2

3、算術運算符  >= | <=| <> |=

for example

找出價格小於70的記錄

mysql> select bName,price from books where price <= 70;

 


3

4、模糊查詢  like '%...%'

欄位名 [not] like  '%......%'   通配符  任意多個字元

查詢書中包含程式字樣的記錄

mysql> select bName,price from books where bName like '%程式%'


4

5、範圍運算 [not] between .......and

查找價格不在30和60之間的書名和價格

mysql> select bName,price from books where price not between 30 and 60  order by price desc;


5

6、Mysql 子查詢

select where條件中又出現select

查詢類型為網路技術的圖書

mysql> select bName,bTypeId from books where bTypeId=(select bTypeId from category where bTypeName='網路技術');

 


6

7、limit 限定顯示的條目

LIMIT子句可以被用於強制 SELECT語句返回指定的記錄數。 LIMIT 接受一個或兩數字參。必 須是一個整數常量。如果給定兩 個數,第一指定返 回記錄行的偏移量,第二個參數返回記錄行的最大數目。初始偏移量是 0( 而不是 1)。

語法 : select * from limit m,n

其中 m是指記錄開始的 index indexindex,從 0開始,表示第一條記錄,n是指從第 m+1 條開始,取 n。

查詢books表中第2條到六行的記錄

mysql>select * from books limit 1,6;


7

8、連接查詢

以一個共同的欄位,求兩張表當中符合條件並集。 通過 共同欄位把這兩張表的共同欄位把這兩張表連 接起來。

常用的連接:

內連接:根據表中的共同欄位進行匹配

外連接:現實某數據表的 全部記錄和另外數據表中符合連接條件的記錄。

外連接:左連接、右連接

內連接:for exmaple

create table student(sit int(4) primary key auto_increment,name varchar(40));

insert into student values(1,‘張三’),(2,‘李四’),(3,‘王五’),(4,‘mikel’);

create table teachers(sit int(4),id int(4) primary key auto_increment,score varchar(40));

insert into teachers values(1,1,‘1234’),(1,2,‘2345’),(3,3,‘2467’),(4,4,‘2134’);

select s.* ,t.* from student as s,teachers as t where s.sid=t.sid;


8

左連接: select 語句 a表 left[outer] join b 表  on 連接條件 ,a表是主,都顯示。

b表是從,主表內容全都有,主表多出來的欄位,從表沒有的就顯示 null,從表多出主表的欄位不顯示。

select * from student as s left join teachers as t on  s.sit=t.sit; 


9

右連接:select 語句 a表 right[outer] join b 表  on 連接條件 ,b表是主,都顯示。

a表是從,主表內容全都有,主表多出來的欄位,從表沒有的就顯示 null,從表多出主表的欄位不顯示。

select * from student as sright join teachers as t on  s.sit=t.sit;


10

三、聚合函數

1、sam() 求和

select sum (id+score) as g from teachers;

2、avg() 求平均值

select avg (id+score) as g from teachers;

3、max() 最大值

select max (id) as g from teachers;

4、min() 最小值

select min(id) as g from teachers;

5、substr(string,start,len) 截取

select substr(soucr,1,2) as g from teachers;

從start開始,截取len長度,start從1開始

concat(str1,str2,str3......................)字元串拼接,將多個字元串拼接在一起

select concat(id,score,sit) as g from teachers;

6、count() 統計計數 記錄欄位數據條數

select count(id) as g from teachers;

7、upper() 大寫

select upper(name) as g from student;  #將欄位name中英文全部變為大寫,但不改變原值

8、lower() 小寫

select lower(name) as g from student;  #將欄位name中英文全部變為小寫,但不改變原值

四、索引

mysql中索引是以文件形式存放的,對錶進行增刪改,會同步到索引,索引和表保持一致,常用在where 後欄位查詢就加索引。

優點:加快查詢速度,減少查詢時間

缺點:索引占據一定磁碟空間,會影響insert,delete,update執行時間

1、索引類型

普通索引:最基本索引,不具備唯一性

唯一索引:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一

主鍵索引:記錄值唯一,主鍵欄位很少被改動,不能為空,不能修改,可用於一個欄位或者多個欄位

全文索引:檢索文本信息的, 針對較大的數據,生成全文索引查詢速度快,但也很浪費時間和空間

組合索引:一個索引包含多個列

2、創建索引

普通索引:

# 創建普通索引

create table demo(id int(4),uName varchar(20),uPwd varchar(20),index (uPwd));

# 查看建表過程

show create table demo;

demo | CREATE TABLE `demo` (

  `id` int(4) DEFAULT NULL,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  KEY `uPwd` (`uPwd`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

唯一索引:欄位值只允許出現一次,可以有空值

# 創建唯一索引

create table demo1(id int(4),uName varchar(20),uPwd varchar(20),unique index (uName));

# 查看建表過程

show create table demo1;

demo1 | CREATE TABLE `demo1` (

  `id` int(4) DEFAULT NULL,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  UNIQUE KEY `uName` (`uName`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

主鍵索引:欄位記錄值唯一,欄位很少被修改,一般主鍵約束為auto_increment或者not null unique,不能為空,不能重覆。

# 創建主鍵索引

create table demo2(id int(4) auto_increment primary key,uName varchar(20),uPwd varchar(20));

# 查看建表語句

demo2 | CREATE TABLE `demo2` (

  `id` int(4) NOT NULL AUTO_INCREMENT,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

全文索引:提高全文檢索效率,解決模糊查詢

# 創建全文索引

create table demo3(id int(4),uName varchar(20),uPwd varchar(20),fulltext(uName,uPwd));

# 查看建表語句

| demo3 | CREATE TABLE `demo3` (

  `id` int(4) DEFAULT NULL,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  FULLTEXT KEY `uName` (`uName`,`uPwd`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

五、外鍵約束

外鍵約束:foreign key 表與表之間的一種約定關係,由於這種關係存在,讓表與表之間的數據更加具有完整性,更加具有關聯性。

創建外鍵約束

創建user主表

create table user1(id int(11)auto_increment primary key,name varchar(50),sex int(1));

插入數據

insert into user1(name,sex)values("mikel",4),("plyx",6);

創建order外鍵表

create table `order`(order_id int(11)auto_increment primary key,u_id int(11),username varchar(50),monery int(11),foreign key(u_id) references user1(id)  on delete cascade on update cascade )engine=innodb);

插入數據

INSERT INTO `order` (order_id,u_id,username,monery)values(1,1,'mikel',2345),(2,2,'plyx',3456)

測試級聯刪除

delete from user1 where id=1

查看order表記錄


12

測試級聯更新

update  user1 set id=5 where id=2


13

測試數據完整性

在order表中插入一條u_id為6的記錄

insert into `orser` (u_id)values(6);

Cannot add or update a child row: a foreign key constraint fails (`school`.`order`, CONSTRAINT `order_ibfk_1` FOREIGN KEY (`u_id`) REFERENCES `user1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

user1中不存在id為6的記錄,現在添加一條id為6的記錄

insert into user1(id)values(6);


14

可以看到數據已經插入進去了

視圖

是一張虛擬表,由 select select select語句指定的數據結構和數據,不生成真實文件

create view mikel as select * from school.books;

select  * from mikel;


15

六、存儲過程

存儲過程用來封裝mysql代碼,相當於函數,一次編譯,生成二進位文件,永久有效,提高效率。

1、定義存儲過程

create procedure 過程名(參數1,參數2,.............)

begin

      sql語句

end

2、調用存儲過程

call 過程名(參數1,參數2,...................)

example:定義一個存儲過程查看books表中所有數據

    1. 修改sql預設執行符號

    delimiter //

   create  procedure seebooks();

   begin

         select * from sctudent.books;

    end //

    call seebooks() //


16

3、存儲過程參數傳遞

in 傳入參數 int 賦值

IN輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變數)

OUT輸出參數:表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變數)

INOUT輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變數)

create procedure seebook(in b int)

begin

  select * from school.books where bId=b;

end //

call seebook(4)


16

out --------------傳出參數

select into 在過程中賦值傳給變數,並查看變數值

create procedure seebook2(out b varchar(100))

begin

  select bName into b  from school.books where bId=4;

end //


17

過程內的變數使用方法

聲明變數名稱,類型,declare 過程內的變數沒有@

賦值 set 變數名=(select 語句)

create procedure seebook3()

begin 

        declare str varchar(100);

        set str=(select bName from school.books where bId=20);

        select str;

end//

call seebook3() //


18

1、觸發器

與數據表有關,當表出現(增,刪,改,查)時,自動執行其特定的操作

語法:create trigger 觸發器名稱 觸發器時機 觸發器動作 on 表名 for each row

觸發器名稱:自定義

觸發器時機:after/before   之後/之前

觸發器動作:insert  update  delete

創建觸發器:

 create trigger delstudent after delete on grade for each now

delete from student where sid='4';

delete from grade where sid=4;

mysql> select sid from student where sid=4;

Empty set

查看是否還有sid=4的值,可以發現已經被刪除

2、事務

單個邏輯單元執行的一系列操作,通過將一組操作組成一個,執行的時要麼全部成功,要麼全部失敗,使程式更可靠,簡化錯誤恢復。

MySQL 事務主要用於處理操作量大,複雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些資料庫操作語句就構成一個事務!

在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支持事務。

事務處理可以用來維護資料庫的完整性,保證成批的 SQL 語句要麼全部執行,要麼全部不執行。事務用來管理 insert,update,delete 語句。

MYSQL 事務處理主要有兩種方法:

1、用 BEGIN, ROLLBACK, COMMIT來實現

BEGIN 開始一個事務

ROLLBACK 事務回滾

COMMIT 事務確認

2、直接用 SET 來改變 MySQL 的自動提交模式:

SET AUTOCOMMIT=0 禁止自動提交

SET AUTOCOMMIT=1 開啟自動提交

創建事務

begin;

update books set bName="plyx" where bId=1;

update books set bName="plyx" where bId=2;

commit//

查看記錄,已經修改了

select * from books;


19

七、mysql數據結構

主配置文件  my.cnf

數據目錄:/var/lib/mysql

進程通信sock文件 :/var/lib/mysql/mysql.sock

錯誤日誌文件

[mysqld_safe]

log-error=/var/log/mysqld.log

進程PID文件:pid-file=/var/run/mysqld/mysqld.pid

二進位文件:log-bin=mysql-bin.log

八.常見的存儲引擎介紹

myisam :

特性: 1、不支持事務,不支持外鍵,宕機時會破壞表

            2、使用較小的記憶體和磁碟空間,訪問速度快

            3、基於表的鎖,表級鎖

            4、mysql 只緩存index索引, 數據由OS緩存

適用場景:日誌系統,門戶網站,低併發。

Innodb:

特性:1、具有提交,回滾,崩潰恢復能力的事務安全存儲引擎

           2、支持自動增長列,支持外鍵約束

           3、占用更多的磁碟空間以保留數據和索引

           4、不支持全文索引

適用場景:需要事務應用,高併發,自動恢復,輕快基於主鍵操作

MEMORY:

特性:1、Memory存儲引擎使用存在於記憶體中的內容來創建表。

           2、每個memory表只實際對應一個磁碟文件,格式是.frm。memory類型的表訪問非常的快,因為它的數據是放在記憶體中的,並且預設使用HASH索引,但是一旦服務關閉,表中的數據就會丟失掉。 

          3、MEMORY存儲引擎的表可以選擇使用BTREE索引或者HASH索引。

九、思考與總結

到此主要介紹,mysql一些使用技巧,包括數據類型,查詢方法,存儲過程,外鍵約束,索引。觸發器,事務,還包含一些存儲引擎介紹,到此基礎部分結束,還有後面的分享將會陸續推出,敬請期待!


總結

我是MIkel Pan,雲計算愛好者,定期更新生活感悟,心靈進化者就在MIkel Pan,喜歡我就來找我吧!

博客園地址:http://www.cnblogs.com/plyx/

簡書地址:https://www.jianshu.com/u/5986765934f4


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Create database database name;//創建資料庫 Show databases dbName; //顯示所有資料庫 Create table tableName; //創建表 Show tables tName; //顯示所有表 Alter table oldName re... ...
  • DDL(數據定義語言)操作 Hive配置單元包含一個名為 default 預設的資料庫. create database [if not exists] <database name>; 創建資料庫 show databases | schemas; --顯示所有資料庫 drop database ...
  • 簡介 Hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件 映射為一張資料庫表,並提供類 SQL 查詢功能。 本質是將 SQL 轉換為 MapReduce 程式。 Hive組件 用戶介面:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command linein ...
  • 廣義上來說,Hadoop大數據平臺也可以看做是新一代的數據倉庫系統, 它也具有很多現代數據倉庫的特征,也被企業所廣泛使用。因為MPP架構的可擴展性,基於MPP的數據倉庫系統有時候也被劃分到大數據平臺類產品。 但是數據倉庫和Hadoop平臺還是有很多顯著的不同。針對不同的使用場景其發揮的作用和給用戶帶 ...
  • 問題是服務裡面mysql沒有啟動或者mysql服務丟失 解決辦法: 開始->運行->cmd,進到mysql安裝的bin目錄(以我的為例,我的安裝在D盤)D:\MySQL\bin>mysqld.exe -installService successfully installed. 這個時候刷新服務列表 ...
  • 採集目錄到HDFS 使用flume採集目錄需要啟動hdfs集群 spooldir source 監控指定目錄 如果目錄下有新文件產生 就採集走 註意!!! 此組件監控的目錄不能有同名的文件產生 一旦有重名文件:報錯 罷工 註意!!! 此組件監控的目錄不能有同名的文件產生 一旦有重名文件:報錯 罷工 ...
  • 概述 Flume 是 Cloudera 提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的軟體。 Flume 的核心是把數據從數據源(source)收集過來,再將收集到的數據送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存數據(chann ...
  • 概述 序列化(Serialization)是指把結構化對象轉化為位元組流。 反序列化(Deserialization)是序列化的逆過程。把位元組流轉為結構化對象。 當要在進程間傳遞對象或持久化對象的時候,就需要序列化對象成位元組流,反之當要將接收到或從磁碟讀取的位元組流轉換為對象,就要進行反序列化。 Jav ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...