1. 程式人生 > >MySql資料庫快速入門與常用sql語句

MySql資料庫快速入門與常用sql語句

MySql資料庫入門與常用sql語句

1.常見資料庫

    1.oracle資料庫(大型)   ------oracle甲骨文
    2.DB2資料庫(大型)      ------IBM
    3.sqlserver(中型)      ------微軟
    4.MySQL(小型)          ------oracle

2.什麼資料庫

   持久化技術
        1.IO
        2.資料庫

資料庫:就是一個檔案系統,通過標準SQL語言操作檔案系統中資料 —- 用來存放軟體系統的資料

3.資料庫中存放的是什麼樣的資料?

關係型資料庫 ‘

4.mysql資料庫的安裝與解除安裝

    1.解除安裝
          1.查詢資料檔案的位置
                  因為資料檔案與安裝檔案可能不在一個位置
                  刪除資料庫後可以不會將資料檔案刪除
                  datadir=""
          2.正常刪除資料庫
                  在控制面板jiangmysql刪除
          3.刪除資料檔案
          4.將mysql遺留檔案刪除

     2.安裝
            mysql資料庫的預設埠3306

            1.關於編碼
                    選擇utf8
            2.目錄配製環境變數path
            3.設定root密碼

            測試是否成功
                  cmd------>mysql -u root -p 回車
                  輸入密碼
                  如果看到 mysql 成功
      3.重置mysql密碼

            1.在執行中輸入 services.msc 停止mysql服務
            2.在cmd下輸入  mysql --skip-grant-tables 啟動伺服器 游標不動(不要關)
            3.新開啟cmd  輸入mysql -u root -p 
            use mysql;
            update user set password=password('abc') WHERE User='root'  ;
            4.關閉兩cmd 工作管理員中結束mysql程序
            5.在服務管理頁面 重啟mysql服務

5.mysql資料伺服器與資料庫與表的關係

          mysql -h   主機名  -p 埠 -u使用者名稱 -p
          輸入密碼             

          如果自己電腦安裝了mysql伺服器
          mysql -u root -p

6.資料在資料烤肉中的儲存方式 與java中的資料關係

資料庫中表中的一個欄位相當於一個屬性
一個記錄相當於一個類的物件

7.sql介紹

        sql結構化查詢語句
        sql非過程性語言

        sql分類(四種)
                DDL  資料定義語言  用來定義資料庫 表等
                DML  資料操縱語言  update insert delete
                DCL  資料控制語言  使用者許可權事務處理

                DQL(重點)  資料查詢語言  select

資料庫(DB)

1.建立資料庫

1.1 簡單建立資料庫

              create database 資料名;

1.2 建立資料庫時可以指定編碼集與校驗規則

               CHARACTER SET:知道資料庫採用的字符集
               COLLATE:指定資料庫字符集的比較方式

               create database 資料庫名 character set 編碼集 collate 校驗;

               create database  資料庫名 character set="utf8" collate="utf8_general_cl";

2.使用資料庫

               use 資料庫名稱  

3.刪除資料庫

               drop database 資料庫

4.檢視資料庫

                show databases; //檢視所有資料庫
                show create database  資料庫名稱 ;  //檢視指定資料庫

5.修改資料(瞭解)

                alter database 資料庫名 character set="編碼集" collate="校驗"  

6.檢視當前使用的資料庫

                select database();

練習

建立一個名稱為mydb1的資料庫.
                create  database  mysql;
建立一個使用utf8字集的mydb1
                create database dtb character set="utf8" ;
建立一個使用utf8字符集,並帶校對規則的mydb3資料庫       
                create database dtb character set="utf8" collate="utf_general__cl";

資料表(table)

1.簡單建立

          create table 表名(
                 欄位名稱1 型別,
                 欄位名稱2 型別,
                 ..........
                 欄位名稱n 型別
          )      

2.指定編碼與校驗

          create table 表名(
                 欄位名稱1 型別,
                 欄位名稱2 型別,
                 ..........
                 欄位名稱n 型別
          ) character set=編碼 collate=校驗

3.mysql資料表中的型別

                  與java中的型別對比

    Java型別                     mysql型別
    整型
    byte| short |int |long          TINYINT| SMALLINT  INT | BIGINT

    boolean                      boolean
    true/false               

    字串(字元)                 varchar char
                                           char與varchar的區別
                                           varchar 可變`字串 "hello"
                                           char 不可變        "hello"

    日期                          日期
    java.util.Date                date -----2010-10-10
    java.sql.Date                 datetime--2010-10-10 11:11:11
    java.sql.Time                 time      11:11:11
    java.sql.TimeStamp            timestamp 15852156486  

    小數
    float                          float
    double                         double
                                   decimal

    資料庫中的大資料
                在資料庫中的大資料使用  IO
                InputStream/OutPutStream------------blob
                Reader/Writer           ------------text



---------------------------
    date        日期
    time        時間
    timestamp   時間戳
    datetime    日期時間


       示例:建立一個類                             
       create  table student(
            id  int,
            name varchar(10),
            birthday date,
            chinese decimal(5,2)     [總共5位數,小數點後面2為]

       )         

4.查看錶結構

        show tables;
        show create table student;                         

複習:
1.建立 create database 庫名 character set=”utf8” collate=”utf8_general_ci”;
2.刪除 drop database 庫名
3.檢視 show database; show create database 庫名;
4.修改資料庫編碼 alter database 庫名 character set=”” collate=”“;
5.切換資料庫 use 庫名;
6.檢視當前使用的資料庫 select database();

操作表

1.建立

              create table 表名(
                          欄位名   型別
                      ) character set="" collate="";

2. 表中的欄位型別

                       int
                       varchar  char
                       float double decimal
                       text blob
                       date datetime

3.檢視

                        desc 表名;
                        show tables;
                        show create table 表名;

表的約束

表的約束一共有六種
約束用來保證資料有效性和完整性

主要介紹三種

1.主鍵約束

    主鍵有兩個特點:非空 唯一
              id int primary key auto_increment, //mysql欄位自動增長:auto_increment
                                                 //sqlserver自動增長:identity(1,1)
                                                 //oracle自動增長    sequence序列     

2.非空約束

              name varchar(5) not null unique, //不為空,且唯一   

3.唯一約束

表的結構修改

1.新增欄位

              alter table 表名 add 欄位 型別;
              alter table users add birthday date;

2.修改欄位型別

              alter table 表名 modify 欄位 型別 ;
              alter table users modify birthday datetime;

4.刪除欄位

              alter table 表名 drop 欄位;
              alter table users drop  birthday;

3.修改欄位 change

              alter table users change 舊欄位名稱 新欄位名稱 型別;
              alter table users change birthday entry_date date;

5.修改表的字符集

              alter table 表名 character set=字符集;

6.修改表名

              rename table 表名 to 新表名
              rename table users to emp;

7.刪除主鍵

              alter table 表名 drop primary key;
              主鍵不能自動增長

      create table users(
        id int primary key auto_increment,
        name varchar(20),
        birthday date,
      )

操作資料表(update delete insert select)

最簡單的查詢

        select * from 表名; 查看錶中的資料

1.insert操作

            基本格式1
                    insert into 表名(欄位,...)  values(值);            
                    insert into users(id,name,birthday) values (1,'Tom','1990-1-1');     
                注意:只有數值型別可以不使用引號,其他型別必須要單引號;            

            基本格式2
                      如果是對錶中所有欄位新增操作
                      insert into 表名(欄位名) values(值1,...);
            基本格式3
                      可以對指定欄位進行新增操作
                      insert into 表名(欄位名) values(值,...) ;        
                      insert into users(id,name) value (1,'james');           
                  如果表中的某個欄位是auto_increment ,新增時可賦值為null,這樣會自動增長

            插入中文紀錄

                    insert into users values(null,'張三');  
                    錯誤原因:mysql  client   採用預設字符集

            修改編碼
                    1.控制檯命令列.
                            show variable like 'character%';
                            修改客戶端編碼
                            set character set_client =gbk;//輸入時編碼正確
                            修改結果編碼集
                            set character_set_result=gbk;//檢視時編碼正確

                    2.修改配置檔案. my.ini

                            在my.ini檔案中找到
                            [client]

                            port=3306

                            [mysql]               

                            default-character-set=編碼

                             這樣修改後對
                             character_set_client
                             character_set_results
                             character_set_connection
                             編碼進行修改
                             這三個是針對客戶端

2. update語句

          基本格式:
                  update 表名 set 欄位=值;
                      一般情況下會加上where條件,如果不加,是對整個欄位賦值
                  update 表名 set 欄位1=值2,欄位2=值2... where id=1,id=2; 

3.delete 語句

          delete from 表名 where 條件

              如果不加條件,相當於刪除表中的所有資料
              delete是刪除記錄的,不能刪除某一列資料
              只能刪除表中內容的,而不能刪除表結構

           面試題:
                  delete.drop,truncate區別
                       1.detelete,truncate是用來刪除表中資料,而drop是刪除表結構
                         truncate 是先將表結構刪除,再重新建立表結構.   

                       2. delete 是受事務控制的,可恢復(DML)
                          truncate不受事務控制,不可恢復(DDL)

                       3.delete可以對指定資料進行刪除
                         truncate 只能刪除所有資料

              drop table 表名
              truncate table 表名                   

4. select 語句

基本select (1)

                      select 欄位 from 表名;
                      select * from 表;代表查詢表中所有欄位值,不建議用

                      如果支隊某幾個欄位進行查詢  
                      select 欄位1,欄位2,... from 表名.

                      distinct 用來消除重複值

基本select (2)

                       1.在select 語句可以對查詢的欄位進行運輸
                       2.可以使用as給欄位起別名(as可以省略) 

                       查詢學生三科成績,顯示時,顯示姓名與三科總成績.      

                      select name as '姓名' ,(Chinese+math+English)/3 as '平均分' from student;
                      select name,Chinese,math+10,English from student;

              查詢時可以使用where子句進行過濾查詢

                       where 經常使用的運算子
                                1.關係運算符    >  <  <=  >= =  <>或!=
                                    select name,Chinese,math,English from student where Chinese in(85,95);
                                2.in
                                3.邏輯運算子 and or not       
                                4.is null 判斷空  is not null 判斷非空
                                5.like  模糊查詢
                                6.between ...and...
                                        相當於  大於 and 小於
                                        注意 between後是小值 and後面是大值

                                        查詢語文成績在80-90之間的
                                        select * from student where Chinese<=90 and Chinese>=80;
                                        select *from student where Chinese between 80 and 90;



                                查詢姓張的人的資訊
                                select * from student where name like '張%'
                                查詢姓名為關某某的人的資訊
                                select * from student where name like '張_'  (只找一個)  

                                %匹配多個字元
                                _匹配一個字元          
select 中的order by
                     排序:

                          select 欄位 from 表名 where 條件 order by 欄位 asc|desc;
                          asc  升序
                          desc 降序
                          注意order by 位於語句的最後

                          select * from student order by Chinese desc; 
                          select id,name,Chinese,math,English,Chinese+math+English as total  from student  order by Chinese+math+English desc; 

聚集函式 (統計函式 聚合函式)

count
                           select count(*) from 表名;
                           查看錶中的記錄條數

                            如:
                            統計一個班共有多少個學生?
                                  select count (name) from student;
                            統計一個班語文成績大於90的學生有多少個?>
                                  select count(*)  from student where Chinese>90;
                            統計總分大於260的認輸有多少個?
                                  select count(*) ,Chinese+math+English from student where Chinese+math+English>260;
sum
                            統計符合條件的列的總和

                            聚集函式當某一欄位的值為null時,會自動轉換為0
                            而如果null與其它值做+運算,結果為null.

                            mysql中有一個函式ifnull
                            ifnull(English,0)

                            求所有學生的總成績如果成績為null,按0取
                            select sum(ifnull(Chinese,0)+ifnull(math,0)+ifnull(English,0)) from student;

                            練習  
                                  統計一個班的數學總成績?
                                        select sum(math) from student ;
                                  統計一個班的語文,數學,英語各科總成績   
                                        select sum(Chinese),sum(math),sum(English) from student;    
                                  統計一個班的語文平均分
                                        select sum(Chinese)/count(Chinese) from student;  
avg
                            平均值
                                  select  avg(math) fromstudent;

                                  求一個班的總分平均分 
                                         select (sum(Chinese)+sum(math)+sum(English))/count(*) from student;

                                         select avg (Chinese+math+ifnull(English,0)) from student;  

                    max/min
                             求列中最大值/最小值

                             練習:
                                    求班級最高分和最低分
                                    select max(Chinese+math+English) as '最高分',  min(Chinese+math+English) as '最低分' from student;

5.mysql資料庫的備份與恢復

1.資料庫備份

              在資料外面對資料庫內容進行備份
              cmd > mysqldump  -u  使用者名稱  -p 資料庫名 > 檔名.sql     

2.恢復資料庫

               首先要創建出資料庫,然後進入資料庫,在資料庫內部進行          
               source 檔名.sql  //在mysql內部使用

               在外部對資料庫進行恢復也必須先把資料庫創建出來
               mysql -u 使用者名稱 p 資料庫名<檔名.sql   //在cmd下使用         

2.多表設計

    在實際開發中,表與表之間是存在關係的,也就是說,表與表之間存在關聯

    關聯分為幾種:

1.1對1

                          例如     人與身份證
                          假設   人具有   姓名  年齡
                                 身份證   身份證號

                           1對1關係怎樣關聯資料?
                                  在任意一方只要新增一個欄位來描述關聯關係

2.1對多(開發中最常見的一種關係)

                            例如:員工與部門

                            假設:員工有資訊:   員工資訊   員工工資
                                 部門資訊:     部門名稱   部門地址

                             一個員工屬於一個部門,一個部門可以有多個員工

                             1對多關係怎樣關聯資料?
                                      在多的地方新增1的一方的地段資訊

3.多對多

                            例如:老師與學生                    

                            老師屬性   姓名
                            學生屬性   姓名              

                             多對多關係怎樣關聯資料?
                                        會產生一張中間表,用來描述多對多關係.    

                    使用外來鍵約束,可以保證資料完整性 

多表查詢

                    笛卡爾積 
                    多表關聯sql

                              select* from 表1,表2;
                              select * from emp,dept;
                     怎樣消除笛卡爾積

                              將要查詢的兩種表的關聯資料進行等式比較.       

                              select  * from 表1,表2 where 表1,欄位=表2,欄位;

                              select * from emp inner join dept where emp.dept_id=dept.id;