hanah0310 / Problem-summary

0 stars 0 forks source link

sql 语句的增删改查 #75

Open hanah0310 opened 5 years ago

hanah0310 commented 5 years ago

https://blog.csdn.net/zhang1409399037/article/details/84325998 sql语句的增删改查; https://www.cnblogs.com/jthb/p/3531289.html mysql查看所有存储过程,函数,视图,触发器,表

hanah0310 commented 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

hanah0310 commented 5 years ago

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