MySQL学习(一):使用Navicat for MySQL创建储存过程,并在储存过程中判断,如果视图存在,则删除然后创建新视图;如果不存在,则直接创建新视图

0.创建储存过程

1.

MySQL学习(一):使用Navicat for MySQL创建储存过程,并在储存过程中判断,如果视图存在,则删除然后创建新视图;如果不存在,则直接创建新视图_第1张图片
注:不要点完成,点就直接创建了,就不好录入参数了

2.

MySQL学习(一):使用Navicat for MySQL创建储存过程,并在储存过程中判断,如果视图存在,则删除然后创建新视图;如果不存在,则直接创建新视图_第2张图片
注:红框:IN–>传入参数;OUT–>传出参数;INOUT–>传入传出参数
黄框:参数名;;蓝框:类型(int、varchar等类型)(我就用这俩)

3.

MySQL学习(一):使用Navicat for MySQL创建储存过程,并在储存过程中判断,如果视图存在,则删除然后创建新视图;如果不存在,则直接创建新视图_第3张图片
按Ctrl+S保存,然后就可以起名字了
创建完成

0.5调用该函数

其中test2gc是我的函数名,Tom是传入参数,CALL是唤醒

CALL test2gc('Tom');

现在不用写这些代码,等之后下面的函数内容编辑好了,再在查询中运行上述代码就可以了,(连到后台也可以,不过我这单纯的学习SQL语句,就没有接后台,用查询直接调用的)
之后的运行都是用的这行代码

1.创建视图view

1.

其中test2是表名,name是我传入的参数,是varchar类型

BEGIN
	#Routine body goes here...
	SELECT * FROM test2 t2 WHERE t2.name = name;
	-- 创建视图
	#if exists (SELECT 1 FROM text.views WHERE name = 'view_test2') then
	#	DROP VIEW view_test2;
	#END if;
	#if exists (SELECT 1 FROM ttt.tables WHERE table_name = 'view_test2') then
	#	DROP VIEW view_test2;
	#END if;
	#drop view if exists view_test2;
	create view view_test2 
	AS
		SELECT * FROM test2;
	select *from test2;
END

注释的代码之后会提到,单纯创建视图复制没有注释的代码就可以
注:这个第一次运行时正常,但是第二次运行时会报错

[SQL]CALL test2gc('Tom');
[Err] 1050 - Table 'view_test2' already exists

这个错误是因为视图已经创建,不能创建名称一样的视图,
这样就需要在一开始的时候判断,如果有该视图了,则删除,继续运行;如果没有,直接继续运行

2.先放好用的,

现在没有注释的部分,就是我的最终代码
现在的11行就是可以实现如果存在view_test2视图则删除,没有就继续运行

BEGIN
	#Routine body goes here...
	SELECT * FROM test2 t2 WHERE t2.name = name;
	-- 创建视图
	#if exists (SELECT 1 FROM text.views WHERE name = 'view_test2') then
	#	DROP VIEW view_test2;
	#END if;
	#if exists (SELECT 1 FROM ttt.tables WHERE table_name = 'view_test2') then
	#	DROP VIEW view_test2;
	#END if;
	drop view if exists view_test2;
	create view view_test2 
	AS
		SELECT * FROM test2;
	select *from test2;
END

之后会放几个我从网上找的但是不能用的代码

3.这是我一开始尝试的不好用的方法

现在放开的5、6、7行就是我刚开始从网上找到,我找了好多,都是这个差不多的,
但是我运行会报错,错误是没有找到表text.views(其中text是我的库名,网上很多其他名字的,知道是这个东西就行)

BEGIN
	#Routine body goes here...
	SELECT * FROM test2 t2 WHERE t2.name = name;
	-- 创建视图
	if exists (SELECT 1 FROM text.views WHERE name = 'view_test2') then
		DROP VIEW view_test2;
	END if;
	#if exists (SELECT 1 FROM ttt.tables WHERE table_name = 'view_test2') then
	#	DROP VIEW view_test2;
	#END if;
	#drop view if exists view_test2;
	create view view_test2 
	AS
		SELECT * FROM test2;
	select *from test2;
END

这个是错误代码

[SQL]CALL test2gc('Tom');
[Err] 1146 - Table 'text.views' doesn't exist

4.重点中的重点:如果Ctrl+S保存失败,并且报错1064,那么一般就是分号打错了,要么少了、要么多了、要么错位置了,这里一定要注意,分号错了是保存不了的

就这点东西我研究一天,佛气了,自学没人带真的是太难受了,不会的要一点点的找

你可能感兴趣的:(SQL语句,MySQL学习)