My SQL

數據庫是一個軟件,包含服務端和客戶端

一般安裝數據庫指的是安裝服務端(基本上所有數據庫都會自帶命令行客戶端)

學習客戶端:MySQL Command Line

Windows CMD

啟動服務:net start myaql

停止服務:net stop mysql

連接:mysql -uroot用戶名 -p密碼 -h主機地址(登錄本機的就不用這個)

退出:quit、exit、\q

數據概念:

發展:人工記錄(紙質)

軟件? ? ? (office)

數據庫? ? (MySQL? ? Oracle? ? SQLServer)

數據庫分類:

關系型數據庫:

MySQL (中小型,開源,Oracle)

Oracle(大型,收費)

SQLServer(中大型,收費,微軟)

SQLLinte(安卓包含)

說明:一個數據庫內裝若干個表格,以表存儲數據,

關系指的是行和列的關系和表與表之間關系。

非關系型數據庫:

NOSQL? ? ManggoDB

如何查看當前數據庫服務器下有哪些數據庫:

show databases;

創建數據庫

create database 這里寫自己取的名稱;

如何刪除數據庫:

drop database 創建的數據庫的名稱;

如何創建數據表:

先找到需要創建數據表的數據庫:

use 數據庫名稱;

? ? ? ? ? ? ? create table? 表名(

? ? ? ? ? ? ? ? ? ? ? ? 編號 int,整數

? ? ? ? ? ? ? ? ? ? ? ? 名稱 varchar(范圍),字符串

? ? ? ? ? ? ? ? ? ? ? ? 價格 double,小數

? ? ? ? ? ? ? ? ? ? ? ? ? 日期? date,日期

? ? ? ? ? ? ? ? ? ? );

如何查看數據庫中創建的數據表:

show tables;

刪除數據表:

drop table 數據表名稱;


查看數據表的結構:

desc 數據表名稱;


如何添加數據到數據表中(1):

insert into 數據表的名稱? values(列1的值,列2的值,列3的值,列4的值,............);

在需要添加數據的列中插入某列的數據(2):

inert into 數據表名稱(列名,列名,列名,列名.......) values(值,值,值,值);


查看數據表中的數據:

select * from 數據表的名稱;


數據類型:

日期和時間類型:

字符串類型:

數據表的約束:

一、主鍵約束:區分表中的數據行,唯一的,不能為空。

? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int primary key,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(10)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );

二、非空約束:要求這一列插入數據時必須給值。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int primary key,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20)?not null

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );


三、默認值:在某一列中設置默認值

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int?primary key,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20)?not null,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? age int?default '默認的字符'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );


四、唯一約束:不允許重復的

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int?primary key,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20)?not null,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? age int?default '默認的字符',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tel varchar(15)?unique

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );


五、外鍵約束

在主鍵列表中:constrain fk_主外鍵表名稱_副外鍵表名稱_外鍵列名稱 foreign key(主外鍵列名稱) references 副外鍵表名稱(外鍵列名稱)

SQL語言(Struct query language)

數據庫方言:各個數據庫特有的一種語法(不是特別多)。

標準SQL:各個數據庫通用的語法。

分類:DDL(數據定義語言) create alter drop

? ? ? ? ? ?DML(操作語言) insert delete update

? ? ? ? ? ?DQL(數據查詢語言) select

? ? ? ? ? ?DCL(數據控制語言)事務控制語言

alter 修改表結構的語句:

1、重命名表

? ? ? alter table 原數據表名 rename to 新數據表名;

2、添加列

? ? ? ? alter table 數據表名 add 列名? 類型 約束;

3、刪除列

? ? ? ?alter table 數據表名 drop 列名;

4、修改列

? ? ? ?alter table 數據表名 change 舊列名 新列明 類型 約束;

5、添加約束

主鍵約束:

alter table 主鍵數據表名 add constraint 主鍵名 primary key(主鍵列);

非空約束:

alter table 數據表名 change 列名 列名 數據類型 not null;

alter table 數據表名 modify 列名 數據類型 not null;

唯一約束:

alter table 數據表名 modify 列名 數據類型 unique;

默認值:

alter table 數據表名 modify 列名 數據類型?;

外鍵約束:

alter table 主鍵數據表名 add constraint fk_主鍵數據表名_副鍵數據表名_主鍵列名?foreign key(主外鍵列名稱) references 副外鍵表名稱(外鍵列名稱);

6、刪除約束

刪除主鍵約束:

alter table? 主鍵數據表名 drop primary key;

這樣刪除不徹底,還需要刪除非空約束:

alter table 數據表名 modify 列名 數據類型 null;

刪除外鍵約束:

alter table 主鍵數據表名 drop foreign key fk_主鍵數據表名_副鍵數據表名_主鍵列名;

刪除唯一約束:

alter table 主鍵數據表名?drop index 列名;

插入語句:

刪除數據:

delete from 數據表名 where 數據表列名 過濾條件

過濾條件:

運算符過濾:=、<、>、<=、>=、!=或者 <>

關鍵字過濾:is null(為空)? in('關鍵字','關鍵字',.......)

between 數值? and 數值

模糊篩選: like '字符'

_一個任意字符

%任意多個任意字符

邏輯運算符:

and 兩個條件同時滿足,只能在一個單元(一行)內使用。

or 滿足任意一個條件

注意過濾條件的使用:當多個條件時,需把同一個條件用()隔開

修改數據:

update 數據表名 set 列名='新值',列名='新值',.........where 列名 過濾條件;

注:更改多個列時用,隔開

查詢數據:

select 要查詢的列 from 數據表名;

給列取臨時別名:

select 列名 as '別名';

select 列名 '列名';

注意:在開發中盡量避免使用*,因為*效率低!

排序:

select 列名 from 表名 order by 列名 asc(升序);

select 列名 from 表名 order by 列名 desc(降序);

結果限定:

select 列名 from 表名 limit 跳過的長度 ,要取出的長度;(如果沒有跳過的長度,那就代表要跳過的長度為零)

列運算:

把查詢結果進行數學運算,不會影響表中的數據,只是這次查詢中生效

用+ - * / %

當有null時,和任何數據運算都為null

ifnull(列名,0),取代原列名

concat('字符',原列名),原列名前加字符

分組,方便統計

統計總數:count(列名,*)

注意:null 不計入統計

去除重復 distinct

統計最大值:max(列)

統計最小值:min(列)

統計平均值:avg(列)

統計和:sum(列)

日期函數:

獲取年:year(列名)

獲取月:month(列名)

獲取號:day(列名)

獲取本地日期時間:now()

分組:

select 列名 from 表名 group by 分組列

注:如果是用列名進行篩選在group by前用where進行條件篩選,如果是用統計函數進行篩選在group by后用having進行條件篩選!

SQL語言執行順序:

from→where→group→select→having→order by→limit

復合查詢:

子查詢(嵌套查詢)

select 列名 from 表名 where? 列名 運算符(select 列名 from 表名)

處理多行子查詢:子查詢返回了多個值。

any:任意

>any:大于最小的那一個

<any:小于最大的那一個

all:全部

>all:大于最大的那一個

<all:小于最小的那一個

in:集合

連接查詢:

等值連接

select 列名 from 表名 ,表名......where 連接條件;

多表連接查詢時盡量使用別名,以解決列名沖突;沒有表名要使用表名.列名如圖:

外鏈接:

左外連接:左外全部顯示,右邊無法匹配的顯示null

select 列名 from 表名?left join?表名?on?連接條件

右外連接:右外全部顯示,左邊無法匹配的顯示null

select 列名 from 表名?right join?表名?on?連接條件

全外連接:

注:MySQL中不支持使用 ,只能用union,同時union all 合并結果不會去掉重復,使用union合并結果會去掉重復

select 列名 from 表名?left join?表名?on?連接條件union?select 列名 from 表名right join表名?on?連接條件


數據庫軟件:navicat.11.2.16.premium_cs_x64.zip


在數據庫軟件中查詢多個外連接表:

虛表:不是數據庫物理存在的表,是把一個查詢結果視為一張表使用,使用虛表要使用別名。

視圖表:

創建視圖表:

create view 自定義表名 as 后面跟上自己所需要顯示的表列和條件

使用視圖表:select * from 視圖表名

刪除視圖表:drop view 視圖表名

注意:可以修改視圖表中的數據,但是不能刪除視圖表中的數據(使用連接查詢的視圖包含 join)不能添加視圖表中的數據,原數據表里的數據發生變化會在視圖表中變化體現出來。

索引:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • SQL SELECT 語句 一、查詢SQL SELECT 語法 (1)SELECT 列名稱 FROM 表名稱 (2...
    有錢且幸福閱讀 5,654評論 0 33
  • 什么是SQL數據庫: SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 1,850評論 0 10
  • 系統用戶: 1.sys system(sys權限最高) 2.sysman(操作企業管理器) 密碼是安裝的時候輸入的...
    3hours閱讀 1,602評論 0 0
  • 學習web安全足足有一個半月有余,之前學的是前端,也會一點python。。好吧差不多忘了。常規工具算是熟悉基本...
    一葉紅塵哦喲閱讀 3,403評論 4 92
  • 關鍵詞:閉包(closure) 概念:閉包就是能夠讀取其他函數內部變量的函數,對于js,閉包就是將函數內部和函數外...
    ferrint閱讀 665評論 0 0