MySQL之----在java編程加強知識點

來源:互聯網
上載者:User

標籤:

在資料中,建表處理是很常見且很實用的方法。

表和表之間的關係有 1:1

 1:N

       N:N

三種方式。

1對1的方式

<span style="font-size:18px;">樣本:一夫一妻思考:在一個表中儲存著所有人的資訊。有男有女,要求查詢出所有的夫妻,即一男一女。注意下面:王五是光棍不應該能查詢出來。</span>
<span style="font-size:18px;">CREATE TABLE person(   id INT,   NAME VARCHAR(10),   sex CHAR(1),   wife INT,   husband INT);INSERT INTO person VALUES(1,'小花','0',0,3);INSERT INTO person VALUES(2,'玉芬','0',0,4);INSERT INTO person VALUES(3,'張三','1',1,0);INSERT INTO person VALUES(4,'李四','1',2,0);INSERT INTO person VALUES(5,'王五','1',0,0);//一對一關聯性的操作:查出每對夫妻的姓名CREATE VIEW w AS SELECT * FROM person WHERE sex='0';CREATE VIEW m AS SELECT * FROM person WHERE sex='1';//不利用表與表之間的關係SELECT w.NAME AS 妻子, m.NAME AS 丈夫 FROM w,m WHERE w.husband=m.id AND m.wife=w.id;//現在更先進的方式:利用表間的關係SELECT w.NAME AS 妻子, m.NAME AS 丈夫 FROM w INNER JOIN m ON w.husband=m.id AND m.wife=w.id;</span>


1對多的方式

1對多,多對1。一個人可以擁有多輛汽車,要求查詢出某人所擁有的所有汽車。根據範式的要求,應該設計兩張表,分別表示人的資訊和汽車的資訊。<strong></strong>
//步驟1:畫E-R圖//步驟2:分別建實體表,並給多方的表添加外鍵約束CREATE TABLE person2(   id VARCHAR(32) PRIMARY KEY,   pname VARCHAR(30),   sex CHAR(1));CREATE TABLE car(   id VARCHAR(32) PRIMARY KEY,   cname VARCHAR(30),   price NUMERIC(10,2),   pid VARCHAR(32),   CONSTRAINT car_fk FOREIGN KEY(pid) REFERENCES person2(id));DROP TABLE car;//步驟3:為兩個表添加測試資料//實體表1INSERT INTO person2(id,pname,sex) VALUES('P001','Jack','1');INSERT INTO person2(id,pname,sex) VALUES('P002','Tom','1');INSERT INTO person2(id,pname,sex) VALUES('P003','Rose','0');INSERT INTO person2(id,pname,sex) VALUES('P004','Mary','0');INSERT INTO person2(id,pname,sex) VALUES('P005','Mike','1');SELECT * FROM person2;////實體表2INSERT INTO car(id,cname,price,pid) VALUES('C001','BMW',123.5,'P001');INSERT INTO car(id,cname,price,pid) VALUES('C002','Benz',123.5,'P001');INSERT INTO car(id,cname,price,pid) VALUES('C003','BMW',223.5,'P001');INSERT INTO car(id,cname,price,pid) VALUES('C011','BMW',83.5,'P003');INSERT INTO car(id,cname,price,pid) VALUES('C012','Benz',100,'P003');INSERT INTO car(id,cname,price,pid) VALUES('C013','Audi',223.5,'P003');INSERT INTO car(id,cname,price,pid) VALUES('C021','BMW',88.5,'P004');INSERT INTO car(id,cname,price,pid) VALUES('C022','QQ',10,'P004');INSERT INTO car(id,cname,price,pid) VALUES('C023','Audi',73,'P005');INSERT INTO car(id,cname,price) VALUES('C033','Audi',1000);
/查詢:哪些人有什麼樣的車 (用"表名.列名"的形式訪問列,如果列名不重複,可以省略表名)//利用一方的主鍵和“多方”的外鍵進行關聯SELECT person2.pname,car.cname FROM person2,car WHERE person2.id=car.pid;//查詢Jack有什麼車SELECT person2.pname,car.cname FROM person2,car WHERE person2.id=car.pid AND person2.pname='Jack' ;//查詢哪些人有兩輛以上的車SELECT person2.pname,COUNT(pname) AS 車數量 FROM person2,car WHERE person2.id=car.pid GROUP BY pname HAVING COUNT(pname)>=2 ORDER BY 車數量;SELECT * FROM person2 WHERE id IN ( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2 );//查詢哪些人沒有車SELECT * FROM person2 WHERE id NOT IN( SELECT pid FROM car );
多對多

多對多:一個人可以擁有多種角色,如某人,即是父親、又是兒子、又是丈夫。而同時這三個角色又可以給其他所有的人。要求查詢出即是父親、又是兒子、又是丈夫的所有人。查詢出所有人擁有的所有角色。<strong></strong>
還有學生選課系統都是多對多的情況 
具體的實現方法在最後的比筆記中貼出來


資料庫的約束主鍵 primary key
在建立表時指定主鍵---在聲明主鍵時,應該同時使用not null關鍵字。
Create table stud(id int primary key,…..)
在建立完成之後指定主鍵:
Alter table stud add constraint stud_pk primary key(id);
主鍵自動成長:
Auto_increment 適合於int類型的欄位
外鍵 foreign key-表示一種參考關聯性
與另一個表的關聯關係-稱為外鍵,外鍵的作用時當主表中沒有記錄時,無法向子表中寫入無引用的記錄:
Alter table stud  add constraint stud_fk foreign key(stud_clsid) references cls(id);
主外鍵關係是一種1對多的關係。如果主表中沒有的記錄,子表中將不能增加。
建立主外部索引鍵關聯,兩個表的資料類型和大小必須保持一致否則建立將不會成功。
可以通過可視化介面操作主外關聯。
唯一 unique – 與主鍵有所區別,主鍵不能為null,而unique可以有一列為null這是SqlServer的限制,但Mysql可以寫入多列的null值,所以,在mysql上使用unique時一般再通過not null進行限制。
alter table cls  add constraint cls_uk unique(name); /* 指定name不能重複*/
預設值 default
在建立表時,可以指定預設值如:
Create table stud(sex char(1) default ‘1’,…..);

使用關聯對資料進行查詢當一個表的資料不能滿足我們的需要時,我們就要從多個表中查詢資料。此時必須使用關聯查詢:
inner join – 內關聯,雙方必須都要存在。 
left join -左關聯。以左邊資料為準。
right join - 右關聯。
在上面的表與表之間的關係用到的

總結:
預存程序

三種方式:

1,最簡單,最基本的方式。

“DELIMITER$$”這句是為了讓解析器把“$$”當作結束標誌(否則預設是把“;“號當作結束標記),這樣預存程序中的語句結束符";"就不會當作過程的結束標記。
DELIMITER$$CREATE PROCEDURE p1()BEGIN   SELECT * FROM stud;   INSERT INTO stud(id,sname,age,score,dept) VALUES(1014,'劉三豐',33,55,'通訊學院');END$$DELIMITER;   //把結束標記還原回來CALL p1();  //調用預存程序p1

2,帶參數的方式
//帶參數的預存程序DELIMITER$$CREATE PROCEDURE p2(IN id INT, IN nm VARCHAR(30) )BEGIN   INSERT INTO stud(id,sname) VALUES(id,nm);END$$DELIMITER ; DROP PROCEDURE p2;CALL p2(1015,'吊絲');

3,帶返回值的

//有傳回值的預存程序----參數與變數問題( @變數名  ,一個@為使用者變數,兩個@即 @@為全域的系統變數 )DELIMITER$$CREATE PROCEDURE p3(IN id INT, IN nm VARCHAR(30), OUT num INT )BEGIN   INSERT INTO stud(id,sname) VALUES(id,nm);   SELECT COUNT(*) INTO num FROM stud;END$$DELIMITER ; CALL p3(1016,'無名',@aa);SELECT @aa; //輸出變數aa的值


MySql區別大小寫查詢
<span style="font-size: 18px; white-space: pre;"></span>mysql查詢預設是不區分大小寫 如:<span style="white-space:pre"></span>select  * from  table_name where  a like  'a%'    <span style="white-space:pre"></span>select  * from  table_name where  a like  'A%'    <span style="white-space:pre"></span>select * from table_name where a like 'a%'<span style="white-space:pre"></span>select * from table_name where a like 'A%'<span style="white-space:pre"></span>效果是一樣的。 <span style="white-space:pre"></span>要讓mysql查詢區分大小寫,可以:<span style="white-space:pre"></span>select  * from  table_name where  binary  a like  'a%'  <span style="white-space:pre"></span>select  * from  table_name where  binary  a like  'A%'   <span style="white-space:pre"></span>select * from table_name where binary a like 'a%'<span style="white-space:pre"></span>select * from table_name where binary a like 'A%'<span style="white-space:pre"></span>也可以在建表時,加以標識  <span style="white-space:pre"></span>create table table_name(    <span style="white-space:pre"></span> a varchar(20) binary<span style="white-space:pre"></span>)<span style="font-size: 18px;"></span>

事務transaction: 原子性(atomicity):組成交易處理的語句形成了一個邏輯單元,不能只執行其中的一部分。 
一致性(consistency):在交易處理執行前後,資料庫是一致的(資料庫資料完整性約束)。 
隔離性(isolcation):一個交易處理對另一個交易處理的影響。 
持久性(durability):交易處理的效果能夠被永久儲存下來 。
一個事務只會有一個結果:要麼成功、要麼失敗。
Start transaction;開始一個事務。Commit;提交所做的修改。Rollback;復原所做的修改。如果在操作時出錯,應該從新開始一個事務。



設定事物隔離等級在mySql的命令列設定隔離等級。
在MySql的命令列設定隔離等級,只對此開啟的命令列視窗有效。第一個命令列視窗,就是一個獨立的用戶端。
Select @@tx_isolation; 可以查看目前的隔離等級。
Set transaction isolation level <層級名稱>可以設定隔離等級。
層級名稱為:{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } 
需要注意的是,隔離等級必須要在事務當中使用,沒有事務,隔離等級也沒有意義了。
※交易處理START TRANSACTION  DELETE FROM stud WHERE id=1015;  DELETE FROM stud WHERE id=1014;  SELECT * FROM stud;ROLLBACK /  COMMIT;

MySQL之----在java編程加強知識點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.