日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库asc_mysql数据库

發布時間:2024/3/13 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库asc_mysql数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL

數據庫的相關概念

一、數據庫的好處

1、可以持久化數據到本地

2、結構化查詢

二、數據庫的常見概念

1、DB:數據庫,存儲數據的容器

2、DBMS:數據庫管理系統,又稱為數據庫軟件或數據庫產品,用于創建或管理DB

3、SQL:結構化查詢語言,用于和數據庫通信的語言,不是某個數據庫軟件特有的,而是幾乎所有的主流數據庫軟件通用的語言

三、數據庫存儲數據的特點

1、數據存放到表中,然后表再放到庫中

2、一個庫中可以有多張表,每張表具有唯一的表名用來標識自己

3、表中有一個或多個列,列又稱為“字段”,相當于java中“屬性”

4、表中的每一行數據,相當于java中“對象”

四、常見的數據庫管理系統

mysql、oracle、db2、sqlserver

DQL語言

DQL(Data Query Language) 數據查詢語言

基礎查詢

一、語法

select 查詢列表

from 表名;

二、特點

查詢列表可以是字段、常量、表達式、函數,也可以是多個

查詢結果是一個虛擬表

三、示例

1、查詢單個字段

select 字段名 from 表名;

2、查詢多個字段

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

3、查詢所有字段

select * from 表名

4、查詢常量

select 常量值;

注意:字符型和日期型的常量值必須用單引號引起來,數值型不需要

5、查詢函數

select 函數名(實參列表);

例如: select version();

6、查詢表達式

select 100/1234;

7、起別名

1) as

2) 空格

例如:

select last_name as 姓, first_name as 名 from employees limit 5;

select last_name 姓, first_name 名 from employees limit 5;

# 取的別名擁有空格等特殊符號需要使用引號引起來即可, 三種引號皆可

select 100 as "out put", 102 as `out put`, 103 as 'out put';

8、去重

select distinct 字段名 from 表名;

9、+

作用:做加法運算

select 數值+數值; 直接運算

select 字符+數值;先試圖將字符轉換成數值,如果轉換成功,則繼續運算;否則轉換成0,再做運算

select null+值;結果都為null

example: select 1+2, '12'+ 2, '1'+ '2', null + 2; -> 3, 14, 3, null

10、【補充】concat函數

功能:拼接字符

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

select concat(last_name, ' ', first_name) as '姓名' from employees;

11、【補充】ifnull函數

功能:判斷某字段或表達式是否為null,如果為null 返回指定的值,否則返回原本的值

select ifnull(commission_pct,0) from employees; 字符串拼接上可能有用.

12、【補充】isnull函數

功能:判斷某字段或表達式是否為null,如果是,則返回1,否則返回0

13、CONCAT_WS函數

CONCAT_WS(separator,str1,str2,...)

功能:和concat一樣,拼接字符,第一個參數是分隔符,用來拼接后面的每一個參數, 類似于python的字符串的join方法。

條件查詢

一、語法

select 查詢列表

from 表名

where 篩選條件

二、篩選條件的分類

1、簡單條件運算符

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

2、邏輯運算符

&& and

|| or

! not

3、模糊查詢

like:一般搭配通配符使用,可以判斷字符型 或 數值型

通配符:%任意多個字符,_任意單個字符

例子: _需要進行轉義

select

last_name

from

employees

where

last_name like '_\_%';

或者 使用escape來標明什么是轉義字符

select

last_name

from

employees

where

last_name like '_$_%' escape '$';

between and

in

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

is null PK <=>

普通類型的數值 null值 可讀性

is null × √ √

<=> √ √ ×

排序查詢

一、語法

select 查詢列表

from 表

where 篩選條件

order by 排序列表 【asc}desc】

二、特點

1、asc :升序,如果不寫默認升序

desc:降序

2、排序列表 支持 單個字段、多個字段、函數、表達式、別名

# 例子, 根據年薪進行排序

SELECT

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

FROM

employees

ORDER BY

year_salary DESC;

# 按照員工的姓名的長度進行排序

select

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

from

employees

order by

length(name) desc;

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

常見函數

一、概述

好處:提高重用性和隱藏實現細節

調用:select 函數名(實參列表),和程序中的函數使用方法類似.

二、單行函數

1、字符函數

concat:連接

substr:截取子串

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

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

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

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

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

upper:變大寫

lower:變小寫

replace:替換 全部替換

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

length:獲取字節長度, 需要根據編碼類型來看

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

trim:去前后空格

# 去除前后指定的字符, 默認是去除空格

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

lpad:用指定字符左填充

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

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

rpad:用指定字符右填充

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

2、數學函數

ceil:向上取整

round:四舍五入

mod:取模

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

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

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

floor:向下取整

truncate:截斷

rand:獲取隨機數,返回0-1之間的小數

3、日期函數

now:返回當前日期+時間

year:返回年

month:返回月

day:返回日

date_format:將日期轉換成字符

curdate:返回當前日期

str_to_date:將字符轉換成日期

curtime:返回當前時間

hour:小時

minute:分鐘

second:秒

datediff:返回兩個日期相差的天數

monthname:以英文形式返回月

4、其他函數

version 當前數據庫服務器的版本

database 當前打開的數據庫

user當前用戶

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

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

5、流程控制函數

1 if(條件表達式,表達式1,表達式2):如果條件表達式成立,返回表達式1,否則返回表達式2

2 case 情況1

case 變量或表達式或字段

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;

三、分組函數

1、分類

max 最大值

min 最小值

sum 和

avg 平均值

count 計算個數

2、特點

1 語法

select max(字段) from 表名;

2 支持的類型

sum和avg一般用于處理數值型

max、min、count可以處理任何數據類型

3 以上分組函數都忽略null

4 都可以搭配distinct使用,實現去重的統計

select sum(distinct 字段) from 表;

5 count函數

count(字段):統計該字段非空值的個數

count(*):統計結果集的行數

案例:查詢每個部門的員工個數

1 xx 10

2 dd 20

3 mm 20

4 aa 40

5 hh 40

count(1):統計結果集的行數

效率上:

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

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

6 和分組函數一同查詢的字段,要求是group by后出現的字段

分組查詢

一、語法

select 分組函數,分組后的字段

from 表

【where 篩選條件】

group by 分組的字段

【having 分組后的篩選】

【order by 排序列表】

二、特點

使用關鍵字 篩選的表 位置

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

分組后篩選having 分組后的結果group by 的后面

3、分組類型

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

# 查詢領導編號>102的每個領導手下的最低工資>5000的領導編號是哪個,以及最低工資

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 支持使用函數的結果來進行分組

# having和group by 都支持使用別名來進行分組和篩選

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

select

length(last_name) as length_name,

count(*) as count_num

from

employees

group by

length_name

having

count_num > 5;

3. 支持多個字段進行分組

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

# 這種類似于聯合主鍵一樣, 部門id和工種一樣的才算是一組

select

avg(salary),

department_id,

job_id

from

employees

group by

department_id, job_id

having

avg(salary) > 10000

order by

avg(salary);

連接查詢

一、含義

當查詢中涉及到了多個表的字段,需要使用多表連接

select 字段1,字段2

from 表1,表2,...;

笛卡爾乘積:當查詢多個表時,沒有添加有效的連接條件,導致多個表所有行實現完全連接

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

二、分類

按年代分類:

sql92:

等值

非等值

自連接

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

sql99【推薦使用】

內連接

等值

非等值

自連接

外連接

左外

右外

全外(mysql不支持)

交叉連接

三、SQL92語法

1、等值連接

語法:

select 查詢列表

from 表1 別名,表2 別名

where 表1.key=表2.key

【and 篩選條件】

【group by 分組字段】

【having 分組后的篩選】

【order by 排序字段】

特點:

① 一般為表起別名

②多表的順序可以調換

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

④等值連接的結果是多表的交集部分

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、內連接

語法:

select 查詢列表

from 表1 別名

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

where 篩選條件

group by 分組列表

having 分組后的篩選

order by 排序列表

limit 子句;

特點:

①表的順序可以調換

②內連接的結果=多表的交集

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

分類:

等值連接

非等值連接

自連接

2、外連接

語法:

select 查詢列表

from 表1 別名

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

where 篩選條件

group by 分組列表

having 分組后的篩選

order by 排序列表

limit 子句;

特點:

①查詢的結果=主表中所有的行,如果從表和它匹配的將顯示匹配行,如果從表沒有匹配的則顯示null

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

full join 兩邊都是主表

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

3、交叉連接

語法:

select 查詢列表

from 表1 別名

cross join 表2 別名;

特點:

類似于笛卡爾乘積

子查詢

一、含義

嵌套在其他語句內部的select語句稱為子查詢或內查詢,

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

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

二、分類

1、按出現位置

select后面:

僅僅支持標量子查詢

from后面:

表子查詢

where或having后面:

標量子查詢

列子查詢

行子查詢

exists后面:

標量子查詢

列子查詢

行子查詢

表子查詢

2、按結果集的行列

標量子查詢(單行子查詢):結果集為一行一列

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

行子查詢:結果集為多行多列

表子查詢:結果集為多行多列

三、示例

where或having后面

1、標量子查詢

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

①最低工資

select min(salary) from employees

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

select last_name,salary

from employees

where salary=(

select min(salary) from employees

);

2、列子查詢

案例:查詢所有是領導的員工姓名

①查詢所有員工的 manager_id

select manager_id

from employees

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

select last_name

from employees

where employee_id in(

select manager_id

from employees

);

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

# exists本質上是返回一個bool值類型的數據

select department_name

from departments as d

where exists(

select d.department_id from employees as e

where d.department_id = e.department_id

)

分頁查詢

一、應用場景

當要查詢的條目數太多,一頁顯示不全

二、語法

select 查詢列表

from 表

limit 【offset,】size;

注意:

offset代表的是起始的條目索引,默認從0卡死

size代表的是顯示的條目數

公式:

假如要顯示的頁數為page,每一頁條目數為size

select 查詢列表

from 表

limit (page-1)*size,size;

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

select 查詢列表 ⑦

from 表1 別名 ①

連接類型 join 表2 ②

on 連接條件 ③

where 篩選 ④

group by 分組列表 ⑤

having 篩選 ⑥

order by排序列表 ⑧

limit 起始條目索引,條目數; ⑨

聯合查詢

一、含義

union:合并、聯合,將多次查詢結果合并成一個結果

二、語法

查詢語句1

union 【all】

查詢語句2

union 【all】

...

三、意義

1、將一條比較復雜的查詢語句拆分成多條語句

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

四、特點

1、要求多條查詢語句的查詢列數必須一致

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

3、union 去重,union all包含重復項 即union默認是去重的.

DML語言

DML(Data Manipulation Language)數據操縱語言

插入

一、方式一

語法:

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

特點:

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

2、字段的個數和順序不一定與原始表中的字段個數和順序一致

但必須保證值和字段一一對應

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

①字段和值都省略

②字段寫上,值使用null

4、字段和值的個數必須一致

5、字段名可以省略,默認所有列

二、方式二

語法:

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

兩種方式 的區別:

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

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

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

insert into 表名

查詢語句;

修改

一、修改單表的記錄

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

二、修改多表的記錄【補充】

語法:

update 表1 別名

left|right|inner join 表2 別名

on 連接條件

set 字段=值,字段=值

where 篩選條件;

刪除

方式一:使用delete

一、刪除單表的記錄★

語法:delete from 表名 【where 篩選條件】【limit 條目數】

二、級聯刪除[補充]

語法:

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

inner|left|right join 表2 別名

on 連接條件

【where 篩選條件】

方式二:使用truncate

語法:truncate table 表名

兩種方式的區別【面試題】

1.truncate刪除后,如果再插入,標識列從1開始

delete刪除后,如果再插入,標識列從斷點開始

2.delete可以添加篩選條件

truncate不可以添加篩選條件

3.truncate效率較高

4.truncate沒有返回值

delete可以返回受影響的行數

5.truncate不可以回滾

delete可以回滾

DDL語言

DDL(數據定義語言,Data Definition Language)

庫的管理

一、創建庫

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

二、修改庫

alter database 庫名 character set 字符集名;

三、刪除庫

drop database 【if exists】 庫名;

表的管理

一、創建表 ★

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】 表名;

四、復制表

1、復制表的結構

create table 表名 like 舊表;

2、復制表的結構+數據

create table 表名

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

數據類型

一、數值型

1、整型

tinyint、smallint、mediumint、int/integer、bigint

1 2 3 4 8

特點:

①都可以設置無符號和有符號,默認有符號,通過unsigned設置無符號

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

③長度可以不指定,默認會有一個長度

長度代表顯示的最大寬度,如果不夠則左邊用0填充,但需要搭配zerofill,并且默認變為無符號整型

2、浮點型

定點數:decimal(M,D)

浮點數:

float(M,D) 4

double(M,D) 8

特點:

①M代表整數部位+小數部位的個數,D代表小數部位

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

③M和D都可以省略,但對于定點數,M默認為10,D默認為0

④如果精度要求較高,則優先考慮使用定點數

二、字符型

char、varchar、binary、varbinary、enum、set、text、blob

char:固定長度的字符,寫法為char(M),最大長度不能超過M,其中M可以省略,默認為1

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

三、日期型

year年

date日期

time時間

datetime 日期+時間 8

timestamp 日期+時間 4 比較容易受時區、語法模式、版本的影響,更能反映當前時區的真實時間

常見的約束

一、常見的約束

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

UNIQUE:唯一,該字段的值不可重復

DEFAULT:默認,該字段的值不用手動插入有默認值

CHECK:檢查,mysql不支持

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

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

主鍵和唯一

1、區別:

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

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

2、相同點

都具有唯一性

都支持組合鍵,但不推薦

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

外鍵:

1、用于限制兩個表的關系,從表的字段值引用了主表的某字段值

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

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

4、插入數據,先插入主表

刪除數據,先刪除從表

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

#方式一:級聯刪除

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

#方式二:級聯置空

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

二、創建表時添加約束

create table 表名(

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

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

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

字段名 字段類型 default 值,#默認

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

)

注意:

支持類型可以起約束名

列級約束除了外鍵不可以

表級約束除了非空和默認可以,但對主鍵無效

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

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

1、非空

添加非空

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

刪除非空

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

2、默認

添加默認

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

刪除默認

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 約束名;

四、自增長列

特點:

1、不用手動插入值,可以自動提供序列值,默認從1開始,步長為1

auto_increment_increment

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

如果要更改步長:更改系統變量

set auto_increment_increment=值;

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

3、自增長列只能支持數值型

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

一、創建表時設置自增長列

create table 表(

字段名 字段類型 約束 auto_increment

)

二、修改表時設置自增長列

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

三、刪除自增長列

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

TCL語言

事務

一、含義

事務:一條或多條sql語句組成一個執行單位,一組sql語句要么都執行要么都不執行

二、特點(ACID)

A 原子性:一個事務是不可再分割的整體,要么都執行要么都不執行

C 一致性:一個事務可以使數據從一個一致狀態切換到另外一個一致的狀態

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

D 持久性:一個事務一旦提交了,則永久的持久化到本地

三、事務的使用步驟 ★

了解:

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

顯式事務:具有明顯的開啟和結束

使用顯式事務:

①開啟事務

1. set autocommit=0; 用來禁止使用當前會話的自動提交。這就相當于一直處于事務狀態.

2. start transaction 或 begin;

②編寫一組邏輯sql語句

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

設置回滾點:

savepoint 回滾點名;

③結束事務

提交:commit;

回滾:rollback;

回滾到指定的地方:rollback to 回滾點名;

四、并發事務

1、事務的并發問題是如何發生的?

多個事務 同時 操作 同一個數據庫的相同數據時

2、并發問題都有哪些?

臟讀:一個事務讀取了其他事務還沒有提交的數據,讀到的是其他事務“更新”的數據

不可重復讀:一個事務多次讀取,結果不一樣

幻讀:一個事務讀取了其他事務還沒有提交的數據,只是讀到的是 其他事務“插入”的數據

3、如何解決并發問題

通過設置隔離級別來解決并發問題

4. 查看及設置當前事務的隔離級別

select @@tx_isolation;

# 設置當前會話的事務隔離級別

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

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

set session transaction isolation level repeatable read; # 可重復讀 默認的隔離級別

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

# 查看...

mysql> select @@tx_isolation;

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

| @@tx_isolation |

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

| READ-UNCOMMITTED |

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

5、隔離級別

臟讀 不可重復讀 幻讀

read uncommitted:讀未提交 × × ×

read committed:讀已提交 √ × ×

repeatable read:可重復讀 √ √ ×

serializable:串行化 √ √ √

其他

導入與導出數據

導入

向數據中的某個庫導入數據, 這種方式需要先登錄到終端

source 文件路徑

注意點: 路徑名不能有中文

#

mysql> source F:\LearnTools\Program\mysql\t.txt

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

...

導出

導出SQL格式的數據到指定文件

# 在終端下直接導出整個數據庫

mysqldump -uroot -p myemployees> t.txt

Enter password: ***

# 導出某個表到指定文件

mysqldump -uroot -p myemployees jobs > t2.txt

Enter password: ***

視圖

一、含義

mysql5.1版本出現的新特性,本身是一個虛擬表,它的數據來自于表,通過執行時動態生成。

好處:

1、簡化sql語句

2、提高了sql的重用性

3、保護基表的數據,提高了安全性

二、創建

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

注意:視圖一般用于查詢的,而不是更新的,所以具備以下特點的視圖都不允許更新

① 包含分組函數、group by、distinct、having、union、

② join

③ 常量視圖

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

⑤ 用到了不可更新的視圖

七、視圖和表的對比

關鍵字 是否占用物理空間 使用

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

表table保存實際的數據 增刪改查

變量

分類

一、系統變量

說明:變量由系統提供的,不用自定義

語法:

①查看系統變量

show 【global|session 】variables like ''; 如果沒有顯式聲明global還是session,則默認是session

②查看指定的系統變量的值

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

③為系統變量賦值

方式一:

set 【global|session 】 變量名=值; 如果沒有顯式聲明global還是session,則默認是session

方式二:

set @@global.變量名=值;

set @@變量名=值;

1、全局變量

服務器層面上的,必須擁有super權限才能為系統變量賦值,作用域為整個服務器,也就是針對于所有連接(會話)有效

2、會話變量

服務器為每一個連接的客戶端都提供了系統變量,作用域為當前的連接(會話)

二、自定義變量

說明:

1、用戶變量

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

位置: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 變量名;

存儲過程與函數

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

好處:

1、提高重用性

2、sql語句簡單

3、減少了和數據庫服務器連接的次數,提高了效率

存儲過程

一、創建 ★

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

begin

存儲過程體

end

注意:

1.參數模式:in、out、inout,其中in可以省略

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

二、調用

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

舉例:

調用in模式的參數:call sp1(‘值’);

調用out模式的參數:set @name; call sp1(@name);select @name;

調用inout模式的參數:set @name=值; call sp1(@name); select @name;

三、查看

show create procedure 存儲過程名;

四、刪除

drop procedure 存儲過程名;

函數

一、創建

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

begin

函數體

end

注意:函數體中肯定需要有return語句

二、調用

select 函數名(實參列表);

三、查看

show create function 函數名;

四、刪除

drop function 函數名;

流程控制與結構

說明:

順序結構:程序從上往下依次執行

分支結構:程序按條件進行選擇執行,從兩條或多條路徑中選擇一條執行

循環結構:程序滿足一定條件下,重復執行一組語句

分支結構

特點:

1、if函數

功能:實現簡單雙分支

語法:

if(條件,值1,值2)

位置:

可以作為表達式放在任何位置

2、case結構

功能:實現多分支

語法1:

case 表達式或字段

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 外面,作為表達式結合著其他語句使用

如果放在begin end 里面,一般作為獨立的語句使用

3、if結構

功能:實現多分支

語法:

if 條件1 then 語句1;

elseif 條件2 then 語句2;

...

else 語句n;

end if;

位置:

只能放在begin end中

循環結構

位置:

只能放在begin end中

特點:都能實現循環結構

對比:

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

loop 一般用于實現簡單的死循環

while 先判斷后執行

repeat 先執行后判斷,無條件至少執行一次

1、while

語法:

【名稱:】while 循環條件 do

循環體

end while 【名稱】;

2、loop

語法:

【名稱:】loop

循環體

end loop 【名稱】;

3、repeat

語法:

【名稱:】repeat

循環體

until 結束條件

end repeat 【名稱】;

二、循環控制語句

leave:類似于break,用于跳出所在的循環

iterate:類似于continue,用于結束本次循環,繼續下一次

總結

以上是生活随笔為你收集整理的mysql数据库asc_mysql数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。