MySQL與Java對比

1、mysql與java類型對應表
bigint Long
tinyint Integer
decimal BigDecimal
datetime Date
timestamp Date

2、視圖:由查詢結果形成的一張虛擬表。
當一個查詢結果出現非常頻繁時,並且該查詢結果進行子查詢出現的非常頻繁,此時可以將一個查詢結果保存爲一張虛擬的表,來供其他查詢使用。
優點:

  1. 可以簡化查詢
  2. 可以進行權限的控制。比如說將表的權限封閉,在開發相應的視圖權限時,視圖中只開放部分的數據。
  3. 大數據分表。比如當一張表的行數超過100萬行,就會變慢,此時一種有效的方法就是將一張表拆開爲多張表來保存。例如分爲t1、t2、t3、t4,具體操作打開鏈接。
    視圖和表的關係:
    視圖是表的查詢結果,當表的數據變化時,會影響視圖的結果。
    視圖中數據和表中數據一一對應時,而且還有如果要將數據插入(insert操作)視圖中,該數據必須包含表中沒有默認值的列數據。

3、觸發器:用來監視某種情況併發出某種操作,與函數非常相似,都需要聲明和執行,但觸發器不是由程序來調用的,而是由事件來觸發的、激活從而實現執行。
1、創建簡單觸發器,在向學生表INSERT數據時,學生數增加,DELETE學生時,學生數減少;
CREATE TABLE student_info (
stu_no INT(11) NOT NULL AUTO_INCREMENT,
stu_name VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (stu_no)
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

CREATE TABLE student_count (
student_count INT(11) DEFAULT 0
);

? TRIGGER

CREATE TRIGGER trigger_student_count_insert
AFTER INSERT
ON student_info FOR EACH ROW
UPDATE student_count SET student_count=student_count+1;

CREATE TRIGGER trigger_student_count_delete
AFTER DELETE
ON student_info FOR EACH ROW
UPDATE student_count SET student_count=student_count-1;

INSERT INTO student_info VALUES(NULL,‘張明’),(NULL,‘李明’),(NULL,‘王明’);

DELETE FROM student_info WHERE stu_name IN(‘張明’,‘李明’);

TRUNCATE TABLE student_info;

TRUNCATE TABLE student_count;

DELIMITER CREATETRIGGERtriggerstudentcountinsertAFTERINSERTONstudentinfoFOREACHROWBEGINUPDATEstudentcountSETstudentcount=studentcount+1WHEREstudentclass=0;UPDATEstudentcountSETstudentcount=studentcount+1WHEREstudentclass=NEW.studentclass;END CREATE TRIGGER trigger_student_count_insert AFTER INSERT ON student_info FOR EACH ROW BEGIN UPDATE student_count SET student_count=student_count+1 WHERE student_class=0; UPDATE student_count SET student_count=student_count+1 WHERE student_class= NEW.student_class; END
DELIMITER ;

DELIMITER CREATETRIGGERtriggerstudentcountdeleteAFTERDELETEONstudentinfoFOREACHROWBEGINUPDATEstudentcountSETstudentcount=studentcount1WHEREstudentclass=0;UPDATEstudentcountSETstudentcount=studentcount1WHEREstudentclass=OLD.studentclass;END CREATE TRIGGER trigger_student_count_delete AFTER DELETE ON student_info FOR EACH ROW BEGIN UPDATE student_count SET student_count=student_count-1 WHERE student_class=0; UPDATE student_count SET student_count=student_count-1 WHERE student_class= OLD.student_class; END
DELIMITER ;

INSERT INTO student_info VALUES(NULL,‘AAA’,1),(NULL,‘BBB’,1),(NULL,‘CCC’,2),(NULL,‘DDD’,2),(NULL,‘ABB’,1),(NULL,‘ACC’,1);

DELETE FROM student_info WHERE stu_name LIKE ‘A%’;
2、創建包含多條執行語句的觸發器:
創建觸發器,在INSERT時首先增加學生總人數,然後判斷新增的學生是幾年級的,再增加對應年級的學生總數;
創建觸發器,在DELETE時首先減少學生總人數,然後判斷刪除的學生是幾年級的,再減少對應年級的學生總數;
delimiter:重新定義結束標識符,後面跟空格和重新定義的結束標識符。
使用BEGIN…END結構,可以定義一個執行多句SQL的觸發器。
NEW在觸發器爲INSERT事件類型時有效,表示當前正在插入的數據;同理,OLD在觸發器類型爲DELETE事件類型時
有效,表示當前正在刪除的數據。
如上面的示例中,可以在觸發器中使用NEW.student_class取得正在插入的學生信息中年級值,使用
OLD.student_class取得正在刪除的學生信息中的年級值。
https://blog.csdn.net/Goskalrie/article/details/53020631

存儲過程就像我們編程語言中的函數一樣,封裝了我們的代碼(PLSQL、T-SQL);
優點:能夠將代碼封裝起來保存在數據庫之中,執行效率高;
缺點:每個數據庫的存儲過程語法幾乎都不一樣,不利於維護和迭代;
視圖是一張虛表,建立在已存在的表的基礎上的,已存在的叫基表,一個基表可以有0或多個視圖;
索引是一種快速查詢表中內容的機制,類似於字典中的目錄,存儲在表之外;

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