MySQL數據庫基礎(必備技能)

第一章:數據庫的設計

1.第一範式:
第一範式的目標是確保每列的原子性,如果每列(或者每個屬性值)都是不可再分的最小數據單元(也成爲最小的原子單元),則滿足第一範式

2.第二範式:
第二範式其目標是確保表中的每列都和主鍵相關,並且除了主鍵以外的其他列都全部依賴於該主鍵

3.第三範式:
第三範式的目標是確保每列都和主鍵列直接相關,而不是間接相關,並且除了主鍵以外的其他列都只能依賴於主鍵列,列與列之間不能存在相互依賴關係

第二章:初始MySQL

1.端口設置(默認啓用TCP/IP網絡,默認端口爲3306)

2.默認字符集設置(默認值爲utf8)

3.MySQL文件夾
* bin文件夾:該文件夾下存放着可執行文件
* include文件夾:該文件夾下存放着頭文件
* lib文件夾:該文件夾下存放着庫文件
* share文件夾:該文件夾下存放着字符集,語言等信息

4.修改MySQL配置文件來手動配置數據庫服務器MySQL時,常用參數:
* default - character - set:客戶端默認字符集
* character - set - setver:服務器端默認字符集
* port:客戶端和服務器端的端口號
* delault - storage - engine:MySQL默認存儲引擎

5.開服務:(net start mysql)

6.關服務:(net stop mysql)

7.命令行方式連接數據庫
語法:
mysql -h 服務器主機地址 -u 用戶名 -p 密碼 (如果是本機可省略 -h)

8.操作數據庫
1.創建數據庫
語法:
create database 數據庫名;

2.查看數據庫列表
  語法:
       show databases;
 
3.選擇數據庫
  語法:
       use 數據庫名;

4.刪除數據庫
  語法:
       drop database 數據庫名;
  
5.創建表
  語法:
       create table if not exists 表名(
             字段1 數據類型 字段屬性 約束 索引 註釋,
             ...
       )表類型 表字符集 註釋;

6.單字段主鍵
  語法:
       create table if not exists 表名(
              字段1 數據類型 primary key,
              ...
       );

7.查看錶
  語法:
       show tables;

8.查看錶的定義
  語法:
       describe 表名;
        或
       desc 表名;

9.刪除表
  語法:
       drop table if exists 表名;

9.如果需要以0填充不足的位置,需要在類型後添加zerofill關鍵字

10.各數據類型都包含有符號數和無符號數兩類,默認爲有符號數,既可以保持負數,如該字段爲非負數,則需添加unsigned屬性

11.數據類型
常用數值類型

   數據類型                字節數
 tinyint[(m)]               1            
 smallint[(m)]              2
 mediumint[(m)]             3
 int[(m)]                   4
 float[(m,d)]               4
 double[(m,d)]              8
 decimal[m([,d])]          m+2
    bit             bit稱爲位數據類型,其數據有兩種取值:0和1 長度爲1位,用來表示真假,是否	

12.字符串類型
字符串類型

   數據類型              字節                說明 
   char[(m)]             m          固定長字符串,M爲0-255的整數
 varchar[(m)]         可變長度      可變長度,M爲0-65535的整數
  tinytext             0-255        微型文本串
    text              0-65535       文本串
 decimal(m,d)     該類型一般用於金額方面,m表示要顯示的長度,d表示保留的小數位數 

13.日期類型
日期類型

   數據類型               格式
    date              yyyy-mm-dd                   
  datetime            yy-mm-dd hh:mm:ss:
    time              hh:mm:ss:
  timestamp           yyyymmddhhmmss
    year              yyyy              

14.字段的約束及屬性
常用的屬性約束

  字段屬性,約束名          關鍵字
   非空約束               not null
   默認約束               default
   唯一約束               unique key(uk)
   主鍵約束               primary key(pk)
   外鍵約束               foreign key(fk)
   自動增長               auto_increment

15.MySQL的存儲引擎
常用的存儲引擎
InnoDB 和 MyISQM存儲引擎比較

    功能                InnoDB                 MyISAM
  支持事物                支持                  不支持 
  支持全文索引            不支持                 支持
  外鍵約束                支持                  不支持
  表空間大小              較大                   較小
  數據行鎖定              支持                  不支持

  操作系統的默認存儲引擎是 InnoDB

  查看存儲引擎的語法:
     show variables like 'storage_engine%';

16.指定表中的存儲引擎
語法:
create table 表名(

)engine=存儲引擎;

第三章:高級查詢(一)

1.修改表
1.修改表名
語法:
alter table 原表名 rename 新表名

2.添加字段
  語法:
      alter table 表名 add 字段 數據類型 屬性

3.修改字段
  語法:
      alter table 表名 change 原字段名 新字段名 數據類型 屬性

4.刪除字段
  語法:
      alter table 表名 drop 字段名

2.添加主外鍵
1.添加主鍵約束
語法:
alter table 表名 add constraint 主鍵名 primary key 表名(主鍵字段)

2.添加外鍵約束
  語法:
      alter table 表名 add constraint 外鍵名 foreign key(外鍵字段) references 關聯表名 (關聯字段)

3.插入數據記錄
1.插入單行數據
語法:
insert into 表名 (字段列表) values(值列表)

2.插入多行數據
  語法:
      insert into 表名 (字段列表) values(值列表1),(值列表2),...

3.將查詢結果插入到新表中
  語法1:
       insert into 新表 (字段1,字段2...) 
       select 字段1,字段2...
       from 表名

  語法2:
   create table 新表 (select 字段1,字段2,...from 表名)

3.數據更新記錄
語法:
update 表名 set 字段1=值1,字段2=值2,… where 條件

4.刪除數據記錄
語法1:
delete from 表名 where 條件

語法2:
truncate table 表名

5.數據查詢
語法:
select <字段列表>
from <表名或視圖>
where <查詢條件>
group by <分組的字段名>
having <條件>(注意:該位置的條件是 篩選組)
order by <排序的字段名> asc或desc

6.limit子句
語法:
select <字段列表>
from <表名或視圖>
where <查詢條件>
group by <分組的字段名>
order by <排序的字段名> asc或desc
limit 位置偏移量,行數

7.常用函數
1.聚合函數
常用聚合函數

   函數名               作用  
   avg()           返回某字段的平均值
   count()         返回某字段的行數
   max()           返回某字段的最大值
   min()           返回某字段的最小值
   sum()           返回某字段的和

2.字符串函數
                                  常用字符串函數

         函數名                            作用                         舉例        
      concat(str1,str2,...strn)       連接完整字符串          select concat('My','S','QL')
                                                             返回:MySQL 
      insert(str,pos,len,newstr)      替換                    select insert('這是SQL Server數據庫',3,10,'MySQL') 
                                                              返回:	這是MySQL數據庫						                  lower(str)                      變小寫                  select lower('MySQL')  							                                                          返回:mysql			
      upper(str)                      變大寫                  select upper('mysql')  
                                                              返回:MYSQL
      substring(str,num,len)          截取                    select substring('JavaMySQLOracle',5,5)
                                                              返回:MySQL

3.時間日期函數
                          常用日期函數

      函數名                   作用                         舉例
    curdate()             獲取當前日期                    select curdate() 
    curtime()             獲取當前時間                    select curtime()
    now()                 獲取當前日期和時間               select now()
    week(date)            返回日期date爲一年中的第幾周     select week(date)
    year(date)            返回日期date的年份               selct year(date)
    hour(time)            返回時間time的小時值             select hour(now())
    minute(time)          返回時間time的分鐘值             select minute(now())
    datediff(date1,date2) 返回日期參數date1和date2相隔天數  select datediff(now(),'2008-8-8')
    adddate(date,n)       計算日期參數date加上n天后的日期   select adddate(now(),5)  

4.數學函數
             常用數學函數

   函數名                作用
   ceil(x)           返回大於或等於x的最小整數
   floor(x)          返回小於或等於x的最大整數
   and()             返回0-1間的隨機數

8.子查詢
語法:
select …
from 表1
where 字段1比較運算符(子查詢)

9.in和not in子查詢
1.in子查詢
注意:如果條件後面是用等號跟的子查詢,那麼該查詢就不能返回多個值
使用in則相反

2.not in子查詢
  注意:in前面加not就是結果的反向值

事列:
     #嵌套子查詢事列
     SELECT re.`studentNo`
     FROM `result` re
     WHERE re.`subjectNo`NOT IN(
      		 SELECT su.`subjectNo` FROM `subject` su
   		 WHERE su.`subjectName`='HTML'					
		) AND re.`examDate` IN(
				 SELECT MAX(r.`examDate`)  FROM `result` r
				 WHERE r.`subjectNo`NOT IN(
	                         SELECT s.`subjectNo` FROM `subject` s
			         WHERE s.`subjectName`='HTML'
			        )					     
			);

第四章:高級查詢(二)

1.exists 和 not exists子查詢
1.exists 子查詢
語法:
select … from 表名 where exists(子查詢)

2.not exists子查詢
  exists 和 in一樣,同樣允許添加not關鍵字實現取反操作,not exists表示不存在

3.嵌套在select語句的from子句中的子查詢語法:
  select * from (子查詢) as 表的別名
  注意:表的別名一定要寫

4.創建臨時表
  語法:
       create temporary table 表名 (查詢語句)

5.聯合查詢
  語法:
       union

6.把時間區分爲季度的函數
  QUARTER()
  注意:括號裏面存放想要區分的時間

第五章:事務,視圖,索引,備份和恢復

1.事務
事務是指將一系列數據操作捆綁成爲一個整體進行統一管理

1.事務特性
  1.原子性
    事務是一個完整的操作,事務的各元素是不可分的(原子性)

  2.一致性
    在事務開始之前,數據庫中儲存的數據處於一致狀態

  3.隔離性
    對數據進行修改的所有併發事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何方式依賴於或影響其他事務

  4.持久性
    事務的持久性指不管系統是否發生了故障,事務處理的結果都是永久的    

2.如何執行事務
  支持事務的存儲引擎有InnoDB和BDB,InnoDB存儲引擎事務主要通過UNDO日誌和REDO日誌實現
    * UNDB 日誌:複製事務執行前的數據,用於在事務發生異常是回滾數據
    * REDO 日誌:記錄在事務執行中,每條對數據進行更新的操作,當事務提交時,該內容將被刷新到磁盤

3.執行事務的語法:

  1.開始事務
  語法:
       begin 或 start transaction

  2.提交事務
  語法:
       commit 

  3.回滾(撤銷)事務
  語法:
       rollback

  4.設置自動提交關閉或開啓
  語法:
       set autocommit=0|1
        * 值爲0:關閉自動提交
        * 值爲1:開啓自動提交  

2.視圖
視圖是保存在數據庫中的select查詢
視圖是一種虛擬表,通常 是作爲來自一個或多個表的行或列的子集創建的

1.使用sql語句創建視圖
  語法:
       create view 視圖名
       as
       <select語句>   

2.使用sql語句刪除視圖
  語法:
       drop view if exists 視圖名

3.使用sql語句查看視圖數據
  語法:
       select 字段 from 視圖名

3.索引

1.索引的分類:

 1.普通索引
   普通索引是mysql中的基本索引類型,允許在定義索引的列中插入重複值和空值,它的唯一任務是加快對數據的訪問速度

 2.唯一索引
   唯一索引不允許兩行具有相同的索引值

 3.主鍵索引
   在數據庫關係圖中爲表定義一個主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特殊類型

 4.複合索引
   在創建索引時,並不是只能對其中一列創建索引,與創建主鍵一樣,可以將多個列合作爲索引

 5.全文索引
   全文索引的作用是在定義索引的列上支持值的全文查找,允許在這些索引列中插入重複值和空值,主要用於在大量文本文字中搜索字符串

 6.空間索引
   空間索引是對空間數據類型的列建立的索引

2.創建索引
語法:
create unique|fulltext|spatial index 索引名
on 創建索引的表名 (創建索引的表名的列名)
* unique|fulltext|spatial:分別表示唯一索引,全文索引和空間索引

3.刪除索引
語法:
drop index 索引名 on 創建索引的表名

4.查看索引
語法:
show index from 創建索引的表名

4.數據庫的備份和恢復

1.使用mysqldump命令備份數據庫
  語法:
       mysqldump -u 用戶名(一般爲root) -h 主機名(一般不寫) -p 密碼 要備份的數據庫名 要備份的數據庫中的表名 > 路徑(例如:d:\1\java.sql)

2.使用mysql命令恢復數據庫
  語法:
       mysql  -u 用戶名(一般爲root) -h 主機名(一般不寫) -p 密碼 要給恢復的數據庫名 < 路徑(例如:d:\1\java.sql)

  注意:1和2一定記住是在dos命令下寫的

3.mysql命令是在dos環境下的恢復數據庫命令,如果已經登錄列MySQL服務器,也可以使用source命令恢復數據庫
  語法:
       source 數據庫備份文件(所謂的路徑)

4.將所有數據寫入到數據文件中
  語法:
       flush tables

5.表數據導出到文本文件
  語法:
       select 查詢的列
       from 表名
       where 條件
       into outfile 路徑(列如:'d:/1/java.txt')

6.文本文件寫入到數據表
  語法:
       load data infile 路徑(列如:'d:/1/java.txt') into table 要導入的表名(注意:要導入的表名要提前創建好)

7.知識擴展
  * fields 
      terminated by 'string':用來設置字段的分割符爲字符串對象,默認爲“\t”  

  * fields
      optionally | enclosed by'char':用來設置括上字段值的字符符號,如果使用了optionally,則只有char和varchar等字符數據字段被包括,
                                     默認情況下不使用任何符號  

  * fields
      escaped by'char':用來設置轉義字符的字符符號,默認情況下使用“\”字符

  * lines
       starting by'char':用來設置每行開頭的字符符號,默認情況下不使用任何符號

  * lines
       terminated by'string':用來設置每行結束的字符符號,默認情況下使用“\n”字符串  

第七章:JDBC

1.JDBC訪問數據庫的步驟

1.加載JDBC驅動
  Class.forName("JDBC驅動類的名稱")   注意:JDBC驅動類的名稱一般爲:com.mysql.jdbc.Driver

2.與數據庫建立連接
  Connection conn=DriverManager.getConnection(數據連接字符串,數據庫用戶名,密碼)      注意:數據庫連接字符串一般爲:jdbc:mysql://本機名(一般爲:localhost):3306/數據庫名  數據庫用戶名一般爲:root  密碼一般爲:root

3.發送SQL語句,並得到返回結果
  一旦建立連接,就是用該連接創建Statement接口的對象,並將SQL語句傳遞給它所連接的數據庫,如果是查詢操作,將返回類型爲ResultSet的結果集,它包含執行SQL查詢的結果
  Statement stmt = conn.createStatement();
  ResultSet rs=stmt.executeQuery("select `id`,`name` from `master`")

4.處理返回結果
  處理返回結果主要是針對查詢操作的結果集,通過循環取出結果集中每條記錄並做相應處理

2.Statement接口和ResultSet接口

             Connection 接口常用方法

    方法名稱                         作用
  void close()                     釋放資源
Statement createStatement()        創建一個Statement對象來將SQL語句發送到數據庫
  PreparedStatement
preparedStatement(String sql)      創建一個PreparedStatement對象來將參數化的SQL語句發送到數據庫
  boolean isClosed()               查詢此Connection對象是否已經關閉

             Statement 接口常用方法

    方法名稱                           作用              
ResultSet executeQuery(String sql)    可以執行SQL查詢並獲取ResultSet對象
  int executeUpdate(String sql)       執行增,刪,改操作,返回影響行數
  boolean execute(String sql)         可以執行任意SQL語句,若結果爲ResultSet對象,則返回true,反之爲false

                ResultSet 接口常用方法及作用

      方法名稱                           作用          
 boolean next()                      下一行
 boolean previous()                  上一行
 void close()                        釋放資源
 int getInt()                        int類型
 int getFloat()                      float類型
 String getString()                  String類型
 int getRow()                        得到光標當前所指行的行號
 boolean absolute(int row)           光標移動到row指定的行

3.PreparedStatement接口
PreparedStatement接口繼承Statement接口

               PreparedStatement 接口常用方法

      方法名稱                           作用     
  boolean exectute()                 true或false
  ResultSet executeQuery()           查詢
  int executeUpdate()                執行增,刪,改操作,返回影響行數
  void setInt(int index,int x)       給參數
  void setObject(int index,Object x) 使用給定對象設置指定參數的值

第八章:DAO模式

1.Properties類
properties配置文件

              Properties類的常用方法
   
     方法                                         描述
 String getProperty(String key)               用指定的鍵在此屬性列表中搜索屬性,通過參數key得到其所對應的值
 Object setProperty(String key,String value)  調用Hashtable的方法put,通過調用基類的put()方法來設置鍵-值對
 void load(InputStream inStream)              從輸入流中讀取屬性列表(鍵和元素對),通過對指定文件進行裝載獲取該文件中所以鍵-值對
 void clear()                                 清除所裝載的鍵-值對,該方法有基類Hashtable提供
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章