各个数据库软件对于sql的支持
2013-04-16 23:01
363 查看
最近正在学习数据库这门课程,虽然SQL有有统一的标准,但是各个数据库软件对于sql支持是不一样的,上机遇到各种各样的问题,就记录在这个帖子上吧;
1,mysql是不支持对视图创建触发器的;
2,oracle只支持了级联删除on delete cascade却不支持级联更新on update cascade;
3,mysql中的条件控制语句比如IF语句后是可以出现查询语句selec的,但是oracle中是不可以的,只能实现begin开始前声明变量,然后再begin语句后把查询出来的的结果赋给变量,在oracle中条件控制语句是用when 的
4,mysql中新插入,修改后的行用new来表示,而删除或者更新前的行用old来表示,而在oracle中则需要在nrow前面加上:号,还要在开头加上一句referencing new as nrow;
但是在when后面的nrow是不用加上:号的;
下面是今天晚上的几个例子(数据库使用的是oracle):
下面是第一个触发器upa_creadits的mysql版本:
mysql不支持视图触发器;
1,mysql是不支持对视图创建触发器的;
2,oracle只支持了级联删除on delete cascade却不支持级联更新on update cascade;
3,mysql中的条件控制语句比如IF语句后是可以出现查询语句selec的,但是oracle中是不可以的,只能实现begin开始前声明变量,然后再begin语句后把查询出来的的结果赋给变量,在oracle中条件控制语句是用when 的
4,mysql中新插入,修改后的行用new来表示,而删除或者更新前的行用old来表示,而在oracle中则需要在nrow前面加上:号,还要在开头加上一句referencing new as nrow;
但是在when后面的nrow是不用加上:号的;
下面是今天晚上的几个例子(数据库使用的是oracle):
Create database student; create table Students (SNO varchar(15), SNAME varchar(20) not null, SEX varchar(7), BDATE date, HEIGHT int, DEPARTMENT varchar(20), primary key (SNO)); create table Courses (CNO varchar(8), CNAME varchar(20) not null, LHOUR int, CREDIT int, SEMESTER varchar(6), primary key (CNO)); create table SC (SNO varchar(15), CNO varchar(8), GRADE smallint, primary key (SNO,CNO), foreign key (SNO) references Students(SNO) on delete cascade, foreign key (CNO) references Courses(CNO) on delete cascade); create or replace trigger upd_creadits after insert on sc referencing new as nrow for each row declare credits_count int; credits_number int; begin select count(*) into credits_count from credits where credits.sno=:nrow.sno; select credit into credits_number from courses where courses.cno=:nrow.cno; if :nrow.grade>=60 then if credits_count<>0 then update credits set SumCredit=SumCredit+credits_number where sno=:nrow.sno; else insert into credits values(:nrow.sno,credits_number,0); end if; else if credits_count<>0 then update credits set nopass=1+nopass where sno=:nrow.sno; else insert into credits values(:nrow.sno,0,1); end if; end if; end; / create or replace trigger Upd_StuView instead of insert on Student_Grade referencing new as nrow for each row declare student_num int; course_num int; xuehao varchar(15); kechenghao varchar(8); begin begin select count(*) into student_num from Students where Students.sname=:nrow.sname; exception when no_data_found then dbms_output.put_line('不存在这个学生或者这门课程!'); end; begin select count(*) into course_num from courses where courses.cname=:nrow.cname; exception when no_data_found then dbms_output.put_line('不存在这个学生或者这门课程!'); end; select sno into xuehao from Students where Students.sname=:nrow.sname; select cno into kechenghao from courses where courses.cname=:nrow.cname; if student_num<>0 and course_num<>0 then insert into sc values(xuehao,kechenghao,:nrow.grade); else dbms_output.put_line('不存在这个学生或者这门课程!'); end if; end; /
下面是第一个触发器upa_creadits的mysql版本:
delimiter | create trigger upd_creadits after insert on sc for each row begin if new.grade>=60 then if exists(select * from credits where credits.sno=new.sno) then update credits set SumCredit=SumCredit+(select credit from courses where courses.cno=new.cno) where sno=new.sno; else insert into credits values(new.sno,(select credit from courses where courses.cno=new.cno),0); end if; else if exists(select * from credits where credits.sno=new.sno) then update credits set nopass=1+nopass where sno=new.sno; else insert into credits values(new.sno,0,1); end if; end if; end|
mysql不支持视图触发器;
相关文章推荐
- 对于不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成
- 在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。
- 数据库智能提示和源代码管理工具(支持SVN)SQLPrompt_7.0.0.40, RedGate_SQL_SourceControl.V3.0.13.4214
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
- “对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题的解决
- [置顶] 修正FLEA_Helper_Pager,让其支持source为sql时的多数据库操作
- 实时数据库InfoPlus与Uniformance PHD的SQL支持
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
- [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role
- c#“对于不返回任何基表信息的 SelectCommand 不支持动态 SQL 生成”错误的解决
- Visual Stadio对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成
- SQL 2008R2还原对于服务器失败 备份集中的数据库与现有数据库 3154错误
- 数据库修改预约数据后,软件无法刷新,需要退出pl/sql,
- jTDS官方介绍(OpenCms v6.2版MS Sqlserver数据库支持所用JDBC驱动)
- 解决“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker”错误
- SQL 数据库 学习 003 什么是数据库? 为什么需要数据库?是不是所有的软件都是用Sql Server?
- 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分
- jTDS官方介绍(OpenCms v6.2版MS Sqlserver数据库支持所用JDBC驱动)
- 支持SQLite, MS Access, SQServer2000/2005等数据库的LinqToSql
- 更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成