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); }