前幾天去參加騰訊的面試,在一面中,面試官問了一個問題:會用數據庫嗎?我說基本的會,然后他說:現在寫一個刪除一列的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表;
今天的整理就到此吧。下次繼續。。。