中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

今日中國疫情最新消息數據平板電視seo優(yōu)化關鍵詞

今日中國疫情最新消息數據,平板電視seo優(yōu)化關鍵詞,高新園區(qū)規(guī)劃建設局網站,wordpress網站建設教程一、為什么使用數據庫 數據儲存在哪里? 硬盤、網盤、U盤、光盤、內存(臨時存儲) 數據持久化 使用文件來進行存儲,數據庫也是一種文件,像excel ,xml 這些都可以進行數據的存儲,但大量數據操作…

一、為什么使用數據庫

數據儲存在哪里?

硬盤、網盤、U盤、光盤、內存(臨時存儲)

數據持久化

使用文件來進行存儲,數據庫也是一種文件,像excel ,xml 這些都可以進行數據的存儲,但大量數據操作,還是用數據庫文件效率最高

什么是數據庫

數據庫就是存儲數據的“倉庫”

數據庫的作用

1.存儲大量的數據,訪問和檢索數據(管理數據)

2.保證數據的完整性

3.安全與共享

4.數據可以進行組合,產生新的數據(數據分析)

數據庫的發(fā)展歷史

1.層次模型:單個記錄以父子關系形成的樹狀結構樹創(chuàng)建了一個層次狀結構,在其中數據被分解為邏輯的分類和子類,使用記錄代表邏輯數據單元。

2.網狀模型:網狀模型通過允許記錄有多個父子關系,來增強層次模型

3.關系模型:獨立于應用程序的。更改數據庫設計,而不會影響應用程序成為可能表的行和列這種結構,來替換父子框架。使用關系模型,我們可以克服早期模型的缺陷,在表之間定義復雜的關系。

表(table)是關系型數據庫的核心單元,它是數據存儲的地方

術語:

????????行: 記錄,實體

????????列:字段

關系:(表與表之間的關系)

1對1 :一對一關系是比較少見的關系類型。很多數據庫也很少包含一對一關系。

A 表中的一行最多只能匹配于 B 表中的一行,反之亦然。

人 身份證號

1 1

1 1


1 : 1

1對多: 最常用的關系類型是一對多關系,通常把一對多關系中,“多邊”的表稱為從表,把“一邊”的表稱為主表。

人 銀行卡

1 N

1 1


1 : N

多對多:

學生 老師

1 N

N 1


N : N

  1. 非關系模型(noSQL)

關系型數據庫

關系型數據庫有哪些?

Access ,Mysql (小型企業(yè), 免費),Sql Server(微軟 ,中企) , Oracle (大型) , DB2 , SyBase 等..

數據庫(Database)

DBMS(Database Manage System)

RDBMS( Relation Database Manage System)

?

數據庫是存儲和管理數據的倉庫,但數據庫并不能直接存儲數據,數據是存儲在表中的。

在存儲數據的過程中一定會用到數據庫服務器,所謂的數據庫服務器就是指在計算機上安裝一個數據庫管理程序。

關系與非關系數據庫的對比

關系型數據庫的優(yōu)勢:

1.復雜查詢可以用SQL語句方便的在- -個表以及多個表之間做非常復雜的數據查詢。

2.事務支持使得對于安全性能很高的數據訪問要求得以實現。對于這兩類數據庫,對方的優(yōu)勢就是自己的弱勢,反之亦然。

非關系型數據庫的優(yōu)勢:。

1.性能NOSQL是基于鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。

2.可擴展性同樣也是因為基于鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。

MySQL數據庫

發(fā)展史

2003年12月,MySQL 5.0版本發(fā)布

2008年1月,MySQL AB公司被Sun公司以10億美金收購

2008年11月,MySQL 5.1發(fā)布.

2009年4月,Oracle公 司以74億美元收購Sun公司

2010年12月,MySQL 5.5發(fā)布

詳細內容:

1、MySQL的歷史可以追溯到1979年,一個名為Monty Widenius的程序員在為TcX的小公司打工,并且用BASIC設計了一個報表工具,使其可以在4MHz主頻和16KB內存的計算機上運行。當時,這只是一個很底層的且僅面向報表的存儲引擎,名叫Unireg。

  2、1990年,TcX公司的客戶中開始有人要求為他的API提供SQL支持。Monty直接借助于mSQL的代碼,將它集成到自己的存儲引擎中。令人失望的是,效果并不太令人滿意,決心自己重寫一個SQL支持。

  3、 1996年,MySQL 1.0發(fā)布,它只面向一小撥人,相當于內部發(fā)布。到了1996年10月,MySQL 3.11.1發(fā)布(MySQL沒有2.x版本),最開始只提供Solaris下的二進制版本。一個月后,Linux版本出現了。在接下來的兩年里,MySQL被依次移植到各個平臺。

  4、1999~2000年,MySQL AB公司在瑞典成立。Monty雇了幾個人與Sleepycat合作,開發(fā)出了Berkeley DB引擎, 由于BDB支持事務處理,因此MySQL從此開始支持事務處理了。

  5、2000,MySQL不僅公布自己的源代碼,并采用GPL(GNU General Public License)許可協議,正式進入開源世界。同年4月,MySQL對舊的存儲引擎ISAM進行了整理,將其命名為MyISAM。

  6、2001年,集成Heikki Tuuri的存儲引擎InnoDB,這個引擎不僅能持事務處理,并且支持行級鎖。后來該引擎被證明是最為成功的MySQL事務存儲引擎。MySQL與InnoDB的正式結合版本是4.0

  7、2003年12月,MySQL 5.0版本發(fā)布,提供了視圖、存儲過程等功能。

  8、2008年1月,MySQL AB公司被Sun公司以10億美金收購,MySQL數據庫進入Sun時代。在Sun時代,Sun公司對其進行了大量的推廣、優(yōu)化、Bug修復等工作。

  9、2008年11月,MySQL 5.1發(fā)布,它提供了分區(qū)、事件管理,以及基于行的復制和基于磁盤的NDB集群系統,同時修復了大量的Bug。

  10、2009年4月,Oracle公司以74億美元收購Sun公司,自此MySQL數據庫進入Oracle時代,而其第三方的存儲引擎InnoDB早在2005年就被Oracle公司收購。

  11、2010年12月,MySQL 5.5發(fā)布,其主要新特性包括半同步的復制及對SIGNAL/RESIGNAL的異常處理功能的支持,最重要的是InnoDB存儲引擎終于變?yōu)楫斍癕ySQL的默認存儲引擎。MySQL 5.5不是時隔兩年后的一次簡單的版本更新,而是加強了MySQL各個方面在企業(yè)級的特性。Oracle公司同時也承諾MySQL 5.5和未來版本仍是采用GPL授權的開源產品。

....

MySql 8.0 新版本。

一般使用的都是Mysql 5.x;

MySQL特點

安裝簡單,部署迅速,

適合大批量快速部署

易于擴展,擴展性能極佳

架構靈活,可以根據業(yè)務特點配置適合自己的MySQL集群

開源,可以根據自己的業(yè)務需求進行二次開發(fā),

使用廣泛,幾乎所有的互聯網公司都在使用MySQL數據庫

對于OLTP業(yè)務,可以進行良好的支撐

SQL:

SQL(Structured Query Language)語言是1974年由Boyce和Chamberlin提出的一種介于關系代數與關系演算之間的結構化查詢語言,是一個通用的、功能極強的關系型數據庫語言。

SQL語句

–數據定義語言(DDL):data definition language (定義數據庫,定義表)

–數據查詢語言(DQL): data query language (查詢 數據)

–數據操作語言(DML): data manipulation language (操作數據)

–數據控制語言(DCL): data control language (用戶控制 ,權限控制 )

DDL 定義數據庫及表

1. 創(chuàng)建數據庫
? ?create database 數據庫名;
? ?
2. 使用數據庫
? ?use database 數據庫名;
? ?
3. 刪除數據庫?
? ?drop database 數據庫名;
? ?
? ?
?數據庫命名規(guī)范:
?1. 標識符不能是所用RDBMS的保留字
?2. 不允許嵌入空格或其它特殊字符
?3. 第一個字符必須是下列字符之一:a-z 和 A-Z,下劃線 (_)、at 符號 (@) 或者數字符號 (#)
?4. 后續(xù)字符可以是at符號(@)、美元符號 ($)、數字符號或下劃線,字母。
?
?
?4. 創(chuàng)建表 (數據是放在表中)
? ?語法:
? ? ? ?create table 表名 (列名 列的數據類型 ?[列的約束] , ?...)
? ? ? ?
? ? ? ?注: char , varchar 兩個類型,需要設置長度,其它的類型都不需要設置
? ? ? ?
? ? ? ?
? ?方法2:復制表(只能復制表的數據與表字段,注:表的約束不能復制)
? ? ? CREATE TABLE student2 SELECT * FROM student
? ? ? ?
5. 刪除表
? ? ?drop table 表名;
? ? ?
6. 修改表

?? ?增加列
?? ??? ?alter table 表名 add 列名 數據類型
?? ??? ?
?? ??? ?ALTER TABLE student ADD address VARCHAR(100)
?? ??? ?
?? ?刪除列
?? ??? ?alter table 表名 drop 列名
?? ??? ?
?? ?更改列
?? ??? ?alter table 表名 modify 列名 類型 ? -- ?只改列的類型?
?? ??? ?alter table 表名 change 舊列名 新列名 類型
?? ??? ?
?? ?重命名表
?? ??? ?alter table 舊表名 rename 新表名

mysql中的數據類型

  1. 數字

    A- 整型 int 4字節(jié)

    B- 浮點 float 4字節(jié) 7位

    double 8 字節(jié) 15位

    decimal(總位數,小數點后的位數) decimal(M,D) 17字節(jié), 30位小數

    注意:

    M為總位數,D為小數位,M必須大于D

  2. 字符串

    A- 固定長度字符串 char(長度)

    B- 可變長度字符串 varchar(最大的長度)

    C- 超長字符串 text

nchar , nvarchar , ntext 前面加n, 說明支持unicode編碼,即可以顯示中文

一般不會去使用n開頭的類型,為什么呢? 因為在創(chuàng)建數據庫時,就已經指定了編碼,支持中文顯示

3. 日期:

A: date 年月日 yyyy - MM - dd

B: datetime 年月日 時分秒 yyyy-MM-dd HH:mm:ss

擴展數據類型:

text : 存放超長文本

blob: 二進制

enum: 枚舉

數據完整性分類

什么是數據的完整性?

????????完整性 = 準確性 + 可靠性

Q: 如何保證數據的完整性?

數據完整性(約束)的分類

–1.實體完整性 主鍵約束 、 唯一約束、 標識列

? 保證 一 行數據是有效的

主鍵約束 : primary key

唯一約束 : unique

標識列 : 系統給一個自增長的值,這個值不會重復,一般默認從1開始,每次加1(步長) auto_increment

–2. 域完整性 非空約束:Not Null 默認約束:Default(定義與實體時都用default)

? 保證 一 列數據是有效的

–3. 引用完整性 外鍵約束

? 保證引用的編號是有效的

–4.用戶自定義完整性

? 保證自定義規(guī)則

DML數據操作語言

表的curd:

CURD 操作,即指對數據庫中實體對象的增Create、改Update、查Read、刪Delete操作。

增加數據 :

INSERT [INTO] 表名[(列名,...)] VALUES (值表達式,...)

-- 注: 如果所有的列都要插入數據, 表名后面的列名可以省略

INSERT [INTO] 表名SET 列名=值表達式, ...

INSERT [INTO] 表名1[(列名,...)] SELECT {*|列名,...} FROM表名2

-- 上面這種方式添加數據,要求查詢的列與插入的列,數量與數據類型要一致

注意:

在MySQL3.0.2 之后 into關鍵字在INSERT中是可以省略的,但是基于標準考慮建議大家在書寫時保留該關鍵字

修改數據:

UPDATE 表名 SET 列名 = 更新后的值, [WHERE 條件子句]

刪除數據:

方法1 :

DELETE FROM 表名 [WHERE 子句]

方法2:

TRUNCATE TABLE 表名

DELETE會記錄日志,意味著刪除后的數據還可以恢復,但是效率低。

TRUNCATE不會記錄日志,刪除后的數據不能恢復,但是效率高。TRUNCATE不能用于有外鍵約束引用的表 。

TRUNCATE 可以重置自增列, delete 不能重置自增列

TRUNCATE 只能刪除整表,不能刪除部分

DQL:

查詢數據:

select * from 表名 -- 所有列

select 列名, 列名2 ... from 表名 -- 所有列

數據完整性分類

–1.實體完整性 主鍵約束 、 唯一約束、 標識列

?保證一行數據是有效的

–2.域完整性 非空約束:Not Null 默認約束:Default(定義與實體時都用default), check約束

?保證一列數據是有效的

–3.引用完整性 外鍵約束

-4. 自定義完整性

引用完整性( 外鍵約束 )

外鍵: 一個表某列與另一個表的某列存在著依附關系(這關系是在設計這兩個表時根據業(yè)務去創(chuàng)建, 但是并沒有強制依賴)

外鍵約束: 給外鍵加上一個強制的約束,如果違反這個約束,就報錯,不允許去修改數據

(沒有建立外鍵約束,不等于沒有外鍵)

如何添加外鍵約束呢?

  1. 了解兩個概念, 主表,從表

    創(chuàng)建外鍵約束時,必須先創(chuàng)建主表,再創(chuàng)建從表

  2. 創(chuàng)建約束

    CONSTRAINT FOREIGN KEY(s_c_id) REFERENCES t_class(c_id)

-- 添加從表數據,依賴的主表數據一定是存在 -- 刪除主表數據,必須保證從表沒有對它的引用

問題? 項目中要不要加外鍵約束

不要,用代碼去保證數據的完整性; 為什么不加,讓數據操作更方便

DQL 數據查詢語言

查詢的機制

從表的第一開始,把整個數據都進行查詢 ,返回符合條件的數據; 返回的數據也表格形式,但是臨時的,不會進行保存

簡單查詢

投影操作

select * from 表名 -- 全部列

select 列名1, 列名2 from 表名 -- 部分列

select 列名1 as 別名 from 表名 -- 部分列且改變列名

select 列名1+5 from 表名 ;-- 計算列

select distinct 列名1 from 表名 -- 去重復

select 列名 from 表名 limit 開始行數 ,返回的行數 -- 序號從0開始

選擇操作

單條件:

select * from 表名 where 列名 = 值; -- 還有 >= , <= ,!=

多條件:

and , or 進行條件 的連接

select * from 表名 where 條件1 (and 或 or ) 條件2

條件范圍:

between... and ...

select * from 表名 where 列名 between 下限 and 上限

in, not in

select 列集合 from 表名 where in / not in (值列表)

like 模糊查詢

select 列集合 from 表名 where 列名 like 模式

通配符:

—: 任何單個字符

%:0個或多個任意字符

處理空值:

select 列集合 from 表名 where 列名 is null / is not null

排序操作

單列排序:

select 列名 from 表名 order by 列名

多列排序:

select 列名 from 表名 order by 列名1, 列名2

SQL的執(zhí)行順序

from - where - select - order by - limit

聚合函數

count

avg

max

min

sum

注:只返回單個值,只對不為null的數據進行統計

分組函數

select

from

where

group by

having

order by

SQL執(zhí)行順序:

from -> where -> select -> group by -> having -> order by -> limit

分組統一

group by 列名 -- 根據指定的列名分組

having 分組后進行條件篩選

需求:學生的平均成績

每個組的平均成績(group by 組名, 性別)

分組函數

select

from

where

group by

having

order by

limit

SQL執(zhí)行順序:

from -> where -> select -> group by -> having -> order by -> limit

子查詢

一個查詢語句,在嵌套一個查詢語句,這就嵌套查詢 語句就叫,子查詢 .

如下:關鍵字后面,都可以嵌套一個子查詢

select

from

where

group by

having

order by

limit

select 子查詢 (單行單列) - 效率極低,一般不用

SELECT *,(SELECT className FROM clazz WHERE id=student2.classId) AS className FROM student2

from 子查詢 (多行多列)

?SELECT *
? FROM ( SELECT * FROM student2 WHERE classId = 3) AS a WHERE StudentName LIKE '張%'

where 子查詢

關系表達式后( = ,> ,<, !=),返回的是單行單列

?SELECT * FROM student2 WHERE classId = ( SELECT id FROM clazz WHERE className='352')

?in/not in , 返回的多行,單列

表聯接

笛卡爾乘積

SELECT * FROM student2,clazz WHERE student2.classId = clazz.Id ?-- 默認顯示笛卡爾乘積
?-- 寫法, 表聯接?
?
?SELECT * FROM student2 JOIN clazz ON student2.classId = clazz.Id

多表連接

SELECT * FROM student3 stu JOIN score s ON stu.id = s.studentId
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?JOIN course c ON s.courceId = c.id
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?JOIN teacher t ON c.teacherId = t.id

表聯接分類:

內聯接:

inner join -> join

外聯接:

左外聯接 outer left join -> left join

右外聯接: outer right join -> right join

存儲引擎

MySQL數據庫及其分支版本主要的存儲引擎有InnoDB、MyISAM、 Memory等。

簡單地理解,存儲引擎就是指表的類型以及表在計算機上的存儲方式。

存儲引擎的概念是MySQL的特色,使用的是一個可插拔存儲引擎架構,能夠在運行的時候動態(tài)加載或者卸載這些存儲引擎。

不同的存儲引擎決定了MySQL數據庫中的表可以用不同的方式來存儲。我們可以根據數據的特點來選擇不同的存儲引擎。

MySQL支持哪些存儲引擎?

MySQL支持多種存儲引擎,比如InnoDB,MyISAM,Memory,Archive等等.在大多數的情況下,直接選擇使用InnoDB引擎都是最合適的,InnoDB也是MySQL的默認存儲引擎.

  1. InnoDB和MyISAM有什么區(qū)別?

  • InnoDB支持事物,而MyISAM不支持事物

  • InnoDB支持行級鎖,而MyISAM支持表級鎖

  • InnoDB支持MVCC, 而MyISAM不支持

  • InnoDB支持外鍵,而MyISAM不支持

  • InnoDB不支持全文索引,而MyISAM支持。

事務

事務:就是把多個數據庫操作打包成一個“不可分割”的整體來進行執(zhí)行,同時在這些操作執(zhí)行后,需要保證數據可靠一致

創(chuàng)建事務:

start transcation ; -- 開啟事務 // begin

commit ; -- 提交

callback -- 回滾

ACID模型

ACID模型,就是我們常說的數據庫事務四大特性:原子性,一致性,隔離性,持久性;由這四種特性保證了事務的可靠和一致

一致性是由原子性,隔離性,持久性共同保證的

原子性: 需要向原子一樣不可分割,操作要么全部成功,要么全部失敗;

如何實現: Innodb 提供了 undo log 機制

隔離性

事務的隔離性是指一個事務的執(zhí)行不能被其他事務干擾,即一個事務內部的操作及使用的數據對并發(fā)的其他事務是隔離的,

并發(fā)執(zhí)行的各個事務之間不能互相干擾。

分為:寫與寫隔離,寫和讀隔離

面試題

第一題:一張自增表里面總共有7 條數據,刪除了最后 2 條數據,重啟 mysql 數據庫,又插入了一條數據,此時 id 是幾?

8

第二題:如何獲取當前數據庫版本?

MySQL的兩種方式:

在cmd中輸入mysql -V查看;注意:需要在對應的目錄下執(zhí)行;

在MySQL的命令窗口[Command Line Client]中輸入:select version(); [函數];或者在Navicat或其他的工具中創(chuàng)建查詢輸入select version();

Oracle:

select * from v$version;

select * from product_component_version;

第三題:說一下ACID是什么?

① 原子性(Atomicity,或稱不可分割性)、

一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環(huán)節(jié)。事務在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務開始前的狀態(tài),就像這個事務從來沒有執(zhí)行過一樣。

② 一致性(Consistency)、

在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規(guī)則,這包含資料的精確度、串聯性以及后續(xù)數據庫可以自發(fā)性地完成預定的工作。

③ 隔離性(Isolation,又稱獨立性)、

數據庫允許多個并發(fā)事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發(fā)執(zhí)行時由于交叉執(zhí)行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。

④ 持久性(Durability)。

事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。

第四題:mysql 的內連接、左連接、右連接有什么區(qū)別?

內連接:只顯示所有有關聯的數據,左表或右表沒有的則不顯示;

左連接:顯示左表的所有數據,右表沒有的用null補全;

右連接:顯示右表的所有數據,左表沒有的用null補全;

第五題:mysql 索引是怎么實現的?

MySQL采用B+ Tree實現索引;

B+ Tree的特點:

單節(jié)點能存儲更多的數據,減少磁盤IO次數;

葉子節(jié)點形成有序鏈表,便于執(zhí)行范圍操作(如:where id < 10);

聚集索引,葉子節(jié)點存儲數據,而非聚集索引,葉子節(jié)點存儲數據的地址;

說一下數據庫的事務隔離?

第六題:事務的隔離級別?

第一類丟失更新:

第二類丟失更新:當兩個或多個事務更新同一行時,都是基于最初選定的值更新,由于事務是相互隔離的,所以最后一個事物的更新覆蓋其他事務的更新;

臟讀:事務A讀取了事務B還沒有提交的數據(讀未提交);

不可重復讀:在一個事務內多次讀取了某個數據,而讀取出來的數據不一致(數據發(fā)生改變或被刪除);

幻讀:在一個事務內的操作中發(fā)現了未被操作的數據;幻讀出現的前提是并發(fā)的事務中有事務發(fā)生了插入、刪除操作;

事務的隔離級別越高,在并發(fā)下出現的上述五種問題越少,但同時付出的性能開銷也越大(并發(fā)和性能之間的權衡);

DEFAULT默認隔離級別:

每種數據庫支持的數據隔離級別不一樣;

MySql可以使用select @@(global.(系統級別)|session級別)tx_isolation查看默認的事務隔離級別(REPEATABLE-READ);

Spring將事務隔離級別設置為DEFAULT表示使用底層數據庫的默認事務隔離級別;

READ-UNCOMMITTED讀未提交:

能讀取到未被提交的數據,無法解決臟讀、不可重復讀及幻讀;

READ-COMMITTED讀已提交:

能讀取到已經提交的數據,能防止臟讀,但是不能防止不可重復讀和幻讀;

REPEATABLE-READ重復讀取:

在讀取完數據之后加鎖,類似于”select * from XXX for update”,明確表示讀取數據為了更新;REPEATABLE-READ讀取一條數據,事務不結束,別的事務就不可以修改這條數據,解決了臟讀、不可重復讀,但是不能解決幻讀;

SERLALIZABLE串行讀:

最高事務隔離級別,一個事務(包括子事務)接一個事務的執(zhí)行,解決了幻讀問題;

注意:Oracle只支持Read Committed和Serializable和自定義的Read Only隔離級別;

常用命令:

修改隔離級別:set tx_isolation = “四種事務隔離級別”;

事務傳播特性(面試) 7種傳播特性

概念:當事務方法被另外一個事務方法調用時,指定事務應該如何傳播;

傳播屬性(默認REQUIRED):

REQUIRED:事務內所有的子事務都成功執(zhí)行結束后(都不拋出異常)才提交數據;

REQUIRED_NEW:事務內所有的子事務都是獨立事務,執(zhí)行一個掛起一個(事務完成一個提交一個,拋出異常的不提交并結束整個事務);不管是否存在事務,都new一個新的事務,將原來的事務掛起,新的事務執(zhí)行完畢后再執(zhí)行老的事務;

SUPPORTS:如果有正在運行的事務,則在該事務內運行,否則可不運行在事務中;

NOT_SUPPORTS:當前方法不運行在事務中,如果有正在運行的事務,則將該事務掛起(不開啟事務);

MANDATORY(強制):當前方法必須運行在事務中,如果沒有正在運行的事務,則拋出異常;

NERVER:當前方法不運行在事務中,如果有運行的事務,則拋出異常;

NESTED(嵌套):如果有事務在運行,當前事務方法嵌套到運行事務中運行,否則開啟一個新事務運行;

注:MySql中索引是INNODB,才支持事務;MYISAM不支持事務;

第七題:說一下mysql 的行鎖和表鎖?

表鎖:

特點:加鎖快,開銷小;不會出現死鎖(一次性獲取全部鎖);發(fā)生鎖沖突的概率高,并發(fā)低;

使用表鎖的場景:

場景一:事務需要更新大部分或全部表數據;

場景二:事務需要使用多張表,可能會引起死鎖,造成大量事務回滾;

行鎖:

共享鎖:允許一個事務去讀一行,阻止其他事務獲得相同數據集的排他鎖;

排他鎖:允許獲取排他鎖的更新數據,阻止其他事務獲取相同數據集的共享讀鎖和排他寫鎖;

特點:開銷大,加鎖慢;可能出現死鎖;發(fā)生鎖沖突的概率低,并發(fā)最高;

注:InnoDB行鎖是通過索引上的索引項實現的,而Oracle則是給數據行加鎖;InnoDB只有通過索引條件檢索數據,才會使用行鎖,否則使用表鎖;

注:表鎖適用于并發(fā)度不高,以查詢?yōu)橹鞯男⌒蛍eb應用;而行鎖適用于高并發(fā),對事務完整性要求較高的系統;

第八題:如何做mysql的性能優(yōu)化?(重要)

①用PreparedStatement一般來說比Statement性能高;

②有外鍵約束會影響插入和刪除性能,如果程序能夠保證數據的完整性,在設計數據庫時就去掉外鍵;

看mysql幫助文檔子查詢章節(jié)的最后部分,下面的子查詢語句要比第二條關聯查詢效率高:

select e.name,e.salary where e.managerid=(select id from employee where name='zxx');

select e.name,e.salary,m.name,m.salary from employees e,employees m where

e.managerid = m.id and m.name='zxx';

③表中允許適當冗余;

④sql語句全部大寫,特別是列名和表名都大寫。

⑤開啟緩存查詢(使用變量代替函數);根據緩存的特點,不要拼湊條件,而是用?和PreparedStatment;

⑥對頻繁查詢的字段建立索引;查詢時盡量使用主鍵作為條件;

⑦對于明確知道查詢結果只有一條數據的使用limit 1;

⑧不要使用select *,需要什么字段就查詢什么字段;

⑨表設計時盡量用固定長度的類型如char;

⑩垂直分割:將表中的常用列和非常用列垂直拆分成多張表存儲;如:將姓名和密碼單獨從用戶表中獨立出來。

使用expain關鍵字可以查看性能;

批量插入(batch insert,group commit)

http://www.risenshineclean.com/news/5907.html

相關文章:

  • 用戶界面設計包括seo培訓機構排名
  • 網絡服務商英文seo優(yōu)化網站優(yōu)化排名
  • 杭州高端網站網站seo排名免費咨詢
  • 山東建設網站首頁建網站多少錢
  • 深圳網站開發(fā)公司寶網seo外包優(yōu)化公司
  • 網站 意義百度查重入口
  • 汽車網站頁面設計雅虎搜索引擎中文版
  • 浙江省人才網官方網站建設廳招聘企業(yè)網站有哪些功能
  • wordpress顯示慢網站推廣seo設置
  • 公司做網站設計的百度熱點排行榜
  • 網站升級中模板站長統計幸福寶
  • 怎樣修改網站模板百度seo網站優(yōu)化 網絡服務
  • 赤峰專業(yè)的網站建設谷歌搜索引擎優(yōu)化
  • 哪個網站可以做付郵免費送活動怎么免費自己做推廣
  • 做詐騙網站犯什么法西安百度公司地址介紹
  • 煙臺網站改版網站快速收錄
  • 新手去哪個網站做翻譯搜索引擎哪個最好用
  • 餐飲網站建設百度com百度一下你
  • 平安好車主app下載官方網站下載推廣拉新app哪幾個靠譜
  • 做涉黃的視頻網站用什么服務器域名注冊需要多少錢
  • 湖北省建設招投標監(jiān)督機構網站營銷型網站建設多少錢
  • 無錫網站的建設搜索引擎優(yōu)化關鍵詞選擇的方法有哪些
  • 做網站設計的都轉行干啥了網址如何被快速收錄
  • 做網站找云無限seo搜索優(yōu)化排名
  • 北京的制作網站的公司在哪里seo學校培訓
  • 汽車圖片查詢網站源碼十大網站排行榜
  • 醫(yī)療網站建設公司哪家好百度站點
  • 電子商務網站規(guī)劃書范文桂林市天氣預報
  • 寧波網站設計企業(yè)網頁制作的步驟
  • 設計師培訓 網站seo資訊