MySQL之存儲過程.觸發器學習整理


 

     前幾天去參加騰訊的面試,在一面中,面試官問了一個問題:會用數據庫嗎?我說基本的會,然后他說:現在寫一個刪除一列的sql語句,然后就尷尬了。。。
     回來后,決定好好把基本的sql語句好好學一下,再把相關的內容再復習一下。
     今天主要看的是MySQL,順便說一下,不同的數據庫之間差距還是蠻大的,比如說SQL Server和MySQL,Oracle和MySQL,言歸正傳,先說一下,面試官問的那個問題。(以下命令都在Mysql5.5中測試通過)
     Mysql修改列類型語句如下:
     alter table 表名 change 列名 列名 要修改的列類型;
     Mysql修改列名語句如下:
     alter table 表名 change 列名 要修改的列名 原來的類型;
     Mysql添加一列:
     alter table 表名 add column 要加的列名 要加的列名類型;
     MYsql刪除一列:
     alter table 表名 drop column 要刪除的列名;
     再來說一下,Mysql函數,存儲過程,觸發器的那些事。
     創建一個mysql函數命令如下:
     create function 函數名(參數名 參數類型)returns 返回類型
          begin
               statement;
          end;
     示例如下:
     create function gets(s int)returns int
          begin
               declare a int;     //mysql中聲明變量不需要@!!!跟其他數據庫不太一樣!!切記!!!
               set @a=3;       //每句之后需加一個;不然報錯!!!
               return @a+s;   //要有返回語句!!!
          end;
     下面就可以直接調用了:gets(3);
     再說存儲過程,創建存儲過程命令如下:
     create procedure 存儲過程名(參數名 參數類型)returns 返回類型
          begin
               statement;
          end;
     存儲過程和函數里面內容差不多,不過在調用的時候,存儲過程需要這樣調用:
     call 存儲過程名;就ok了!
     再多說一句,因為函數可以返回一個表對象,所以可以在sql語句中直接調用函數,而存儲過程不行!!!
     下面說一下觸發器;
     在寫觸發器之前先建立兩個表:
     create table Student(studentId int primary key auto_increment,name varchar(30))engine='InnoDB';
     create table BorrowBook(BorrowBookId int primary key auto_increment,studentId int)engine='InnoDB';
     在更新一個學生的學號時,學號更新相應的借書記錄的學生學號;
     創建更新觸發器如下:
     create trigger updateTrigger before update on Student for each row
     begin
          update BorrowBook set studentId=NEW.studentId where studentId = Student.studentId;
     end
     在刪除一個學生記錄時,需要刪除相應的借書記錄
     create trigger deleteTrigger before delete on Student for each row
     begin
          delete from BorrowRecord where studentId=OLD.studentId;
     end
     以后只要你更新學生表或者刪除學生的某個記錄時,就會調用觸發器程序了!!!
     最后,再說一下幾個數據庫的一點區別:
     Mysql中使用auto_increment,而在sql server中使用identity;
     Mysql中需要顯式調用engine='InnoDB'來使數據庫實現事務功能,而在oracle中是自動提交的!
     sql server 中使用觸發器時,會使用deleted和inserted表,而在mysql中是NEW 和OLD表;
     今天的整理就到此吧。下次繼續。。。
     
     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM