MySQL之存储过程.触发器学习整理
2013-10-29 15:19
567 查看
前几天去参加腾讯的面试,在一面中,面试官问了一个问题:会用数据库吗?我说基本的会,然后他说:现在写一个删除一列的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表;
今天的整理就到此吧。下次继续。。。
回来后,决定好好把基本的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表;
今天的整理就到此吧。下次继续。。。
相关文章推荐
- windows 启动和停止mysql
- mysql字符截取substring_index
- 提高MySQL数据库查询速度的六条策略
- Mysql中的from_unixtime,unix_timestamp 整型与datetime 字符串之间的转换
- WampServer怎么修改MySQL密码?
- mysql数据总结 命令
- MySql Error Code: 2006 – MySQl
- MySQL性能优化的最佳20+条经验
- 语法:MySQL中INSERT INTO SELECT的使用
- mysql存储过程示例(使用嵌套游标)
- MySQL C 语言应用程序接口开发教程
- MYSQL的C 语言接口
- MYSQL分页储存过程(取得数据集合和查询AllRows)
- MySQL 中文显示乱码
- mysql通过binlog恢复数据
- mysql常用命令
- mysql主主同步
- Lvs+Keepalived+Mysql单点写入主主…
- mysql主从同步
- 不用交互操作mysql