MySQL筆記

數(shù)據(jù)庫的相關(guān)概念

數(shù)據(jù)庫的好處


????1睛驳、持久化數(shù)據(jù)到本地

????2凰浮、可以實(shí)現(xiàn)結(jié)構(gòu)化查詢,方便管理

數(shù)據(jù)庫的常見概念??☆


????1拙已、DB:數(shù)據(jù)庫决记,保存一組有組織的數(shù)據(jù)的容器

????2、DBMS:數(shù)據(jù)庫管理系統(tǒng)倍踪,又稱為數(shù)據(jù)庫軟件(產(chǎn)品)系宫,用于管理DB中的數(shù)據(jù)

????3、SQL:結(jié)構(gòu)化查詢語言惭适,用于和DBMS通信的語言

數(shù)據(jù)庫存儲的特點(diǎn)


????1、將數(shù)據(jù)放到表中楼镐,表再放到庫中

????2癞志、一個數(shù)據(jù)庫中可以有多個表,每個表都有一個名字框产,用來標(biāo)識自己凄杯,表具有唯一性错洁。

????3、表具有一些特征戒突,這些特性定義了數(shù)據(jù)在表中如何存儲屯碴,類似java中“類”的設(shè)計。

????4膊存、表由列組成导而,我們也稱為字段。所有表都是由一個或多個列組成的隔崎,每一列類似java中的屬性今艺。

????5熬北、表中的數(shù)據(jù)是按行執(zhí)行存儲的孙咪,每一行類似于java中的“對象”毙籽。

常見的數(shù)據(jù)庫管理系統(tǒng)


????mysql紧卒、oracle畏妖、db2戴陡、sqlserver...

#MySQL的介紹

##一贱傀、MySQL的背景

????前身屬于瑞典的一家公司 MySQL AB

????06年被sun公司收購

????09年sun被oracle收購

MySQL的介紹?

MySQL的背景


????前身屬于瑞典的一家公司 MySQL AB

????06年被sun公司收購

????09年sun被oracle收購

MySQL的優(yōu)點(diǎn)


????1荞雏、開源轴合、免費(fèi)创坞、成本低

????2、性能高值桩、移植性好

????3摆霉、體積小、便于安裝

MySQL產(chǎn)品的安裝


????屬于c/s架構(gòu)的軟件奔坟,一般來講安裝服務(wù)端

????企業(yè)版

????社區(qū)版

MySQL服務(wù)的啟動和停止

????方式一:計算機(jī)--右鍵管理--服務(wù)

????方式二:通過管理員身份運(yùn)行

????net start 服務(wù)名(啟動服務(wù))(MySQL55)

????net stop 服務(wù)名(停止服務(wù))(MySQL55)

MySQL服務(wù)的登錄與退出

????方式一:通過MySQL自帶的客戶端

????只限于root用戶

????方式二:通過windows自帶的客戶端

????登錄:

????mysql 【-h主機(jī)名(localhost) -P端口號(3306)】 -u用戶名(root) -p密碼(admin)

????eg:mysql -h localhost -P3306 -u root -padmin

????????mysql -u root -padmin

????退出:

????exit或者Ctrl+C

MySQL的常見命令

????1携栋、查看當(dāng)前所有的數(shù)據(jù)庫

????show databases;

????2、打開指定的庫

????use 庫名;

????3咳秉、查看當(dāng)前庫的所有表

????show tables;

????4婉支、查看其他庫的所有表

????show tables from 庫名;

????5、創(chuàng)建表

????create table 表名(

????????列名 列類型,(如:name varchar<20>,)

????????列名 列類型澜建,

????????...

????);

????6向挖、查看表結(jié)構(gòu)

????desc 表名;

????7、查看服務(wù)器的版本

????方式一:登錄到mysql服務(wù)端

????select version();

????方式二:沒有登錄到mysql服務(wù)端

????mysql --version

????或

????mysql --V

MySQL的語法規(guī)范

????1炕舵、不區(qū)分大小寫何之,建議關(guān)鍵字大寫,表名列名小寫

????2咽筋、每條命令最好用分號結(jié)尾(還有一種\g)

????3溶推、每條命令可以根據(jù)需要,可以進(jìn)行縮進(jìn)或換行

????4、注釋

????????單行注釋:#注釋文字

????????單行注釋:-- 注釋文字(注意:注釋文字前有一個空格)

????????多行注釋:/*注釋文字*/

DQL語言

????DQL(Data Query Language) 數(shù)據(jù)查詢語言

基礎(chǔ)查詢


語法

????select 查詢列表

????from 表名;

二蒜危、特點(diǎn)

????1虱痕、查詢列表可以使字段、常量辐赞、表達(dá)式部翘、函數(shù)、也可以是多個

????2响委、查詢結(jié)果是一個虛擬表

三新思、實(shí)例

????1、查詢某個字段

????select 字段名 from 表名;

????2晃酒、查詢多個字段

????select 字段名,字段名 from 表名;

????3表牢、查詢所有字段

????select * from 表名

????4、查詢常量

????select 常量值:

????注意:字符型和日期型的常量值必須用單引號引起來贝次,數(shù)值型不需要

????5崔兴、查詢函數(shù)

????select函數(shù)名(實(shí)參列表);

????6、查詢表達(dá)式

????select 100/125;

????7蛔翅、起別名

????①as

????②空格

????8敲茄、去重

????select distinct 字段名 from 表名;

????9、+

????作用:做加法運(yùn)算

????select 數(shù)值+數(shù)值; 直接運(yùn)算

????select 字符+數(shù)值; 先試圖將字符轉(zhuǎn)換成數(shù)值山析,如果轉(zhuǎn)換成功堰燎,則繼續(xù)運(yùn)算,否則轉(zhuǎn)換成0笋轨,在做運(yùn)算

????select null+值; 結(jié)果為null

????10秆剪、【補(bǔ)充】contact函數(shù)

????功能:拼接字符

????select concat(字符1,字符2,...);

????11、【補(bǔ)充】ifnull函數(shù)

????功能:判斷某字段或表達(dá)式是否為null爵政,如果為null仅讽,返回給定的值,否則返回原本的值

????select ifnull(commission_pct,0) from employees;

????12钾挟、【補(bǔ)充】isnull函數(shù)

????功能:判斷某字段或表達(dá)式是否為null洁灵,如果是,則返回1掺出,否則返回0

????select isnull(commission_pct,0) from employees;

條件查詢


語法

????select 查詢列表

????from 表名

????where 篩選條件;

篩選條件的分類

????1徽千、簡單運(yùn)算符

????> < = <> != >= <= <=>安全等于

????2、邏輯運(yùn)算符

????&& and

????|| of

????!??not

????3汤锨、模糊查詢

????like:一般搭通配符使用双抽,用于判斷字符型或數(shù)值型

????通配符:%任意多個字符,_任意單個字符闲礼。

????between and

????in

????is null / is not null:用于判斷null值

????is null 和 <=> 的 PK

????is null:僅可以判斷null值牍汹,可讀性較高琅翻,建議使用

<=>: 既可以判斷null值,又可以判斷數(shù)值柑贞,可讀性較低

排序查詢


語法

????select 查詢列表

????from 表

????where 篩選條件

????order by 排序列表 【asc|desc】

特點(diǎn)

????1、asc :升序聂抢,如果不寫默認(rèn)升序

???????desc:降序

????2钧嘶、排序列表 支持 單個字段、多個字段琳疏、函數(shù)有决、表達(dá)式、別名

????????# 例子, 根據(jù)年薪進(jìn)行排序

????????SELECT

????????????*, (salary * (1 + ifnull( commission_pct, 0))??* 12) as year_salary

????????FROM

????????????employees?

????????ORDER BY

????????????year_salary DESC;

????????# 按照員工的姓名的長度進(jìn)行排序

????????select?

????????????*, concat(first_name, ' ', last_name) as 'name'

????????from?

????????????employees

????????order by

????????????length(name) desc;

????3空盼、order by的位置一般放在查詢語句的最后(除limit語句之外)

常見函數(shù)


概述

????功能:類似于java中的方法

????好處:提高重用性和隱藏實(shí)現(xiàn)細(xì)節(jié)

????調(diào)用:select 函數(shù)名(實(shí)參列表),和程序中的函數(shù)使用方法類似.

單行函數(shù)

1书幕、字符函數(shù)

????concat:連接

????substr:截取子串

????????# sql中的索引都是從1開始的

????????# 只有一個參數(shù)表示從指定索引往后截取剩下的.

????????select substr('中國人民站起來了', 4) as out_put;

????????# 兩個參數(shù)時, 第一個參數(shù)是起始索引位置, 第二個參數(shù)是截取的長度

????????select substr('中國人民站起來了', 2, 3) as out_put;?

????upper:變大寫

????lower:變小寫

????replace:替換??全部替換

????????select replace('aaaabbbbcccc', 'b', 'x');??--> aaaaxxxxcccc

????length:獲取字節(jié)長度, 需要根據(jù)編碼類型來看

????????select length('漢字123')??--> 9

????trim:去前后空格

????????# 去除前后指定的字符, 默認(rèn)是去除空格

????????select trim('a' from 'aaaa中國aaa人aaaaa');??---> 中國aaa人

????lpad:用指定字符左填充

????????select lpad('ab', 5, 'x');??--> xxxab

????rpad:用指定字符右填充

????????select rpad('abcde', 3, 'x');??--> abc???相當(dāng)于被截取了

????instr:獲取子串第一次出現(xiàn)的索引, 不存在則返回0, 索引位置從1開始

2、數(shù)學(xué)函數(shù)

????ceil:向上取整

????round:四舍五入

????mod:取模

????????# mod的算法: a % b = a - a / b * b 除是整除

????????select mod(-10, -3); --> -1

????????select mod(-10, 3);??--> -1

????floor:向下取整

????truncate:截斷??truncate(1.652656,1);=======>1.6

????rand:獲取隨機(jī)數(shù)揽趾,返回0-1之間的小數(shù)

3台汇、日期函數(shù)

????now:返回當(dāng)前日期+時間

????year:返回年

????month:返回月

????day:返回日

????date_format:將日期轉(zhuǎn)換成字符

????curdate:返回當(dāng)前日期

????str_to_date:將字符轉(zhuǎn)換成日期

????curtime:返回當(dāng)前時間

????hour:小時

????minute:分鐘

????second:秒

????datediff:返回兩個日期相差的天數(shù)

????monthname:以英文形式返回月

4、其他函數(shù)

????version 當(dāng)前數(shù)據(jù)庫服務(wù)器的版本

????database 當(dāng)前打開的數(shù)據(jù)庫

????user當(dāng)前用戶

????password('字符'):返回該字符的密碼形式

????md5('字符'):返回該字符的md5加密形式

5篱瞎、流程控制函數(shù)

????1苟呐、if(條件表達(dá)式,表達(dá)式1俐筋,表達(dá)式2):如果條件表達(dá)式成立牵素,返回表達(dá)式1,否則返回表達(dá)式2

????2澄者、 case 情況1

????case 變量或表達(dá)式或字段

????when 常量1 then 值1

????when 常量2 then 值2

????...

????else 值n

????end

????????# 例子

????????/*

????????部門id是30, 工資1.1

????????部門id是40, 工資1.2

????????部門id是50, 工資1.3

????????否則, 不變??

????????*/

????????SELECT

????????????salary AS 原始工資,

????????????department_id,

????????CASE

????????????department_id?

????????????WHEN 30 THEN

????????????salary * 1.1?

????????????WHEN 40 THEN

????????????salary * 1.2?

????????????WHEN 50 THEN

????????????salary * 1.3 ELSE salary?

????????????END AS 新工資?

????????FROM

????????????employees;

????3笆呆、 case 情況2

????case?

????when 條件1 then 值1

????when 條件2 then 值2

????...

????else 值n

????end

????# 例子

????????/*

????????工資> 20000 a級別

????????工資> 15000 a級別

????????工資> 10000 a級別

????????否則, d

????????*/??

????????select?

????????????salary as '工資',

????????case

????????????when salary > 20000 then 'A'

????????????when salary > 15000 then 'B'

????????????when salary > 10000 then 'C'

????????????else 'D'

????????????end as '工資級別'

????????from?

????????????employees;

分組函數(shù)

1、分類

????max 最大值

????min 最小值

????sum 和

????avg 平均值

????count 計算個數(shù)

2粱挡、特點(diǎn)

????1赠幕、 語法

????select max(字段) from 表名;

????2、支持的類型

????sum和avg一般用于處理數(shù)值型

????max抱怔、min劣坊、count可以處理任何數(shù)據(jù)類型

????3、以上分組函數(shù)都忽略null

????4屈留、都可以搭配distinct使用局冰,實(shí)現(xiàn)去重的統(tǒng)計

????select sum(distinct 字段) from 表;

????5、count函數(shù)

????count(字段):統(tǒng)計該字段非空值的個數(shù)

????count(*):統(tǒng)計結(jié)果集的行數(shù)

????案例:查詢每個部門的員工個數(shù)

????1 xx????10

????2 dd????20

????3 mm????20

????4 aa????40

????5 hh????40

????count(1):統(tǒng)計結(jié)果集的行數(shù)

????效率上:

????MyISAM存儲引擎灌危,count(*)最高

????InnoDB存儲引擎康二,count(*)和count(1)效率>count(字段)

????6、和分組函數(shù)一同查詢的字段勇蝙,要求是group by后出現(xiàn)的字段

分組查詢


語法

????select 分組函數(shù)沫勿,分組后的字段?????⑤

????from 表???????????????????????????①

????【where 篩選條件】????????????????②

????group by 分組的字段???????????????③

????【having 分組后的篩選】???????????④

????【order by 排序列表】?????????????⑥

特點(diǎn)

???????????????????????????使用關(guān)鍵字???篩選的表???????????????????位置

????分組前篩選???????where??????????原始表????????????????????group by的前面

????分組后篩選???????having?????????分組后的結(jié)果???????????group by 的后面

分組類型

????1.?通用分組, 按單個字段分組

????# 查詢領(lǐng)導(dǎo)編號>102的每個領(lǐng)導(dǎo)手下的最低工資>5000的領(lǐng)導(dǎo)編號是哪個,以及最低工資

????select?

????????manager_id,

????????min(salary) as min_salary

????from?

????????employees

????where?

????????manager_id > 102

????group by?

????????manager_id

????having?

????????min_salary > 5000;

????2.?group by 支持使用函數(shù)的結(jié)果來進(jìn)行分組

????# having和group by 都支持使用別名來進(jìn)行分組和篩選

????# 按員工的名的長度分組, 查詢每一組的員工個數(shù), 并且員工個數(shù)>5的有哪些.

????select?

????????length(last_name) as length_name,

????????count(*) as count_num

????from?

????????employees

????group by

????????length_name

????having?

????????count_num > 5;

????3.?支持多個字段進(jìn)行分組

????# 查詢每個部門每個工種的員工的平均工資, 并按工資排序

????# 這種類似于聯(lián)合主鍵一樣, 部門id和工種一樣的才算是一組

????select??

????????avg(salary),

????????department_id,

????????job_id

????from?

????????employees

????group by

????????department_id, job_id

????having?

????????avg(salary) > 10000

????order by

????????avg(salary);

連接查詢


含義

????當(dāng)查詢中涉及到了多個表的字段产雹,需要使用多表連接

????select 字段1诫惭,字段2

????from 表1,表2,...;

????笛卡爾乘積:當(dāng)查詢多個表時蔓挖,沒有添加有效的連接條件夕土,導(dǎo)致多個表所有行實(shí)現(xiàn)完全連接

????如何解決:添加有效的連接條件

分類

????按年代分類:

????sql92:

????????等值??

????????非等值

????????自連接

????????也支持一部分外連接(用于oracle、sqlserver瘟判,mysql不支持)

????sql99【推薦使用】

????內(nèi)連接

????????等值

????????非等值

????????自連接?????

????外連接

????????左外

????????右外

????????全外(mysql不支持)

????交叉連接

SQL92語法

????1怨绣、等值連接

????語法:

????????select 查詢列表

????????from 表1 別名,表2 別名

????????where 表1.key=表2.key

????????【and 篩選條件】

????????【group by 分組字段】

????????【having 分組后的篩選】

????????【order by 排序字段】

????特點(diǎn):

????????① 一般為表起別名

????????②多表的順序可以調(diào)換

????????③n表連接至少需要n-1個連接條件

????????④等值連接的結(jié)果是多表的交集部分

????2、非等值連接

????語法:

????????select 查詢列表

????????from 表1 別名,表2 別名

????????where 非等值的連接條件

????????【and 篩選條件】

????????【group by 分組字段】

????????【having 分組后的篩選】

????????【order by 排序字段】

????3拷获、自連接

????語法:

????????select 查詢列表

????????from 表 別名1,表 別名2

????????where 等值的連接條件

????????【and 篩選條件】

????????【group by 分組字段】

????????【having 分組后的篩選】

????????【order by 排序字段】

SQL99語法

????1篮撑、內(nèi)連接

????語法:

????select 查詢列表

????from 表1 別名

????【inner】 join 表2 別名 on 連接條件

????where 篩選條件

????group by 分組列表

????having 分組后的篩選

????order by 排序列表

????limit 子句;

????特點(diǎn):

????①表的順序可以調(diào)換

????②內(nèi)連接的結(jié)果=多表的交集

????③n表連接至少需要n-1個連接條件

????分類:

????等值連接

????非等值連接

????自連接

????2、外連接

????語法:

????select 查詢列表

????from 表1 別名

????left|right|full【outer】 join 表2 別名 on 連接條件

????where 篩選條件

????group by 分組列表

????having 分組后的篩選

????order by 排序列表

????limit 子句;

????特點(diǎn):

????①查詢的結(jié)果=主表中所有的行匆瓜,如果從表和它匹配的將顯示匹配行赢笨,如果從表沒有匹配的則顯示null

????②left join 左邊的就是主表,right join 右邊的就是主表

??????full join 兩邊都是主表

????③一般用于查詢除了交集部分的剩余的不匹配的行

????3驮吱、交叉連接

????語法:

????select 查詢列表

????from 表1 別名

????cross join 表2 別名;

????特點(diǎn):

????類似于笛卡爾乘積

子查詢


含義

????嵌套在其他語句內(nèi)部的select語句稱為子查詢或內(nèi)查詢质欲,

????外面的語句可以是insert、update糠馆、delete嘶伟、select等,一般select作為外面語句較多

????外面如果為select語句又碌,則此語句稱為外查詢或主查詢

分類

1九昧、按出現(xiàn)位置

????select后面:

????????????僅僅支持標(biāo)量子查詢

????from后面:

????????????表子查詢

????where或having后面:★★

????????????標(biāo)量子查詢??★

????????????列子查詢????★

????????????行子查詢

????exists后面:

????????????標(biāo)量子查詢

????????????列子查詢

????????????行子查詢

????????????表子查詢

2、按結(jié)果集的行列

????標(biāo)量子查詢(單行子查詢):結(jié)果集為一行一列

????列子查詢(多行子查詢):結(jié)果集為多行一列

????行子查詢:結(jié)果集為一行多列

????表子查詢:結(jié)果集為多行多列

示例

????where或having后面

????1毕匀、標(biāo)量子查詢

????案例:查詢最低工資的員工姓名和工資

????①最低工資

????select min(salary) from employees

????②查詢員工的姓名和工資铸鹰,要求工資=①

????select last_name,salary

????from employees

????where salary=(

????????select min(salary) from employees

????);

????2、列子查詢

????案例:查詢所有是領(lǐng)導(dǎo)的員工姓名

????①查詢所有員工的 manager_id

????select manager_id

????from employees

????②查詢姓名皂岔,employee_id屬于①列表的一個

????select last_name

????from employees

????where employee_id in(

????????select manager_id

????????from employees

????);

????# 查詢有員工表的部門名字, 相當(dāng)于拿著部門表的每條記錄去和員工表的記錄做篩選, 看是否存在值

????# exists本質(zhì)上是返回一個bool值類型的數(shù)據(jù)

????select department_name

????from departments as d

????where exists(

????????????select d.department_id from employees??as e

????????????where d.department_id = e.department_id

????)

分頁查詢


應(yīng)用場景

????當(dāng)要查詢的條目數(shù)太多蹋笼,一頁顯示不全

二、語法

????select 查詢列表

????from 表

????limit 【offset,】size;

????注意:

????offset代表的是起始的條目索引躁垛,默認(rèn)從0開始

????size代表的是顯示的條目數(shù)

????公式:

????假如要顯示的頁數(shù)為page剖毯,每一頁條目數(shù)為size

????from 表

????limit (page-1)*size,size;

????連接的總的順序語法:(這里存疑?)

????select 查詢列表?????⑦

????from 表1 別名???????①

????連接類型 join 表2???②

????on 連接條件?????????③

????where 篩選??????????④

????group by 分組列表???⑤

????having 篩選?????????⑥

????order by排序列表????⑧

????limit 起始條目索引,條目數(shù);??⑨

聯(lián)合查詢


一教馆、含義

????union:合并逊谋、聯(lián)合,將多次查詢結(jié)果合并成一個結(jié)果

二土铺、語法

????查詢語句1

????union 【all】

????查詢語句2

????union 【all】

????...

三胶滋、意義

????1板鬓、將一條比較復(fù)雜的查詢語句拆分成多條語句

????2、適用于查詢多個表的時候究恤,查詢的列基本是一致

四俭令、特點(diǎn)

????1、要求多條查詢語句的查詢列數(shù)必須一致

????2部宿、要求多條查詢語句的查詢的各列類型唤蔗、順序最好一致

????3、union 去重窟赏,union all包含重復(fù)項 即union默認(rèn)是去重的.

查詢總結(jié)


一、語法

????select 查詢列表?????⑦

????from 表1 別名???????①

????連接類型 join 表2???②

????on 連接條件?????????③

????where 篩選??????????④

????group by 分組列表???⑤

????having 篩選?????????⑥

????order by排序列表????⑧

????limit 起始條目索引箱季,條目數(shù);??⑨

DML語言

????DML(Data Manipulation Language)數(shù)據(jù)操縱語言

一涯穷、插入


一、方式一:

????語法:

????insert into 表名(字段名,...) values(值,...);

????特點(diǎn):

????1藏雏、要求值的類型和字段的類型要一致或兼容

????2拷况、字段的個數(shù)和順序不一定與原始表中的字段個數(shù)和順序一致

????但必須保證值和字段一一對應(yīng)

????3、假如表中有可以為null的字段掘殴,注意可以通過以下兩種方式插入null值

????①字段和值都省略

????②字段寫上赚瘦,值使用null

????4、字段和值的個數(shù)必須一致

????5奏寨、字段名可以省略起意,默認(rèn)所有列

方式二:

????語法:

????insert into 表名 set 字段=值,字段=值,...;

兩種方式的區(qū)別:

1.方式一支持一次插入多行,語法如下:

????insert into 表名【(字段名,..)】 values(值病瞳,..),(值揽咕,...),...;

2.方式一支持子查詢,語法如下:

????insert into 表名

????查詢語句;

二套菜、修改:


一亲善、修改單表的記錄★

????語法:update 表名 set 字段=值,字段=值 【where 篩選條件】;

二、修改多表的記錄【補(bǔ)充】

????語法:

????update 表1 別名?

????left|right|inner join 表2 別名?

????on 連接條件??

????set 字段=值,字段=值?

????where 篩選條件;

三逗柴、刪除:


方式一:使用delete

????一蛹头、刪除單表的記錄★

????語法:delete from 表名 【where 篩選條件】【limit 條目數(shù)】

????二、級聯(lián)刪除[補(bǔ)充]

????語法:

????delete 別名1,別名2 from 表1 別名?

????inner|left|right join 表2 別名?

????on 連接條件

?????【where 篩選條件】??

方式二:使用truncate

????語法:truncate table 表名

兩種方式的區(qū)別【面試題】

1.truncate刪除后戏溺,如果再插入渣蜗,標(biāo)識列從1開始

??????delete刪除后,如果再插入旷祸,標(biāo)識列從斷點(diǎn)開始

2.delete可以添加篩選條件

?????truncate不可以添加篩選條件

3.truncate效率較高

4.truncate沒有返回值

????delete可以返回受影響的行數(shù)

5.truncate不可以回滾

????delete可以回滾

DDL語言

????DDL(數(shù)據(jù)定義語言,Data Definition Language)

一袍睡、庫的管理


????一、創(chuàng)建庫

????create database 【if not exists】 庫名【 character set 字符集名】;

????二肋僧、修改庫

????alter database 庫名 character set 字符集名;

????三斑胜、刪除庫

????drop database 【if exists】 庫名;

二控淡、表的管理


????一、創(chuàng)建表 ★

????create table 【if not exists】 表名(

????????字段名 字段類型 【約束】,

????????字段名 字段類型 【約束】,

????????...

????????字段名 字段類型 【約束】?

????)

????二止潘、修改表

1.添加列

????alter table 表名 add column 列名 類型 【first|after 字段名】;

2.修改列的類型或約束

????alter table 表名 modify column 列名 新類型 【新約束】;

3.修改列名

????alter table 表名 change column 舊列名 新列名 類型;

????4 .刪除列

????alter table 表名 drop column 列名;

5.修改表名

????alter table 表名 rename 【to】 新表名;

????三掺炭、刪除表

????drop table【if exists】 表名;

????四、復(fù)制表

????1凭戴、復(fù)制表的結(jié)構(gòu)

????create table 表名 like 舊表;

????2涧狮、復(fù)制表的結(jié)構(gòu)+數(shù)據(jù)

????create table 表名?

????select 查詢列表 from 舊表【where 篩選】;

三、數(shù)據(jù)類型


????一么夫、數(shù)值型

????1者冤、整型

????tinyint、smallint档痪、mediumint涉枫、int/integer、bigint

????1?????????2????????3??????????4????????????8

????特點(diǎn):

????①都可以設(shè)置無符號和有符號腐螟,默認(rèn)有符號愿汰,通過unsigned設(shè)置無符號

????②如果超出了范圍,會報out or range異常乐纸,插入臨界值(5.5), 后面版本報錯

????③長度可以不指定衬廷,默認(rèn)會有一個長度

????長度代表顯示的最大寬度,如果不夠則左邊用0填充汽绢,但需要搭配zerofill吗跋,并且默認(rèn)變?yōu)闊o符號整型

????2、浮點(diǎn)型

????定點(diǎn)數(shù):decimal(M,D)

????浮點(diǎn)數(shù):

????????float(M,D)???4

????????double(M,D)??8

????特點(diǎn):

????①M(fèi)代表整數(shù)部位+小數(shù)部位的個數(shù)宁昭,D代表小數(shù)部位

????②如果超出范圍小腊,則報out or range異常,并且插入臨界值

????③M和D都可以省略久窟,但對于定點(diǎn)數(shù)秩冈,M默認(rèn)為10,D默認(rèn)為0

????④如果精度要求較高斥扛,則優(yōu)先考慮使用定點(diǎn)數(shù)

????二入问、字符型

????char、varchar稀颁、binary芬失、varbinary、enum匾灶、set棱烂、text、blob

????char:固定長度的字符,寫法為char(M)臂容,最大長度不能超過M,其中M可以省略艾猜,默認(rèn)為1

????varchar:可變長度的字符衬鱼,寫法為varchar(M)业筏,最大長度不能超過M,其中M不可以省略

????三鸟赫、日期型

????year年

????date日期

????time時間

????datetime 日期+時間??????????8??????

????timestamp 日期+時間?????????4???比較容易受時區(qū)蒜胖、語法模式、版本的影響抛蚤,更能反映當(dāng)前時區(qū)的真實(shí)時間

四台谢、常見的約束


一、常見的約束

????NOT NULL:非空岁经,該字段的值必填

????UNIQUE:唯一朋沮,該字段的值不可重復(fù)

????DEFAULT:默認(rèn),該字段的值不用手動插入有默認(rèn)值

????CHECK:檢查蒿偎,mysql不支持

????PRIMARY KEY:主鍵,該字段的值不可重復(fù)并且非空??unique+not null

????FOREIGN KEY:外鍵怀读,該字段的值引用了另外的表的字段

????主鍵和唯一

????1诉位、區(qū)別:

????①、一個表至多有一個主鍵菜枷,但可以有多個唯一

????②苍糠、主鍵不允許為空,唯一可以為空

????2啤誊、相同點(diǎn)

????都具有唯一性

????都支持組合鍵岳瞭,但不推薦

????★注意: 唯一約束在5.7版本允許多個值為空

????外鍵:

????1、用于限制兩個表的關(guān)系蚊锹,從表的字段值引用了主表的某字段值

????2瞳筏、外鍵列和主表的被引用列要求類型一致,意義一樣牡昆,名稱無要求

????3姚炕、主表的被引用列要求是一個key(一般就是主鍵)

????4、插入數(shù)據(jù)丢烘,先插入主表

????刪除數(shù)據(jù)柱宦,先刪除從表

????可以通過以下兩種方式來刪除主表的記錄

????#方式一:級聯(lián)刪除

????ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;

????#方式二:級聯(lián)置空

????ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

二、創(chuàng)建表時添加約束

????create table 表名(

????????字段名 字段類型 not null,#非空

????????字段名 字段類型 primary key,#主鍵

????????字段名 字段類型 unique,#唯一

????????字段名 字段類型 default 值,#默認(rèn)

????????constraint 約束名 foreign key(字段名) references 主表(被引用列)

????)

????注意:

????????????????????????????支持類型????????????????????????????????可以起約束名??????????

????列級約束? ? ? ? ?除了外鍵????????????????????????????????????不可以

????表級約束????????除了非空和默認(rèn)? ? ? ? ? ? ? ? ? ? ? ?可以播瞳,但對主鍵無效

????列級約束可以在一個字段上追加多個掸刊,中間用空格隔開,沒有順序要求

三赢乓、修改表時添加或刪除約束

????1忧侧、非空

????添加非空

????alter table 表名 modify column 字段名 字段類型 not null;

????刪除非空

????alter table 表名 modify column 字段名 字段類型 ;

????2石窑、默認(rèn)

????添加默認(rèn)

????alter table 表名 modify column 字段名 字段類型 default 值;

????刪除默認(rèn)

????alter table 表名 modify column 字段名 字段類型 ;

????3、主鍵

????添加主鍵

????alter table 表名 add【 constraint 約束名】 primary key(字段名);

????刪除主鍵

????alter table 表名 drop primary key;

????4苍柏、唯一

????添加唯一

????alter table 表名 add【 constraint 約束名】 unique(字段名);

????刪除唯一

????alter table 表名 drop index 索引名;

????5尼斧、外鍵

????添加外鍵

????alter table 表名 add【 constraint 約束名】 foreign key(字段名) references 主表(被引用列);

????刪除外鍵

????alter table 表名 drop foreign key 約束名;

四、自增長列

????特點(diǎn):

????1试吁、不用手動插入值棺棵,可以自動提供序列值,默認(rèn)從1開始熄捍,步長為1

????auto_increment_increment

????如果要更改起始值:手動插入值

????如果要更改步長:更改系統(tǒng)變量

????set auto_increment_increment=值;

????2烛恤、一個表至多有一個自增長列

????3、自增長列只能支持?jǐn)?shù)值型

????4余耽、自增長列必須為一個key

????一缚柏、創(chuàng)建表時設(shè)置自增長列

????create table 表(

????????字段名 字段類型 約束 auto_increment

????)

????二、修改表時設(shè)置自增長列

????alter table 表 modify column 字段名 字段類型 約束 auto_increment

????三碟贾、刪除自增長列

????alter table 表 modify column 字段名 字段類型 約束?

TCL語言

事務(wù):


????一币喧、含義

????事務(wù):一條或多條sql語句組成一個執(zhí)行單位,一組sql語句要么都執(zhí)行要么都不執(zhí)行

????二袱耽、特點(diǎn)(ACID)

????A 原子性:一個事務(wù)是不可再分割的整體杀餐,要么都執(zhí)行要么都不執(zhí)行

????C 一致性:一個事務(wù)可以使數(shù)據(jù)從一個一致狀態(tài)切換到另外一個一致的狀態(tài)

????I 隔離性:一個事務(wù)不受其他事務(wù)的干擾,多個事務(wù)互相隔離的

????D 持久性:一個事務(wù)一旦提交了朱巨,則永久的持久化到本地

????三史翘、事務(wù)的使用步驟 ★

????了解:

????隱式(自動)事務(wù):沒有明顯的開啟和結(jié)束,本身就是一條事務(wù)可以自動提交冀续,比如insert琼讽、update、delete

????顯式事務(wù):具有明顯的開啟和結(jié)束

????使用顯式事務(wù):

????①開啟事務(wù)?

????????1.?set autocommit=0; 用來禁止使用當(dāng)前會話的自動提交洪唐。這就相當(dāng)于一直處于事務(wù)狀態(tài).

????????2.?start transaction 或 begin;#可以省略

????②編寫一組邏輯sql語句

????注意:sql語句支持的是insert钻蹬、update、delete

????設(shè)置回滾點(diǎn):

????savepoint 回滾點(diǎn)名;

????③結(jié)束事務(wù)

????提交:commit;

????回滾:rollback;

????回滾到指定的地方:rollback to 回滾點(diǎn)名;

????四凭需、并發(fā)事務(wù)

????1脉让、事務(wù)的并發(fā)問題是如何發(fā)生的?

????多個事務(wù) 同時 操作 同一個數(shù)據(jù)庫的相同數(shù)據(jù)時

????2功炮、并發(fā)問題都有哪些溅潜?

????臟讀:一個事務(wù)讀取了其他事務(wù)還沒有提交的數(shù)據(jù),讀到的是其他事務(wù)“更新”的數(shù)據(jù)

????不可重復(fù)讀:一個事務(wù)多次讀取薪伏,結(jié)果不一樣

????幻讀:一個事務(wù)讀取了其他事務(wù)還沒有提交的數(shù)據(jù)滚澜,只是讀到的是其他事務(wù)“插入”的數(shù)據(jù)

????3、如何解決并發(fā)問題

????通過設(shè)置隔離級別來解決并發(fā)問題

????4.?查看及設(shè)置當(dāng)前事務(wù)的隔離級別

????select @@tx_isolation;

????# 設(shè)置當(dāng)前會話的事務(wù)隔離級別

????set session transaction isolation level read uncommitted;??# 讀未提交

????set session transaction isolation level read committed;????# 讀已提交

????set session transaction isolation level repeatable read;???# 可重復(fù)讀??默認(rèn)的隔離級別

????set session transaction isolation level serializable ;?????# 串行化嫁怀, 最高的隔離級別

????# 查看...

????mysql> select @@tx_isolation;

+------------------+

????| @@tx_isolation???|

+------------------+

????| READ-UNCOMMITTED |

+------------------+

????5设捐、隔離級別

?????????????????????????????????????????????????????????臟讀??????????不可重復(fù)讀????????幻讀

????read uncommitted:????讀未提交? ? ?????×????????????????×??????????????????????×????????

????read committed:????讀已提交??????????√????????????????×??????????????????????×

????repeatable read:????可重復(fù)讀?????????√????????????????√??????????????????????×

????serializable:????????????串行化? ? ? ? ? ? ?√????????????????√??????????????????????√

其他

視圖:


一借浊、含義

????mysql5.1版本出現(xiàn)的新特性,本身是一個虛擬表萝招,它的數(shù)據(jù)來自于表蚂斤,通過執(zhí)行時動態(tài)生成。

????好處:

????1槐沼、簡化sql語句

????2曙蒸、提高了sql的重用性

????3、保護(hù)基表的數(shù)據(jù)岗钩,提高了安全性

二纽窟、創(chuàng)建

????create view 視圖名

????as

????查詢語句;

三、修改

????方式一:

????create or replace view 視圖名

????as

????查詢語句;

????方式二:

????alter view 視圖名

????as

????查詢語句

四兼吓、刪除

????drop view 視圖1臂港,視圖2,...;

五、查看

????desc 視圖名;

????show create view 視圖名;

六视搏、使用

1.插入 insert

2.修改 update

3.刪除 delete

4.查看 select

????注意:視圖一般用于查詢的审孽,而不是更新的,所以具備以下特點(diǎn)的視圖都不允許更新

????① 包含分組函數(shù)浑娜、group by佑力、distinct、having棚愤、union搓萧、

????② join

????③ 常量視圖

????④ where后的子查詢用到了from中的表

????⑤ 用到了不可更新的視圖

七杂数、視圖和表的對比

????????????????關(guān)鍵字???????????是否占用物理空間????????????????????使用

????視圖?????view? ? ? ? ? ? ? 占用較小宛畦,只保存sql邏輯??????一般用于查詢

????表? ? ? ? table???????????????保存實(shí)際的數(shù)據(jù)?????????????????????增刪改查

變量


????分類

????一、系統(tǒng)變量

????說明:變量由系統(tǒng)提供的揍移,不用自定義

????語法:

????①查看系統(tǒng)變量

????show 【global|session 】variables like ''; 如果沒有顯式聲明global還是session次和,則默認(rèn)是session

????②查看指定的系統(tǒng)變量的值

????select @@【global|session】.變量名; 如果沒有顯式聲明global還是session,則默認(rèn)是session

????③為系統(tǒng)變量賦值

????方式一:

????set 【global|session 】 變量名=值; 如果沒有顯式聲明global還是session那伐,則默認(rèn)是session

????方式二:

????set @@global.變量名=值;

????set @@變量名=值踏施;

????1、全局變量

????服務(wù)器層面上的罕邀,必須擁有super權(quán)限才能為系統(tǒng)變量賦值畅形,作用域?yàn)檎麄€服務(wù)器,也就是針對于所有連接(會話)有效

????2诉探、會話變量

????服務(wù)器為每一個連接的客戶端都提供了系統(tǒng)變量日熬,作用域?yàn)楫?dāng)前的連接(會話)

????二、自定義變量

????說明:

????1肾胯、用戶變量

????作用域:針對于當(dāng)前連接(會話)生效

????位置:begin end里面竖席,也可以放在外面

????使用:

????①聲明并賦值:

????set @變量名=值;或

????set @變量名:=值;或

????select @變量名:=值;

????②更新值

????方式一:

????????set @變量名=值;或

????????set @變量名:=值;或

????????select @變量名:=值;

????方式二:

????????select xx into @變量名 from 表;

????③使用

????select @變量名;

????2耘纱、局部變量

????作用域:僅僅在定義它的begin end中有效

????位置:只能放在begin end中,而且只能放在第一句

????使用:

????①聲明

????declare 變量名 類型 【default 值】;

????②賦值或更新

????方式一:

????????set 變量名=值;或

????????set 變量名:=值;或

????????select @變量名:=值;

????方式二:

????????select xx into 變量名 from 表;

????③使用

????select 變量名;

##存儲過程與函數(shù)

????說明:都類似于java中的方法毕荐,將一組完成特定功能的邏輯語句包裝起來束析,對外暴露名字

????好處:

????1、提高重用性

????2憎亚、sql語句簡單

????3员寇、減少了和數(shù)據(jù)庫服務(wù)器連接的次數(shù),提高了效率

存儲過程

????一虽填、創(chuàng)建 ★

????create procedure 存儲過程名(參數(shù)模式 參數(shù)名 參數(shù)類型)

????begin

????????????存儲過程體

????end

????注意:

1.參數(shù)模式:in丁恭、out、inout斋日,其中in可以省略

2.存儲過程體的每一條sql語句都需要用分號結(jié)尾

????二牲览、調(diào)用

????call 存儲過程名(實(shí)參列表)

????舉例:

????調(diào)用in模式的參數(shù):call sp1(‘值’);

????調(diào)用out模式的參數(shù):set @name; call sp1(@name);select @name;

????調(diào)用inout模式的參數(shù):set @name=值; call sp1(@name); select @name;

????三、查看

????show create procedure 存儲過程名;

????四恶守、刪除

????drop procedure 存儲過程名;

函數(shù)

????一第献、創(chuàng)建

????create function 函數(shù)名(參數(shù)名 參數(shù)類型) returns??返回類型

????begin

????????函數(shù)體

????end

????注意:函數(shù)體中肯定需要有return語句

????二、調(diào)用

????select 函數(shù)名(實(shí)參列表);

????三兔港、查看

????show create function 函數(shù)名;

????四庸毫、刪除

????drop function 函數(shù)名;

流程控制與結(jié)構(gòu)


????說明:

????順序結(jié)構(gòu):程序從上往下依次執(zhí)行

????分支結(jié)構(gòu):程序按條件進(jìn)行選擇執(zhí)行衫樊,從兩條或多條路徑中選擇一條執(zhí)行

????循環(huán)結(jié)構(gòu):程序滿足一定條件下飒赃,重復(fù)執(zhí)行一組語句

分支結(jié)構(gòu)

????特點(diǎn):

????1、if函數(shù)

????功能:實(shí)現(xiàn)簡單雙分支

????語法:

????if(條件科侈,值1载佳,值2)

????位置:

????可以作為表達(dá)式放在任何位置

????2、case結(jié)構(gòu)

????功能:實(shí)現(xiàn)多分支

????語法1:

????case 表達(dá)式或字段

????when 值1 then 語句1;

????when 值2 then 語句2臀栈;

????..

????else 語句n;

????end [case];

????語法2:

????case?

????when 條件1 then 語句1;

????when 條件2 then 語句2蔫慧;

????..

????else 語句n;

????end [case];

????位置:

????可以放在任何位置,

????如果放在begin end 外面权薯,作為表達(dá)式結(jié)合著其他語句使用

????如果放在begin end 里面姑躲,一般作為獨(dú)立的語句使用

????3、if結(jié)構(gòu)

????功能:實(shí)現(xiàn)多分支

????語法:

????if 條件1 then 語句1;

????elseif 條件2 then 語句2;

????...

????else 語句n;

????end if;

????位置:

????只能放在begin end中

循環(huán)結(jié)構(gòu)

????位置:

????只能放在begin end中

????特點(diǎn):都能實(shí)現(xiàn)循環(huán)結(jié)構(gòu)

????對比:

????①這三種循環(huán)都可以省略名稱盟蚣,但如果循環(huán)中添加了循環(huán)控制語句(leave或iterate)則必須添加名稱

????②

????loop 一般用于實(shí)現(xiàn)簡單的死循環(huán)

????while 先判斷后執(zhí)行

????repeat 先執(zhí)行后判斷黍析,無條件至少執(zhí)行一次

????1、while

????語法:

????【名稱:】while 循環(huán)條件 do

????????????循環(huán)體

????end while 【名稱】;

????2屎开、loop

????語法:

????【名稱:】loop

????????????循環(huán)體

????end loop 【名稱】;

????3阐枣、repeat

????語法:

????【名稱:】repeat

????????????循環(huán)體

????until 結(jié)束條件?

????end repeat 【名稱】;

????二、循環(huán)控制語句

????leave:類似于break,用于跳出所在的循環(huán)

????iterate:類似于continue侮繁,用于結(jié)束本次循環(huán)虑粥,繼續(xù)下一次

此文章通過學(xué)習(xí)視頻而記錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者宪哩。
  • 序言:七十年代末娩贷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锁孟,更是在濱河造成了極大的恐慌彬祖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件品抽,死亡現(xiàn)場離奇詭異储笑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)圆恤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門突倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盆昙,你說我怎么就攤上這事羽历。” “怎么了淡喜?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵秕磷,是天一觀的道長。 經(jīng)常有香客問我炼团,道長澎嚣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任瘟芝,我火速辦了婚禮易桃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘模狭。我一直安慰自己颈抚,他們只是感情好踩衩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布嚼鹉。 她就那樣靜靜地躺著,像睡著了一般驱富。 火紅的嫁衣襯著肌膚如雪锚赤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天褐鸥,我揣著相機(jī)與錄音线脚,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛浑侥,可吹牛的內(nèi)容都是我干的姊舵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼寓落,長吁一口氣:“原來是場噩夢啊……” “哼括丁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伶选,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤史飞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仰税,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體构资,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年陨簇,在試婚紗的時候發(fā)現(xiàn)自己被綠了吐绵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡河绽,死狀恐怖拦赠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葵姥,我是刑警寧澤荷鼠,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站榔幸,受9級特大地震影響允乐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜削咆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一牍疏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拨齐,春花似錦鳞陨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歼狼,卻和暖如春掏导,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羽峰。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工趟咆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留添瓷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓值纱,卻偏偏與公主長得像鳞贷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虐唠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1悄晃、MySQL啟動和關(guān)閉(安裝及配置請參照百度經(jīng)驗(yàn),這里不再記錄凿滤。MySQL默認(rèn)端口號:3306妈橄;默認(rèn)數(shù)據(jù)類型格式...
    強(qiáng)壯de西蘭花閱讀 642評論 0 1
  • MySQL數(shù)據(jù)庫對象與應(yīng)用 2.1-MySQL數(shù)據(jù)類型 庫建立好之后基本不動,和我們接觸最頻繁的是表. 建表就是聲...
    極客圈閱讀 2,133評論 0 8
  • DDL1.創(chuàng)建庫、創(chuàng)建表使用關(guān)鍵字create2.刪除庫翁脆、刪除表使用關(guān)鍵字drop3.修改庫眷蚓、修改表使用關(guān)鍵字al...
    王_凱閱讀 352評論 0 0
  • 作者:燁竹 數(shù)據(jù)庫的基本操作 登陸MySQL數(shù)據(jù)庫服務(wù):mysql -h服務(wù)器地址 -P端口號 -u用戶名 ...
    DragonRat閱讀 1,366評論 0 7