mysql 定义变量

作者&投稿:字群 (若有异议请与网页底部的电邮联系)
mysql怎么定义变量?~

下面是一个简单的 存储过程的例子.

DECLARE v_index INT;
定义一个 名称为 v_index 的变量, 类型为 INT

MYSQL 变量定义应该只能在 存储过程, 函数里面定义.
不像 Oracle / SQL Server , 一个 BEGIN / END 里面就可以定义/执行了。

mysql> DELIMITER //
mysql> CREATE PROCEDURE TestWhile()
-> BEGIN
-> DECLARE v_index INT;
->
-> SET v_index = 0;
->
-> WHILE v_index < 5 DO
-> SET v_index = v_index + 1;
-> SELECT v_index;
-> END WHILE;
->
-> END//
Query OK, 0 rows affected (0.00 sec)

一、局部变量
局部变量一般用在sql语句块中,比如存储过程的begin/end。其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。
局部变量一般用declare来声明,可以使用default来说明默认值。
二、用户变量
用户变量的作用域要比局部变量要广。用户变量可以作用于当前整个连接,但是当当前连接断开后,其所定义的用户变量都会消失。
用户变量使用如下(这里我们无须使用declare关键字进行定义,可以直接这样使用):
select @变量名
对用户变量赋值有两种方式,一种是直接用"="号,另一种是用":="号。其区别在于使用set命令对用户变量进行赋值时,两种方式都可以使用;当使用select语句对用户变量进行赋值时,只能使用":="方式,因为在select语句中,"="号被看作是比较操作符。

在PHP、C++等语言里面可以使用变量,在存储过程里面可以使用变量,SQL语句里面不能使用变量的。

不过你的要求可以用下面的一个SQL语句实现:
insert into YYY表(字段1,字段2,字段3) SELECT 字段1,表达式2,常量3 FROM XXX表

注意:上面是两个表,一般不允许同时对一个表进行操作,如果是一个表,你可以考虑使用临时表:

SELECT 字段1,表达式2,常量3 FROM XXX表 INTO TEMP TMP表;
insert into YYY表(字段1,字段2,字段3) SELECT * FROM TMP表;

下面是一个简单的
存储过程的例子.
declare
v_index
int;
定义一个
名称为
v_index
的变量,
类型为
int
mysql
变量定义应该只能在
存储过程,
函数里面定义.
不像
oracle
/
sql
server

一个
begin
/
end
里面就可以定义/执行了。
mysql>
delimiter
//
mysql>
create
procedure
testwhile()
->
begin
->
declare
v_index
int;
->
->
set
v_index
=
0;
->
->
while
v_index
<
5
do
->
set
v_index
=
v_index
+
1;
->
select
v_index;
->
end
while;
->
->
end//
query
ok,
0
rows
affected
(0.00
sec)

比如你的user表里有name pwd age三个字段
table表里有name pwd age 三个字段
<?
$sql_sel=select * from user;
$query_sel=mysql_query($sql);//执行sql语句并获得一个结果集
$res=mysql_fetch_array($query); //把结果集转化成数组

//然后按照对应的键名
$sql_ins=insert into table value('.$res[name].','.$res[pwd].','.$res[age].');
$query_ins=mysql_query($sql_ins);

?>

insert into directory_tbl 字段1,字段2,字段3(变量值)
select 值1,值2,结果字段 from xxx where ?


梨树县15983406447: mysql 定义变量 -
边斧复方: 在PHP、C++等语言里面可以使用变量,在存储过程里面可以使用变量,SQL语句里面不能使用变量的.不过你的要求可以用下面的一个SQL语句实现:insert into YYY表(字段1,字段2,字段3) SELECT 字段1,表达式2,常量3 FROM XXX表 注意:上面是两个表,一般不允许同时对一个表进行操作,如果是一个表,你可以考虑使用临时表:SELECT 字段1,表达式2,常量3 FROM XXX表 INTO TEMP TMP表; insert into YYY表(字段1,字段2,字段3) SELECT * FROM TMP表;

梨树县15983406447: mysql存储过程中 declare 和 set 定义变量的区别 -
边斧复方: MySQL存储过程中,定义变量有两种方式: 1.使用set或select直接赋值,变量名以 @ 开头. 例如:set @var=1; 可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量.2.以 DECLARE 关键字声明的变量,只能在存储过程中使用...

梨树县15983406447: mysql 变量如何设定? -
边斧复方: 变量总体分为两大类:procedure内部和非procedure内部;procedure内用declare 声明,作用域仅限于声明的procedure.另一类就是通常意义上的变量,分为全局(global)和局部(session),用select 或者 set声明,作用域分别是全局和回话级别.

梨树县15983406447: 浅谈MySQL存储过程中declare和set定义变量的区别 -
边斧复方: 浅谈MySQL存储过程中declare和set定义变量的区别 declare为对变量进行声明,声明必须制定变量的数据类型,只能写在过程的前面 set是对变量赋值,可以放在过程的任何地方 对没有declare声明过的变量赋值,该变量必须以加上@号,否则会报错DECLARE a INT; -- 如果放在下面语句之后,会报错SET a = (SELECT id FROM tb); -- 如果没有前面的声明,会报错SET @b = (SELECT title FROM tb);

梨树县15983406447: mysql存储过程函数怎么定义变量 -
边斧复方: 以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量, 例如: DECLARE var1 INT DEFAULT 0; 主要用在存储过程中,或者是给存储传参数中.

梨树县15983406447: mysql 如何定义一个变量和表结构一样 -
边斧复方: mysql 没有变量表,你用临时表吧.create temporary table if not exists {表定义}

梨树县15983406447: 怎样用MySQL创建function -
边斧复方: 以前使用SQL SERVER的时候经常用function,对一些数据的处理比较方便,现在数据库转移到mysql上以后,同样也希望能保留相同的功能,庆幸的是mysql也支持function,现来分享下在mysql中怎样创建function 工具/原料 MySQL MySQL ...

梨树县15983406447: MySQL查询时,怎样自定义变量代替表名 -
边斧复方: sql server 中查询使用变量定义表名,需要配合exec()来实现. 如图中例子,使用 @char_table 接收 表名变量SQL中:declare @ 定义变量,set 给变量赋值.exec()来执行动态SQL语句

梨树县15983406447: mysql语句如何赋值变量? -
边斧复方: `a1`=a+b `b1`=a+c;UPDATE `1data` SET `a`=a1 , `b`=b1;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网