SQL數據庫語法mysql,Java語言,個人整理資料

結構化語言
Sql(structured query language)結構化查詢語言

DML 用來操作數據庫中所包含的數據 (數據操作語言)

Update 數據修改

 

DDL 用於創建和刪除數據庫對象等操作 (數據定義語言)

Insert 數據新增

Delete 數據刪除

 

DQL 用來對數據庫中的數據進行查詢 (數據查詢語言)

Create 創建數據庫或表

Drop 刪除數據庫或表

Alter 修改數據庫或表信息

Select 查詢數據庫

 

DCL 用來控制數據庫組件的存儲許可、存儲權限等 (數據控制語言)

Commit 提交數據庫

Rollback 回滾數據

Grant 授權

 

優勢
運行速度快

體積小成本低

可移植性好

適用用戶廣

作用
存儲數據、便於數據檢索

保證數據完整、一致

共享、安全

對數據進行重新組合

數據庫和應用之間的關係
數據庫:存儲數據,將數據響應給應用程序

應用程序:向數據庫發請求,將數據庫響應的信息進行展示

流行的數據庫
Oracle SQL server mysql

配置
Prot:設置端口號

Default-charactrt-set設置編碼格式

Datadir:設置數據保存路徑

服務 啓動方式
1 我的電腦-管理服務-對應服務右鍵啓動

2 管理員cmd-net start 服務名稱

3 管理員cmd-net stop 服務名稱

登錄 mysql -h地址 -u 用戶名 -p 密碼 (-h可省略,用於異地登錄)

退出 quit

運算符
邏輯運算符
AND 並且

OR 或者

NOT 非

比較運算符
= 等於

< 小於

大於

<> 不等於(常用)

= 大於等於

<= 小於等於

!= 不等於

數據庫操作
Database(刪除創建,判斷是否存在)
Create database數據庫名 (創建數據庫)

Drop database 數據庫名 (刪除數據庫)

Drop database if exists數據庫名 (如果存在刪除數據庫)

Table
Use 數據庫名 (指定數據庫)

Create table 表名 (創建表名)

Create table 表名(頭大1 定義類型(長度),頭大1 定義類型(長度),……)

Show tables (查看錶)

Desc 表名 (查看指定表內容)

 

Insert into 表名 values(值1,值2) 主要順序、數量、類型要與表字段一致

Select * from 表名 查看錶內所有字段內容(查詢數據)

Select 字段名 from 表名

 

Delete from 表名 刪除表內所有內容

Delete from 表名 where字段=值 刪除指定內容

Delete from 表名 where字段1=值 and 字段2=值 刪除指定多個內容

 

Truncate table 表名 (清空數據並將標識恢復到默認開始)

 

Update 表名 set 字段=值,字段=值 where 字段=值 修改內容

 

創建表後添加另一個表的數據:insert into 表1  select * from 表2;

 

重命名: alter table 表名 rename【to】 新表名

添加字段: alter table 表名 add 字段 類型 【屬性】

修改字段: alter table 表名 change 原字段 新字段 類型 【屬性】

刪除字段: alter table 表名 drop 字段名稱

約束
Unique key 唯一約束

Not null 非空約束

Default 默認約束

Primary key 主鍵約束

Foreign key 外鍵約束

Constraint fk自啓表名 foreign key(要設置的字段) references 主表名(被設置字段)

Auto_increment 自動增長

 

在創建表結構後添加約束

添加主鍵

alter table 表名 add Constraint 約束名 primary key 表名(主鍵字段)

添加外鍵

alter table 表名 add Constraint 約束名 foreign key(要設置的外鍵字段) references 主表名(被設置字段)

刪除主外鍵

Alter table 表名 drop constraint 約束名

幫助
Help data types 查看數據類型

Help 類型 查看具體信息

設置編碼格式:set names gbk

Comment:註釋 每個字段添加(註釋)

引擎
指定存儲引擎
常見存儲引擎:inniDB支持事物用於增刪 MyISAM不支持實物適用於查詢

Create table 表名(……)engine=存儲引擎

 

配置

My.ini文件

Default storage engine = innoDB;

查看

Show variable like storage_engines;

數據查詢
Select 列名 from 表名 where 查詢條件 order by 排序的列名 asd或desc

 

查詢使用別名

Select 字段 ’編號’ ,字段名 as ‘名字’from 表名

 

非空查詢

Select 字段 from 表名Where 字段 is not bull

Select * from 表名Where 字段 is not bull

聚合函數
Avg 平均值

Count 字段行數

Max 最大值

Min 最小值

Sum 和

 

Select 聚合函數(字段) from 表名;

字符串
Select Concat(‘字符’,‘字符’) 拼接字符串

Select Lower(‘字符’) 轉換小寫

Select Upper(‘字符’) 轉換大寫

Select Substr(‘字符’,截取開始,截取長度) 截取字符串

Select insert(‘字符’,替換開始,替換長度,‘字符’) 替換指定區間字符

日期
獲取當前時間:

Select NOW(); 當前日期時間

Select curdate(); 當前日期

Select curtime(); 當前時間

拆分當前時間:

select YEAR(NOW()); 當前年份

select MONTH(NOW()); 當前月

select bay(NOW()); 當前當前日

select WEEK(NOW()); 當前周

計算時間:

Select darediff(‘時間’,now()); 兩個時間的間隔

select adddate(NOW(),n); 獲得那天后的日期

Mysql數據庫的鏈接
創建用戶
Create user 用戶名;

管理員登錄

Grant select on . to 用戶名 @對方地址 identified by 密碼

Grant 權限 on 數據庫.表 to 用戶名 @l主機地址 identified by 密碼

主機地址:主機名、ip、%(允許任意地址遠程訪問)

刪除用戶:
訪問 mysql.user 表,通過delete刪除(注意where條件)

修改密碼
Mysqladmin -uroot -p(‘修改後的密碼’)

 

忘記密碼情況下修改密碼:

停止服務 在my.ini配置文件中寫入skip-grant-tables啓動服務dos中使用mysql -uroot -p

在輸入updare mysql user set password=PASSWORD(‘新密碼’)where user=’root’ and host=’ 地址’;

Quit退出

停止服務獎my.ini中的skip-grant-tables注掉

啓動服務正常登陸

 

Update user 用戶名 set password=PASSWORD(‘修改後的密碼’)

Update user set password=PASSWORD(‘修改後的密碼’)

授權
All所有權限

Grant 授權(以逗號隔開)on 數據庫名. 表名 to 用戶名

 

收回

Revoke 權限(以逗號隔開)on 數據庫名. 表名 from 用戶名 

設置密碼
Set password for 用戶名=password(‘密碼’);

操作技巧
發現執行命令有錯誤用ctrl+c強制退出

光標上下鍵訪問用過的命令

 

Flush privileges 命令更新(刷新)

 

數據庫操作
導出數據庫
Mysqldump -u用戶名 -p 密碼 數據庫名>導出的文件名

 

導出一個代表
Mysqldump -u用戶名 -p 密碼 數據庫名 表名>導出的文件名

 

導出一個數據庫結構
Mysqldump -u用戶名 -p 密碼 -d -add-drop-table 表名>文件名.sql

-d沒有數據

-add-drop-table在每個create語句之前增加一個drop table

 

數據傳入
Load data local infile “文件爲位置(TXT文件)” into table 表名

導入sql文件
Mysqldump -u用戶名 -p 密碼 表名>文件名.sql

排序
Order by 字段名稱 [排序方式(可省略)]

Asc升序排練

Desc降序排練

 

如:select * from pen order by cityed ASC;

select * from pen where cityed=2 order by id desc;

 

分組
max()最大值

Min()最小值

Count()個數

Avg()平均數

Sum()求和

Select 函數(字段) from 表名 group by 字段

 

條件

Select 字段1,函數(字段) from 表名 group by 字段1  having 字段1=條件

多表聯查 鏈接查詢
select 字段,字段,字段 from 表名1 表別名1,表名2 表別名2 where 字段=別名.字段;

 

內聯Inner join 表名 on 條件

左外接Left  join 表名 on 條件

右外接Right  join 表名 on 條件

select 別名.字段,字段,字段 from 表名1 表別名1 inner join 表名2 表別名2 on 表別名1 .字段=表別名2.字段 ;

事物
事物具有:原子性,一致性,隔離性,持久性

步驟
開始事物(begin或start transaction)——提交事物(commit)——回滾事物(rollbank);

 

關閉/開啓自動提交:set autocommit=0|1;

視圖
篩選表中的行

防止未經許可的用戶訪問敏感數據

將多個物理數據表抽象爲一個邏輯數據表

 

查看所有視圖名稱
Use 數據庫

Select 表名 from views

 

創建視圖
View

 

Use 數據庫

Create view 視圖名1  as select * from 表名

select * from 視圖名1  

 

索引
Index

 

Create 索引類型(可不寫)index 索引名 on 表名(字段)

 

Drop index 索引名 on 表

 

Show index 索引名

 

提高數據庫的檢索速度

 

標準
平凡搜索的列

規範化
關係
一對一,一對多,多對一,多對多

三大範式
1.確定

 

Java連接數據庫
添加jar包
在項目根目錄創建lib文件夾將jar包考入

在jar包上右鍵選擇Build Path——Add Build Path

注:加載驅動的類在——com.mysql.jdbc.Driver

編寫鏈接類
注:鏈接數據庫使用JavaAPI(Java Application Program interface)

Connection:鏈接

Statement:執行sql語句

ResultSet:結果集

具體步驟
1加載驅動創建鏈接
加載驅動

Class.forName(“com.mysql.jdbc.Driver”);

創建鏈接

DriverManager.getConnection(“jdbc:mysql://數據庫地址:端口號/數據庫名”,“用戶名”,“密碼”)

編寫sql並執行
創建statement對象

Statement st=conn.createStatement();

通過對象調用執行方法

Execute(sqlstr);返回boolean類型

ExecuteQuery(sqlstr);返回ResultSet類型,結果集

executeUpdate(sqlstr);返回int類型,受影響行數

處理返回結果
Boolean、int直接賦值對應類型變量 用於判斷或輸出返回

ResultSet通過while循環便利取值

next():返回boolean類型 判斷結果集中是否有數據存在

取值:gettype(int/string)

Type對應數據庫的類型自定義如:getInt(int/string)

int/string取值時可使用字段的索引位置(索引默認從1開始)或直接寫字段

 

事例:

package demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class demo {

/**

 * java對應的Api

 * connection:負責java鏈接數據庫

 * statement:負責執行sql語句

 * resultset:處理結果

 */

public static Connection conn;

public static Statement stat;

public static ResultSet res;

public static Connection getConnection() throws Exception{

//加載驅動

Class.forName("com.mysql.jdbc.Driver");

//獲取鏈接(指定數據庫:地址,名稱,用戶名,密碼)

return DriverManager.getConnection("jdbc:mysql://localhost:3306/mybank","root","296768022");

}

public static void main(String[] args) {

try {

//創建鏈接(獲取到鏈接對象後一定要賦值)

conn=getConnection();

System.out.println("鏈接成功");

//編寫sql語句

Statement st=conn.createStatement();

boolean isOk=st.execute("select * from school");

//查看結果

res=st.executeQuery("select * from school");

System.out.print(isOk);

while(res.next()){

System.out.println(res.getInt("sch")+"——"+res.getString("schName")+"——"+res.getString("schId"));

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("鏈接失敗");

}

}

}

注意事項
鏈接字符穿的拼寫

創建鏈接對象是注意賦值給成員變量conn=getConnection();

異常處理
驅動字符串拼寫錯誤

鏈接字符串拼寫錯誤

鏈接對象未賦值錯誤

Sql語句拼寫錯誤

遍歷結果集時字段名稱不符或索引位置錯誤

Sql注入
PreparedStatement

 

Sql語句的執行條件通過變量傳值方式注入到sql語句中產生一個新的sql語句

將Statement改換爲PreparedStatement接口

將sql語句的查詢條件賦值方式作調整:變爲佔位符?,通過對象的setXXX()方法賦值

prepareIndex默認從1開始

 

Mybatis映射文件中常用節點
增(insert)刪(delete)改(update)查(select)

輔助:if、trim、set、where

常用:

Sql:組織SQL語句的編寫一般結合使用

Sql內容可以自定義,提前是最終拼接成完整的sql即可

Sql數量不限可多個

Bind:將複雜的Sql進行拆分

Foreach:

Collection:必須項,入參爲List則爲“list”,入參爲數組則爲“array”,入參爲多參時則需要Map封裝處理

Item集合中每個元素迭代時的別名

Index集合中每個元素迭代時的下標

Open表示該語句以什麼開始

Close表示該語句以什麼結束

Separator表示每次迭代之間以什麼符號作爲分割符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章