首頁技術(shù)文章正文

MySQL數(shù)據(jù)庫基本概念

更新時(shí)間:2018-10-19 來源:黑馬程序員技術(shù)社區(qū) 瀏覽量:

MySQL數(shù)據(jù)庫1.數(shù)據(jù)庫基本概念:

        數(shù)據(jù)庫(DataBase) 簡(jiǎn)稱 DB

                概念: 用于存儲(chǔ)和管理數(shù)據(jù)的倉庫。               

                特點(diǎn):

                        1.持久化存儲(chǔ)數(shù)據(jù).

                        2.方便存儲(chǔ)和管理數(shù)據(jù)

                        3.使用了統(tǒng)一的方式操作數(shù)據(jù)庫 --SQL

        數(shù)據(jù)庫軟件與數(shù)據(jù)庫的區(qū)別:

                數(shù)據(jù)庫:大的范圍,泛指所有存儲(chǔ)和管理數(shù)據(jù)的數(shù)據(jù)庫(數(shù)據(jù)庫軟件)

                數(shù)據(jù)庫軟件: 管理和存儲(chǔ)數(shù)據(jù)

        常見的數(shù)據(jù)庫軟件:

                MySQL  Oracle  SQL Server(微軟公司)   DB2(IBM公司)               

               

2.mysql數(shù)據(jù)庫

安裝:

        若安裝報(bào)1006(1007),沒有管理員權(quán)限

        則以管理員身份打開DOS命令

        輸入:msiexec /package  mysql軟件所在的路徑+安裝包名稱.msi

刪除:

        1.卸載MySQL

        2.刪除C:/ProgramData目錄下的MySQL文件夾。

        若刪除完安裝不成功,則再刪除mysql相關(guān)的注冊(cè)表

配置:

        MySQL服務(wù)啟動(dòng)

                   1.手動(dòng)

                2.cmd--> services.msc 打開服務(wù)的窗口

                3.使用管理員打開DOS

                        net start mysql : 啟動(dòng)mysql的服務(wù)

                        net stop mysql:關(guān)閉mysql服務(wù)

        MySQL登錄

                1.mysql -uroot -proot

                2.mysql -hip -uroot -p連接目標(biāo)的密碼

                3.mysql --host=ip --user=root --p=連接目標(biāo)的密碼

        MySQL退出

                1.exit

                2.quit

了解一下文件目錄:

bin:binary(二進(jìn)制)比如:exe,bat
conf:configuration(配置)比如:配置文件
lib:library(圖書館),管理軟件所需的jar包 比如:xxx.jar
temp:(tempary 暫時(shí)的):軟件生成的臨時(shí)文件

MySQL目錄結(jié)構(gòu):

        1.MySQL安裝目錄:

                my.ini為配置文件

        2.MySQL數(shù)據(jù)目錄

                數(shù)據(jù)庫:文件夾

                數(shù)據(jù)表:文件

mysql數(shù)據(jù)庫軟件,數(shù)據(jù)庫,表,數(shù)據(jù)(標(biāo)記了)的關(guān)系:

1.先有mysql數(shù)據(jù)庫軟件

2.在數(shù)據(jù)庫軟件上面,創(chuàng)建多個(gè)數(shù)據(jù)庫(對(duì)應(yīng)文件夾)

        比如:mysql,performance_schema,test

3.在數(shù)據(jù)庫里面,創(chuàng)建多張表(對(duì)于文件)

4.在表(二維表格)里,管理表記錄(數(shù)據(jù))

        

3.sql指令(重點(diǎn)掌握)sql概述

        Structured Query Language:結(jié)構(gòu)化查詢語言

                sql不僅能查詢操作,還能進(jìn)行增刪改(crud)操作.

        其實(shí)就是定義了操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則.

每一種數(shù)據(jù)庫操作的方式存在不一樣的地方,稱為"方言"

SQL通用語法:

        1.SQL語句可以單行或多行書寫,以分號(hào)結(jié)尾

        2.可以使用空格或縮進(jìn)來增強(qiáng)語句的可讀性

        3.MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫

         4.3種注釋   

                單行注釋: -- 注釋內(nèi)容 或 # 注釋內(nèi)容(mysql 特有)                  多行注釋: /* 注釋 */

sql常見的分類--四類

        1.DDL:數(shù)據(jù)庫定義語言,作用創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表以及修改數(shù)據(jù)庫和數(shù)據(jù)表(表結(jié)構(gòu))

        2.DCL數(shù)據(jù)庫控制語言,作用 給數(shù)據(jù)庫和數(shù)據(jù)表進(jìn)行授權(quán)操作(了解)

        3.DML:數(shù)據(jù)庫操作語言,作用 對(duì)表中的數(shù)據(jù)(記錄)進(jìn)行 添加,修改,刪除操作

        4.DQL:數(shù)據(jù)庫查詢語言,作用 對(duì)表中的數(shù)據(jù)(記錄)進(jìn)行查詢操作

sql操作數(shù)據(jù)庫和表DDL  創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表 以及修改等操作.

                關(guān)鍵詞:create drop alter等

操作數(shù)據(jù)庫:CRUD

        C:Create 創(chuàng)建

        R:Retrieve 查詢

        U:Update 修改

        D:Delete        刪除

        使用數(shù)據(jù)庫

R:


查詢所有數(shù)據(jù)庫的名稱:
    show databases;
查看某個(gè)數(shù)據(jù)庫的字符集:
    show create database 數(shù)據(jù)庫名稱;

C:


創(chuàng)建數(shù)據(jù)庫:
    create database 數(shù)據(jù)庫名稱;
創(chuàng)建數(shù)據(jù)庫,判斷不存在,再創(chuàng)建:
    creat database if not exists 數(shù)據(jù)庫名稱;
創(chuàng)建數(shù)據(jù)庫,并指定字符集:
    creat database 數(shù)據(jù)庫名稱 character set 字符集名稱

U:


修改數(shù)據(jù)庫的字符集:
    alter database 數(shù)據(jù)庫名稱 character set 字符集

D:


刪除數(shù)據(jù)庫
     drop database 數(shù)據(jù)庫名稱;
判斷數(shù)據(jù)庫存在,存在再刪除
    drop database if exists 數(shù)據(jù)庫名稱;

使用數(shù)據(jù)庫:


查詢當(dāng)前正在使用的數(shù)據(jù)庫
    select database();
使用數(shù)據(jù)庫
    use 數(shù)據(jù)庫名稱操作表:CRUD

        區(qū)分別結(jié)構(gòu)和表記錄:

                表結(jié)構(gòu): 表頭(表的字段)和字段對(duì)應(yīng)的類型(數(shù)據(jù)類型)

                表記錄:表頭(字段)對(duì)應(yīng)的值

C:創(chuàng)建

語法:
            create table 表名(
                列名1 數(shù)據(jù)類型1,
                列名2 數(shù)據(jù)類型2,
                ....
                列名n 數(shù)據(jù)類型n
            );
        注意:最后一列不需要加","
數(shù)據(jù)類型:
        1.int 整數(shù)類型;
            age int,
        2.double 小數(shù)類型;
            score double(5,2) -->最多5位保留2位
         3.date 日期; 只包含年月日,yyyy-MM-dd
         4.datetime 日期; 包含年月日時(shí)分秒,yyyy-MM-dd HH:mm:ss
         5.timestamp 時(shí)間戳類型 包含年月日時(shí)分秒,yyyy-MM-dd HH:mm:ss
            如果將來不給這個(gè)字段賦值,或賦值為null,則默認(rèn)使用當(dāng)前的系統(tǒng)時(shí)間,來自動(dòng)賦值   
          6.varchar 字符串類型
                name varchar(20); --->姓名最大20個(gè)字符

復(fù)制表:
    create table 表名 like 被復(fù)制的表名;     

R:查詢


查詢某個(gè)數(shù)據(jù)庫中所有的表名稱
    show tables;
查詢表結(jié)構(gòu)
    desc 表名;

U:修改


1.修改表名
    alter table 表名 rename to 新的表名;
2.修改表的字符集
    alter table 表名 character set 字符集名稱;
3.添加一列
    alter table 表明 add 列名 數(shù)據(jù)類型;
4.修改列名稱 類型
    alter table 表明 change 列名 新類名 數(shù)據(jù)類型
    alter table 表明 modify 列名 新數(shù)據(jù)類型
5.刪除列
    alter table 表明 drop 列名

D:刪除


drop table 表名;
drop table  if exists 表名 DML:操作表記錄(數(shù)據(jù))

        添加數(shù)據(jù):insert into

        修改數(shù)據(jù):update

        刪除數(shù)據(jù):delete

1.添加數(shù)據(jù):
語法:
    insert into 表明(列名1,列名2,...,列名n) values(值1,值2,...,值n);
注意:
    1.列名和值要一一對(duì)應(yīng);
    2.如果表名后,不定義列名,則默認(rèn)給所有列添加值
        insert into 表名 values(值1,值2,...值n);
    3. 除了數(shù)字類型,其他類型需要使用引號(hào)(單雙都可以)引起來2.刪除數(shù)據(jù)
語法:
    delete from 表名 [where 條件]
注意:
    1. 如果不加條件,則刪除表中所有記錄。
    2. 如果要?jiǎng)h除所有記錄
        1. delete from 表名;  不推薦使用。有多少條記錄就會(huì)執(zhí)行多少次刪除操作
        2. TRUNCATE TABLE 表名; 推薦使用,效率更高 先刪除表,然后再創(chuàng)建一張一樣的表。 (屬于DDL的語句)
    3.修改數(shù)據(jù)
語法:
    update 表名 set 列名1=值1,列名2=值2,...[where 條件];
注意:
     如果不加任何條件,則會(huì)將表中所有記錄全部修改。DQL:查詢表記錄(數(shù)據(jù))
查詢所有數(shù)據(jù):
    select*from 表名;
語法:
    select
        字段列表
    from
        表名列表
    where
        條件列表
    group by
        分組字段
    having
        分組之后的條件
    order by
        排序
    limit
        分頁基礎(chǔ)查詢:

去除重復(fù):(distinct)

        select distinct address from student;


1. 多個(gè)字段的查詢
        select 字段名1,字段名2... from 表名;
        
    注意:
         如果查詢所有字段,則可以使用*來替代字段列表。
         
2. 去除重復(fù):
     distinct
     select distinct from 表名
3. 計(jì)算列
        * 一般可以使用四則運(yùn)算計(jì)算一些列的值。(一般只會(huì)進(jìn)行數(shù)值型的計(jì)算)
        * ifnull(表達(dá)式1,表達(dá)式2):null參與的運(yùn)算,計(jì)算結(jié)果都為null
            * 表達(dá)式1:哪個(gè)字段需要判斷是否為null
            * 如果該字段為null后的替換值。
            
4. 起別名:as(Alias)
     as :as也可以省略
    select 字段名 as 別名 from 表名

注意:

        1.字段,列名稱,表頭,都表示一個(gè)意思,都是表的Field(字段)

        2.字符集,編碼格式,編碼表,都表示一個(gè)意思,都是編碼

                常見的編碼:

                        utf-8:萬能的碼表,支持所有的字符.

                        gbk,gb2312,gb18030:中文的碼表,支持中文,還支持其他字符,但不包含日文,韓文等字符.

                        iso-8859-1:西歐的碼表,支持西歐的字符,但不支持日文,韓文,中文等字符.

                        

條件查詢:

        模糊條件查詢

        分組條件查詢

        排序條件查詢

        子查詢

        聚合函數(shù)查詢

day02

1.單表查詢(重點(diǎn))1.0 模糊查詢
基本語法: where  字段 like ;
LIKE:模糊查詢
         占位符:
            _:單個(gè)任意字符
             %:任意(0-N)個(gè)任意字符1.1 條件查詢
    1. where子句后跟條件
    2. 運(yùn)算符
        * > 、< 、<= 、>= 、= 、<>
        * BETWEEN...AND  (包含左右兩端) 
        * IN( 集合)  
            in(值1...值n)  等同于 =值1 or 值2 or..值n
        
        * IS NULL  
        * and  或 &&
        * or  或 || 
        * not  或 !1.2 排序查詢
語法
    order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...
    排序方式:
        * ASC:升序,默認(rèn)的。
        * DESC:降序。

    * 注意:
        * 如果有多個(gè)排序條件,則當(dāng)前邊的條件值一樣時(shí),才會(huì)判斷第二條件。1.3 聚合函數(shù)查詢
聚合函數(shù):將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算。
    count:計(jì)算個(gè)數(shù)
        格式:select count(name)from 表名
         一般選擇非空的列:主鍵
         count(*)
    max:計(jì)算最大值   
    min:計(jì)算最小值
    sum:計(jì)算和
    avg:計(jì)算平均值
    
    注意:
    1.聚合函數(shù)里面的參數(shù):表的字段
    2.聚合函數(shù)在進(jìn)行運(yùn)算時(shí),null值不參與運(yùn)算.
    3.聚合函數(shù)一般是對(duì)int類型的進(jìn)行運(yùn)算,其他類型沒有意義
    4.特別在使用count(字段),一般為主鍵字段(非空,唯一)1.4 分組查詢
基本語法:
    group by 字段;
    分組,按字段共同特點(diǎn)進(jìn)行分組,如果按字段特有方法進(jìn)行分組,沒有任何意義.
    
     注意:
        1. 分組之后查詢的字段:分組字段、聚合函數(shù)
        2. where 和 having 的區(qū)別?
            1. where 在分組之前進(jìn)行限定,如果不滿足條件,則不參與分組。having在分組之后進(jìn)行限定,如果不滿足結(jié)果,則不會(huì)被查詢出來
            2. where 后不可以跟聚合函數(shù),having可以進(jìn)行聚合函數(shù)的判斷。
        通俗來講聚合函數(shù)一般用咱分組后.    
查詢時(shí)的關(guān)鍵詞先后順序:
    
    select
        字段列表
    from
        表名列表
    where
        條件列表
    group by
        分組字段
    having
        分組之后的條件
    order by
        排序
    limit
        分頁1.5 分頁查詢
分頁:數(shù)據(jù)太多,一次性查詢不出來,展示效果不好,就是用戶的體驗(yàn)不好
分頁操作:不同的數(shù)據(jù)庫分頁基本原理不一樣
mysql:用limit進(jìn)行分頁,其他數(shù)據(jù)庫不能使用limit進(jìn)行分頁
語法:
    limit 開始的索引,每頁查詢的條數(shù);
    eg:select*from student limit 0, 3;
    公式:開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)2.約束(重點(diǎn))

        約束概述:一種規(guī)范(限制),數(shù)據(jù)庫約束就是對(duì)表中的數(shù)據(jù)進(jìn)行規(guī)范,讓數(shù)據(jù)具有某種特點(diǎn).

數(shù)據(jù)庫的約束:1.主鍵約束:primary key
1.注意
    含義:非空且唯一
    一張表只能有一個(gè)字段為主鍵
    主鍵 就是表中記錄的唯一標(biāo)識(shí)
2.創(chuàng)建表時(shí),添加主鍵約束
    eg:id int primary key;
3.刪除主鍵
    eg:alter table 表名 DROP PRIMARY KEY;
4.創(chuàng)建完表后,添加主鍵
    eg:alter table 表名 MODIFY id INT PRIMARY KEY;

5.自動(dòng)增長(zhǎng)
    概念:如果某一列是數(shù)值類型的,使用auto_increment 可以來完成值的自動(dòng)增長(zhǎng)
    創(chuàng)建表時(shí)添加:
        eg:id int primary key auto_increment;
    刪除自動(dòng)增長(zhǎng):
        eg:alter table 表名 modify id int;
    表創(chuàng)建完成后添加自動(dòng)增長(zhǎng): 
    alter table 表名 modify id int auto_increment;2.非空約束:not null
非空:某一列的值不能為空
操作:
  1.在創(chuàng)建時(shí)添加約束
    eg:name varchar(10) not null;
  2.創(chuàng)建表完成后添加非空約束
    eg:alter table 表名 MODIFY name varchar(10) not null;
  3.刪除非空約束
    eg:alter table 表名 MODIFY name varchar(10);3.唯一約束:unique
唯一:某一列的值不能重復(fù)
操作:
  1.在創(chuàng)建表時(shí)添加
    eg:name varchar(10) unique;
  2.在創(chuàng)建表完成后添加
    eg:alter table 表名 MODIFY name varchar(10) unique;
  3.刪除唯一約束
    eg:alter table 表名 DROP INDEX 字段名;
注意事項(xiàng):
    1.唯一約束可以有null值,但是只能有一條記錄為null4.外鍵約束:foreign key
外鍵約束:foreign key,讓表與表產(chǎn)生關(guān)系,從而保證數(shù)據(jù)的正確性
1.在創(chuàng)建表時(shí),可以添加外鍵
    外鍵列,
    [constraint 外鍵名稱] foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
2.刪除外鍵
    alter table 表名 drop foreign key 外鍵名
3.創(chuàng)建表完成后,添加外鍵
    alter table 表名 add [constraint 外鍵名稱] foreign key (外鍵名) references 主表名稱(主表列名稱);
    
外鍵特點(diǎn):
    1.外鍵的值不能隨意寫
    2.外鍵的值引用于另一張表的主鍵值
    3.外鍵的值可以為null(但是為null沒有任何意義)
    
外鍵設(shè)計(jì)原則:
    1.主表
    2.子表

(了解)級(jí)聯(lián)操作
    概述:只有表與表之間有關(guān)聯(lián)關(guān)系,才可以進(jìn)行級(jí)聯(lián)操作
    作用:當(dāng)主表的數(shù)據(jù)發(fā)生變化時(shí),那么字表的數(shù)據(jù)會(huì)級(jí)聯(lián)發(fā)生變化
    級(jí)聯(lián)操作:一般情況下,操作是針對(duì)修改 update和刪除 delete
    分兩種情況:
        第一種:當(dāng)主表的數(shù)據(jù)變化時(shí),子表的數(shù)據(jù)和主表的數(shù)據(jù)保持一致
            語法:ON UPDATE CASCADEON ON DELETE CASCADE 
        第二種:當(dāng)主表的數(shù)據(jù)變化時(shí),子表的數(shù)據(jù)(外鍵的數(shù)據(jù))設(shè)置為null
            語法:ON UPDATE set null ON DELETE set null
    1. 添加級(jí)聯(lián)操作
        語法:ALTER TABLE 表名 ADD [CONSTRAINT 外鍵名稱] FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE  ;
    2. 分類:
        1. 級(jí)聯(lián)更新:ON UPDATE CASCADE 
        2. 級(jí)聯(lián)刪除:ON DELETE CASCADE 3.多表關(guān)聯(lián)(重點(diǎn))數(shù)據(jù)庫的設(shè)計(jì):

        1.多表之間的關(guān)系

                *一對(duì)一(了解)

                        eg:人和身份證

                        主表和子表可以是任意一方

                *一對(duì)多

                        eg:一個(gè)部門有多個(gè)員工

                        主表就是一方表,這里指部門表

                        子表就是多方表,這里指員工表

                        外鍵設(shè)計(jì)在子表

                *多對(duì)多(強(qiáng)化版 的 一對(duì)一)

                        eg:學(xué)生和課程

                                一個(gè)學(xué)生可以選擇多門課程,一個(gè)課程也能被多個(gè)學(xué)生選擇

                        主表(子表)可以是任意一方(不推薦這樣區(qū)分和設(shè)計(jì)外鍵)

                        外鍵設(shè)計(jì)原則:提供一張中間表,來完成外鍵的關(guān)聯(lián)

        2.數(shù)據(jù)庫設(shè)計(jì)范式

4.數(shù)據(jù)庫的設(shè)計(jì)范式(了解)

概念:設(shè)計(jì)數(shù)據(jù)庫時(shí),需要遵循的一些規(guī)范。要遵循后邊的范式要求,必須先遵循前邊的所有范式要求

        目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。

5.數(shù)據(jù)庫的備份和還原

        

命令行:

語法:

        備份: mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名稱 > 保存的路徑

        還原:

                1.登錄數(shù)據(jù)庫

                2.創(chuàng)建數(shù)據(jù)庫

                3.使用數(shù)據(jù)庫

                4.執(zhí)行文件   source 文件路徑

圖形化工具:


day03

1.多表的查詢(掌握)

查詢語法:        


select
        列名列表
    from
        表名列表
    where....

多個(gè)表放在一起查詢

        出現(xiàn)問題:笛卡爾積

        笛卡爾積:一個(gè)外鍵值對(duì)應(yīng)多個(gè)主鍵值

        解決方法:消除沒有用的數(shù)據(jù)

笛卡爾積:        * 有兩個(gè)集合A,B .取這兩個(gè)集合的所有組成情況。

要完成多表查詢,需要消除無用的數(shù)據(jù)

        通過主鍵和外鍵關(guān)聯(lián).(因?yàn)橥怄I的值引用于主鍵的值)


多表查詢分類:1.內(nèi)連接查詢隱式內(nèi)連接:

        使用where條件消除無用數(shù)據(jù)

顯式內(nèi)連接:

        語法:select 字段列表 from 表名1  [inner] join 表2 on 條件;

內(nèi)連接查詢的邏輯:

        1.從哪些表中查數(shù)據(jù)

        2.條件是什么

        3.查詢哪些字段

2.外連接查詢1.左外鏈接:

                select 字段列表 from 表1 left [outer] join 表2 on 條件;

                 查詢的是左表所有數(shù)據(jù)以及其交集部分。

2.右外連接:

                        語法:select 字段列表 from 表1 right [outer] join 表2 on 條件;                         查詢的是右表所有數(shù)據(jù)以及其交集部分。

3.子查詢

        概念:查詢中嵌套查詢.

子查詢不同情況:

        1. 子查詢的結(jié)果是單行單列的:

                子查詢可以作為條件,使用運(yùn)算符去判斷。 運(yùn)算符: >  >=  <  <=  =

        2.子查詢的結(jié)果是多行單列的:

                子查詢可以作為條件,使用運(yùn)算符in來判斷        

        3.子查詢的結(jié)果是多行多列的:

                子查詢可以作為一張?zhí)摂M表參與查詢

2.事務(wù)(了解)1.事務(wù)的基本介紹

        概念:

                是一組操作,這組操作要么同時(shí)成功,要么同時(shí)失敗。

2.操作:

        1.開啟事務(wù): start transaction;

        2.回滾:rollback;

        3.提交:commit;

3.在MySQL數(shù)據(jù)庫中事務(wù)自動(dòng)提交

        事務(wù)提交的兩種方式:

                1.自動(dòng)提交:

                        mysql就是自動(dòng)提交的

                        一條DML(增刪改)語句會(huì)自動(dòng)提交一次事務(wù)。

                2.手動(dòng)提交:

                        Oracle 數(shù)據(jù)庫默認(rèn)是手動(dòng)提交事務(wù)

                        需要先開啟事務(wù),再提交

                        修改事務(wù)的默認(rèn)提交方式:

查看事務(wù)的默認(rèn)提交方式:SELECT @@autocommit; -- 1 代表自動(dòng)提交  0 代表手動(dòng)提交

修改默認(rèn)提交方式: set @@autocommit = 0;


4.事務(wù)的四大特征:

        1.原子性:是不可分割的最小操作單位,要么同時(shí)成功,要么同時(shí)失敗。

        2.持久性:當(dāng)事務(wù)提交或回滾后,數(shù)據(jù)庫會(huì)持久化的保存數(shù)據(jù)。

        3.隔離性:多個(gè)事務(wù)之間。相互獨(dú)立。

        4.一致性:事務(wù)操作前后,數(shù)據(jù)總量不變

5.事務(wù)的隔離級(jí)別(了解)

        概念:多個(gè)事務(wù)之間隔離的,相互獨(dú)立的。但是如果多個(gè)事務(wù)操作同一批數(shù)據(jù),則會(huì)引發(fā)一些問題,設(shè)置不同的隔離級(jí)別就可以解決這些問題。

存在問題:

        1. 臟讀:一個(gè)事務(wù),讀取到另一個(gè)事務(wù)中沒有提交的數(shù)據(jù)        2.不可重復(fù)讀(虛讀):在同一個(gè)事務(wù)中,兩次讀取到的數(shù)據(jù)不一樣。

        3.幻讀:一個(gè)事務(wù)操作(DML)數(shù)據(jù)表中所有記錄,另一個(gè)事務(wù)添加了一條數(shù)據(jù),則第一個(gè)事務(wù)查詢不到自己的修改。

隔離級(jí)別:

                1. read uncommitted:讀未提交                         產(chǎn)生的問題:臟讀、不可重復(fù)讀、幻讀                2. read committed:讀已提交 (Oracle)                         產(chǎn)生的問題:不可重復(fù)讀、幻讀                3. repeatable read:可重復(fù)讀 (MySQL默認(rèn))                         產(chǎn)生的問題:幻讀                4. serializable:串行化                        可以解決所有的問題

        注意:隔離級(jí)別從小到大安全性越來越高,但是效率越來越低

        數(shù)據(jù)庫查詢隔離級(jí)別:

                 select @@tx_isolation;

        數(shù)據(jù)庫設(shè)置隔離級(jí)別:                set global transaction isolation level  級(jí)別字符串;

3.SQL分類:DCL(了解 或 不了解)

DCL:管理用戶,授權(quán)

1. 管理用戶添加用戶:

                        * 語法:CREATE USER '用戶名'@'主機(jī)名' IDENTIFIED BY '密碼';

刪除用戶:

                        * 語法:DROP USER '用戶名'@'主機(jī)名';

修改用戶密碼:
    UPDATE USER SET PASSWORD = PASSWORD('新密碼') WHERE USER = '用戶名';
    eg:UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';
        
    SET PASSWORD FOR '用戶名'@'主機(jī)名' = PASSWORD('新密碼');
    eg:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');

mysql中忘記了root用戶的密碼?
        1. cmd -- > net stop mysql 停止mysql服務(wù)
                * 需要管理員運(yùn)行該cmd

        2. 使用無驗(yàn)證方式啟動(dòng)mysql服務(wù): mysqld --skip-grant-tables
        3. 打開新的cmd窗口,直接輸入mysql命令,敲回車。就可以登錄成功
        4. use mysql;
        5. update user set password = password('你的新密碼') where user = 'root';
        6. 關(guān)閉兩個(gè)窗口
        7. 打開任務(wù)管理器,手動(dòng)結(jié)束mysqld.exe 的進(jìn)程
        8. 啟動(dòng)mysql服務(wù)
        9. 使用新密碼登錄。查詢用戶:

                -- 1. 切換到mysql數(shù)據(jù)庫                        USE myql;                -- 2. 查詢user表                        SELECT * FROM USER;


通配符: % 表示可以在任意主機(jī)使用用戶登錄數(shù)據(jù)庫權(quán)限管理:1.查詢權(quán)限:

                SHOW GRANTS FOR '用戶名'@'主機(jī)名';                SHOW GRANTS FOR 'lisi'@'%';

2.授予權(quán)限:

                grant 權(quán)限列表 on 數(shù)據(jù)庫名.表名 to '用戶名'@'主機(jī)名';        eg:給張三用戶授予所有權(quán)限,在任意數(shù)據(jù)庫任意表上

GRANT ALL ON . TO 'zhangsan'@'localhost';

3.撤銷權(quán)限:

                revoke 權(quán)限列表 on 數(shù)據(jù)庫名.表名 from '用戶名'@'主機(jī)名';                eg:REVOKE UPDATE ON db3.account FROM 'lisi'@'%';

day04

JDBC概述

        概述:Java DataBase Connectivity  Java 數(shù)據(jù)庫連接, Java語言操作數(shù)據(jù)庫

        JDBC本質(zhì):其實(shí)是官方(sun公司)定義的一套操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則,即接口,各個(gè)數(shù)據(jù)庫廠商去實(shí)現(xiàn)這套接口,提供數(shù)據(jù)庫驅(qū)動(dòng)jar包。我們可以使用這套接口(JDBC)編程,真正執(zhí)行的代碼是驅(qū)動(dòng)jar包中的實(shí)現(xiàn)類。

快速入門:步驟:

        1.導(dǎo)入驅(qū)動(dòng)jar包 mysql-connector-java-5.1.37-bin.jar                1.1復(fù)制mysql-connector-java-5.1.37-bin.jar到項(xiàng)目的libs目錄下                1.2.右鍵-->Add As Library        2. 注冊(cè)驅(qū)動(dòng)        3. 獲取數(shù)據(jù)庫連接對(duì)象 Connection        4. 定義sql        5. 獲取執(zhí)行sql語句的對(duì)象 Statement        6. 執(zhí)行sql,接收返回結(jié)果        7. 處理結(jié)果        8. 釋放資源

常見異常:

java.sql.Exception: Access denied for user'root@localhost'(use passworld yes):提示數(shù)據(jù)庫用戶名或者密碼錯(cuò)誤.

l MySQLSyntaxErrorException: Table 'day04_mysql_moretab.tab_user' doesn't exist

提示 數(shù)據(jù)庫下面不存在這個(gè)表

原因:數(shù)據(jù)庫寫錯(cuò)了或者表名寫錯(cuò)了

l MySQLSyntaxErrorException: Unknown column 'id' in 'where clause'

原因: 未知的列字段名稱是id

l MySQLIntegrityConstraintViolationException: Duplicate entry '100' for key 'PRIMARY'

原因: uid這個(gè)主鍵值 重復(fù)添加了

l Parameter index out of range (1 > number of parameters, which is 0).

原因:sql語句的表名寫錯(cuò)了或者 ?占位符 可能是中文的?

l MySQLSyntaxErrorException: You have an error in your SQL syntax

your MySQL server version for the right syntax to use near 'form tab_user' at line 1

原因: sql語句的編寫有問題。

JDBC常用的API

1.java.sql.DriverManager(類)

2.java.sal.Connection(接口)

3.java.sql.Statement(接口)

4.java.sql.PerparedStatement(接口)

5.java.sql.ResultSet(接口)

本文版權(quán)歸黑馬程序員JavaEE培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

作者:黑馬程序員JavaEE培訓(xùn)學(xué)院
首發(fā):http://java.itcast.cn/?skc

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!