Open hanah0310 opened 5 years ago
查询数据库中的存储过程和函数
方法一:
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' //存储过程
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION' //函数
方法二:
show procedure status; //存储过程
show function status; //函数
查看存储过程或函数的创建代码
show create procedure proc_name; show create function func_name;
查看视图
SELECT * from information_schema.VIEWS //视图
SELECT * from information_schema.TABLES //表
查看触发器
方法一: 语法:SHOW TRIGGERS [FROM db_name] [LIKE expr] 实例:SHOW TRIGGERS\G //触发器
方法二: 对INFORMATION_SCHEMA数据库中的TRIGGERS表查询 mysql>SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G
SQL Server 、Oracle和MySQL三种数据库的增删改查SQL语句与它们之间的区别 2018年11月21日 17:12:34 zhang1409399037 阅读数:772更多 所属专栏: 数据库
SQL Server 的基本SQL语句 drop table student --删除student这个表,彻底删除 create table student( --创建数据表 sid int primary key identity(10,1), --设置sid为主键自增(从10开始逐渐加1) sname varchar(20) null,--名字 sage int null--年龄 );
--插入数据 insert into student values('张三',19); insert into student values('李四',29);
--删除整个表或表数据 delete student where sid=12; --删除sid=12那一行的数据(删除语句中delete后面也可以加上from,效果相同) delete student; --删除整个表的数据留下了一个没有数据的空表,而drop不同,drop是把整个表彻底删了,需要重新创建表
--修改数据 update student set sage=19 where sage=10; --将sage=10修改为sage=19 (set是设值)
--查询数据 select * from student; --查询student表的数据
--查询studet表中id大于10小于14的数据 select * from student where id>10 and id<14
--查询student表中id=11 和id=13 这两条数据 select* from student where id=11 or id=13
----(多表查询的其中一种)left join
--如上已有一个student表,现再创建一个class表来实现简单的多表查询 create table class( cid int primary key identity(10,1),--班级id classname varchar(20) null--班级名称 )
insert into class values('高三3班') insert into class values('高三4班') insert into class values('高三6班')
--left join为多表查询的一种,就是多个表数据连接起来后的查询,以下为查询所有学生的姓名、年龄及班级名称 select s.sname,s,sage,c.classname from student s left join class c on c.id =s.stuno
Oracle的基本SQL语句 drop table products; create table products( pid int not null primary key,-- 只是单纯设置员工的主键(若要实现主键自增,须另外创建序列) fenid int null, -- 分类id pname varchar2(50) null,-- 商品名称 price number null,-- 价格 pcount int null,-- 数量 pimg varchar2(100) null,-- 商品图片 psale int null,-- 已售数量 userid int null,-- 用户id pstatu int null-- 商品状态 ); commit;--快速提交(Oracle每次对表操作都要加上commit,否则无法快速的操作数据,导致插入或修改等失败)
create sequence p_pro start with 10 increment by 1;-- 创建序列(创建名为p_pro的序列,该序列从10开始以1的增速自增)
--p_pro.nextval为序列的使用,逐渐自增 insert into products values (p_pro.nextval,1,'iPhone手机',8000,2000,'img/1.png',150,101,1); insert into products values (p_pro.nextval,2,'菠萝',4,40000,'img/1.png',30000,102,1); commit;
--这两种写法在Oracle和SQL Server里都是一样的效果(from可有可无); 但在MySQL中只支持delete from products;(须要有from) delete products; delete from products;
select from products; select from products for update; -- 查询products表并解锁该表可以对其直接操作增删改
MySQL的基本SQL语句 drop table prod; -- 删除表 create table prod( -- 创建数据表 pid int not null auto_increment, -- 设置自增时字段为not null(不能为空) pname varchar(100) null, pdate date, -- date日期类型 primary key(pid) -- 设置主键pid为自增 ); commit; -- 快速提交
-- 插入数据
-- (这里原本pid建表时设置为自增的,不写这个字段也是会自动添加的,不写就是默认插入),
-- 但是也可以加上这个字段插入pid值,这里的pid=1是自定义插入,这也可以成功
insert into prod (pid,pname,pdate) values (1,'编程',now()); --MySQL插入必须在表名后面加上除主键id自增以外的字段
insert into prod (pname,pdate) values ('java',now()); -- 未自定义pid,所以这里是默认自增pid insert into prod (pid,pname,pdate) values (5,'小小',now()); -- now()自动获取当前日期,精确到天,自定义插入pid=5 insert into prod (pname,pdate) values ('java',now()); -- 由于上一条数据的pid为5,所以这条数据pid为6
insert into prod (pname,pdate) values ('java','2018-12-22'), ('java','2018/06/12'); -- 同时插入两条数据的简单写法,这几种date日期插入格式都可以
delete from prod where pid>8; -- 删除prod表中pid>8的数据
update prod set pid=9 where pid=7; -- 表示将字段pid=7 改成pid=9 update prod set pname='java' where pname='c++'; -- 表示将字段为pname='c++'的数据改成pname='java'
select * from prod; -- 查询prod表数据
多表查询(建有sal表和emp2表,其中有empno=sno的数据)
--左连接--以emp2表为主表,将sal表连接,emp2显示所有数据,emp2有多少行数据,这里就显示多少行数据,sal里面的数据作为补充sal里面拥有的列的数据显示出来
select * from emp2 left join sal on emp2.empno=sal.sno;
--右连接---以sal为主表,如果sal中只有3行数据,那么右连接查询出来的结果也只有3行,emp2中的数据只是作为补充连接在sal中,emp2中没有的列,显示为空
select * from emp2 right join sal on emp2.empno=sal.sno;
--内连接---只显示数据完整的行的数据出来,不完整的数据整行都不显示
select * from emp2 inner join sal on emp2.empno=sal.sno;
--全连接---把两个表的数据都显示出来,一个不差的显示出来,和内连接是相反的
select * from emp2 full join sal on emp2.empno=sal.sno;
-cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。
select * from emp2 cross join sal ;
综上可看出这三种数据库的SQL语句稍有些不同,但极大部分还是无差异的。
区别一:
最大的区别就是创建表格,主键自增的方法:如下:
--SQL Server主键自增(一步到位): create table student( sid int primary key identity(10,1), --设置sid为主键自增(从10开始逐渐加1) );
--Oracle主键自增(两步):
create table products( pid int not null primary key,-- 只是单纯设置员工的主键(若要实现主键自增,须另外创建序列) ); commit;
create sequence p_pro start with 10 increment by 1;-- 创建序列(创建名为p_pro的序列,该序列从10开始以1的增速自增)
insert into products values (p_pro.nextval,1,'iPhone手机',8000,2000,'img/1.png',150,101,1);--须借助序列来插入数据
--MySQL主键自增(两步):
create table prod( pid int not null auto_increment, ... primary key(pid) -- 设置主键pid为自增 ); commit;
区别二: 插入数据:
--SQL Server(三个数据库中最简单的一种) insert into student values('张三',19);
--Oracle(需要借助创建的序列来实现插入数据) insert into products values (p_pro.nextval,2,'菠萝',4,40000,'img/1.png',30000,102,1);
--MySQL(需要在表名后面添加该表除了主键的所有字段) insert into prod (pname,pdate) values ('java','2012-12-23');
区别三:
删除:
--SQL Server和Oracle相同,这两种写法都可以实现删除 delete student; / delete from student;
--MySQL (只支持有from的写法) delete from student;
区别四:
建表语句oracle中类型是varchar2 ,而MySQL和SQL Server 是varchar
https://blog.csdn.net/zhang1409399037/article/details/84325998 sql语句的增删改查; https://www.cnblogs.com/jthb/p/3531289.html mysql查看所有存储过程,函数,视图,触发器,表