1. 程式人生 > >MySQL(表設定、詳細說明查詢操作)、JDBC基礎

MySQL(表設定、詳細說明查詢操作)、JDBC基礎

登陸資料庫 mysql -u(名字)root -p(密碼)******

檢視所有資料庫 show databases

建立資料庫 create database (名稱)ztest

選擇資料庫 use (名稱)ztest

刪除資料庫 drop database (名稱)ztest

建立表 create table (表名)student(欄位名 資料型別,欄位名 資料型別,...)(id int,name varchar(30),age int,sex varchar(3)); 資料型別 數字型別int 字串型別 varchar(長度)

新增資料 insert into (表名)student(欄位名,欄位名,...)(id,name,age,sex) values(1,'zhang',22,'m');

查詢資料 select (欄位名,欄位名,...)id,age (查詢全部欄位用:*) from (表名)student where(條件)id<2;

刪除資料  刪除資料只能按行刪 delete from (表名)student where (條件)id=2;

更新資料 update (表名)student set (欄位名=新資料,欄位名=新資料,...)age=20,sex='w' where (條件)id=2;    增加一列 alter table (表名)book add column (欄位名)publishclub (資料型別)varchar(50)

改變欄位的名稱、資料型別 alter table (表名)book change column (欄位名)price (新欄位名)price_rmb (新資料型別)float;

localhost/127.0.0.1 本機 

實現實體完整性,設定:主鍵約束,唯一約束

主鍵列必須滿足的條件: 1、值不能為空 2、值必須唯一 3、不能有業務含義 4、值不能發生變動 一個表只能有一個主鍵約束 設定主鍵約束(primary key) 建立表時: create table student(int id primary key,...)或create table student(int id ,...,primary key(id)) 建表後: alter table student add primary key(id); 

唯一約束: 值必須唯一,允許有null(空值) 一個表可以有多個約束 設定唯一約束(unique) 建立表時: create table student(id int unique,...); alter table student modify id int unique;

實現域的完整性,設定:資料型別,非空約束,預設約束,檢查約束(mysql不支援)

非空約束 建立表時: create table student(id int not null,...); 建表後: alter table student modify id int not null;

預設約束: 建立表時: create table student(sex int default '男',...); 建表後: alter table student modify sex varchar(3) default '男';

檢查約束: 建立表時: create table student(age int check(age>18 and age<40),...); 建表後: alter table student modify age int varchar(3) check(age>18 and age<40);

實現引用完整性 外來鍵約束 建立表時: create table student(...,class_id int referencse class(id)); 建表後: alter table student add constraint (外來鍵名稱,如果不寫系統會預設生成)ccc foreign key(class_id) references class(id);

資料查詢:首先明確資料庫表是從1開始計數

select語句的完整語法,可以有6個子句,完整的語法如下: select 目標表的列名或列表達式集合  from 基本表或(和)檢視集合 〔where  條件表示式〕 〔group by   列名集合〕 〔having     組條件表示式〕 〔order by  列名〔集合〕〕

投影操作 投影操作是查詢語句裡必須有的子句,關鍵字則為select select 列1,列2,列3,列N from 表名 查詢所有列用"*"代替列名,選擇某個表中的多個列,那麼列名之間用逗號分隔開

按照cat_id(欄位名)升序排序: select * from goods order by cat_id 按照goods_price降序排序: select * from goods order by goods_price desc asc (ascending 的簡寫,上升的意思,預設為升序排序所以可不寫) desc (descending 的簡寫 下降的意思)

列別名 顯示所有學生的姓名和年齡(使用列別名) select  name  as ‘姓名’, age as ‘年齡’ from student as 可以忽略,用空格代替即可

排除重複的資料 關鍵字:distinct 必須放在第一個列名的開頭 select distinct 列名 from 表名 select distinct name , address from  student

返回限定行數的查詢 常用於分頁 關鍵字:limit 開始序列號, 返回的行數 limit開始的序號是從0開始的 select * from  student  limit 2,2//顯示第三個和第四個學生的資訊 開始序列號 = (當前頁數 - 1)* 每頁顯示條數

多列排序: select 列1,列2,..from 表名 order by 列1 [asc,desc], 列2 [asc,desc],… 查詢表goods所有資訊,將其按照cat_id(欄位名)升序排序,相同cat_id下的按照goods_price降序排序 select * from goods  order by cat_id, goods_price desc;  多列排序結果是根據ORDER BY子句後面列名的順序確定優先順序的。 即查詢結果首先以 列1 的順序進行排序,而只有當列1 出現相同的資訊時, 這些相同的資訊再按列2的進行排序,依此類推。

查詢語句SQL的執行順序 第一步:執行from,查詢表的所有資訊 第二步:執行where,根據條件過濾資訊 第三步:執行select,根據需要查詢的欄位名,投影列 第四步:執行order by,排序

查詢條件操作符 =     等於 !=    不等於 <>    不等於 >    大於 <    小於 >=    大於等於 <=    小於等於 !>    不大於 !<    不小於

多條件選擇操作 and 並且 or 或者 select *  from student  where age=19 or age=25

範圍查詢 select 列1,列2,...from 表名 where 列名  between  下限  and  上限 between   and  表示一個範圍搜尋,大於等於下限,並且小於等於上限 select *  from student  where age between 19 and 22  

定義集合關係 in not in elect 列1,列2,...from 表名 where 列名 in(值集合) select *  from student  where age in (19,22)

模糊查詢 關鍵詞 like 例如: select * from sudent where name like '%張%'; //查詢名字中有張的所有學生資訊 萬用字元:  _ :表示任何單個字元  % :表示包含零到多個任意字元

處理空值資料 查詢條件某個欄位名為空:....where 欄位名 is null//不能用 =null  不為空:where 欄位名 is not null 使用其他任何比較運算子來匹配null得到的都是false的結果, 比如null=null也是返回false。

行轉列 case...when...then...else...end employee表: e_id    e_name  e_cultur 1    張三1    大專 2    張三2    博士 3    張三3    大專 4    張三4    本科 5    張三5    大專 6    張三6    研究生 7    張三7    大專 9    呂琪    本科

select sum(case e_cultur when '大專' then 1 else 0 end) '大專' , sum(case e_cultur when '本科' then 1 else 0 end) '本科' , sum(case e_cultur when '博士' then 1 else 0 end) '博士' , sum(case e_cultur when '研究生' then 1 else 0 end) '研究生'  from employee  效果如下: 大專   本科    博士    研究生 4    2    1    1

簡單JDBC知識

執行資料庫語句 執行完更新操作之後,會返回幾行受影響 n = ps.executeUpdate();

一定記得關閉 if(stmt != null) {     stmt.close(); } if(conn != null){     conn.close(); }

事務處理 Connection.setAutoCommit(),總的來說是為了保護資料庫的一致性的,一般用在事務處理中。 舉例: A向B轉賬,就有兩個操作,A的賬戶減少、B的賬戶增加 如果在進行B賬戶增加操作時,系統出現故障,如果不採用事件處理,就會發生A賬戶減少,而B賬戶並沒有增加的問題,也就是產生髒資料,那麼就必須採取事件處理。    Connection con=DriverManager.getConnection();    try {         //設定為手動提交         con.setAutoCommit(false);         update1(con);//執行更新操作,A賬戶減少         update2(con);//執行更新操作,B賬戶增加         //手動提交         con.commit();

    } catch (Exception e) {         try {

        //如果出錯回滾所有資料             con.rollback();

        } catch (Exception e2) {                 }     }     finally {         if(con!=null){             try{             con.close();             }catch(Exception e){

            }         }     //最後設定為自動提交     con.setAutoCommit(true);     }