在我发布的另一个问题中有人告诉我,之间有区别:
@variable
Run Code Online (Sandbox Code Playgroud)
和:
variable
Run Code Online (Sandbox Code Playgroud)
在MySQL中.他还提到了MSSQL如何具有批量作用域以及MySQL具有会话作用域.有人可以为我详细说明这个吗?
在MySQL数据库上下文中,这三个术语有什么区别:
PS内置函数就像那些日期时间函数一样,WEEKDAY()被认为是什么?
我想在MySQL中创建一个函数:
这是SQL代码:
CREATE FUNCTION F_Dist3D (x1 decimal, y1 decimal)
RETURNS decimal
DETERMINISTIC
BEGIN
DECLARE dist decimal;
SET dist = SQRT(x1 - y1);
RETURN dist;
END;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
#1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL
server version for the right syntax to use near '' at line 10
Run Code Online (Sandbox Code Playgroud)
我在phpMyAdmin中运行此create语句.这个功能有什么问题?
我用谷歌搜索了,但没有提出任何我可以解决的问题.
使用存储过程的性能提升是否显着?
我是否仍然希望将预准备语句与存储过程一起使用,或者它通常是一个还是另一个?
我可以通过PHPMyAdmin创建存储过程并从那里管理它们吗?
对于像这样简单的事情,存储过程会是什么样子 -
SELECT * FROM table a
INNER JOIN otherTable b
ON a.join_id=b.join_id
WHERE someVar = :boundParam
Run Code Online (Sandbox Code Playgroud)
以及PHP如何工作(PDO)来调用它并绑定其参数?
在我的数据库中,我有一个Employee具有递归关联的表(员工可以是其他员工的老板):
create table if not exists `employee` (
`SSN` varchar(64) not null,
`name` varchar(64) default null,
`designation` varchar(128) not null,
`MSSN` varchar(64) default null,
primary key (`ssn`),
constraint `fk_manager_employee` foreign key (`mssn`) references employee(ssn)
) engine=innodb default charset=latin1;
Run Code Online (Sandbox Code Playgroud)
mysql> describe Employee;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| SSN | varchar(64) | NO | PRI | NULL | |
| name | varchar(64) | YES | | NULL | …Run Code Online (Sandbox Code Playgroud) 我试图使用phpMyAdmin创建一个MySQL函数并得到此错误.
#1415 - Not allowed to return a result set from a function
Run Code Online (Sandbox Code Playgroud)
功能代码如下
DELIMITER $$
CREATE FUNCTION get_binary_count(a INT, c INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE c1, c2 INT;
SET c1=0;
SET c2=0;
SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0;
IF(c1>0 AND c2>0)
THEN
SET c=c+1;
SET c=c+get_binary_count(c1,0);
SET c=c+get_binary_count(c2,0);
END IF;
RETURN c;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
有什么建议?
提前致谢
我写了一个非常简单的存储过程如下:
DROP PROCEDURE IF EXISTS GetAllTours;
DELIMITER //
CREATE PROCEDURE GetAllTours()
BEGIN
SELECT * FROM tours;
END //
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我用的时候
CALL GetAllTours();
Run Code Online (Sandbox Code Playgroud)
从SQL查询运行此程序,没有输出.
但是如果我从>>Routines>>Execute同一个程序运行,那么输出就会成功.
谁能告诉我如何从SQL查询运行并获得结果?
无论我到哪里,看起来MySQL存储过程都可以进行交易.然而,当我声明我的存储函数时
create function test( a int )
returns int
MODIFIES SQL DATA
BEGIN
START TRANSACTION ;
update t set col='some value' where id=a ;
COMMIT ;
return 0 ;
END //
Run Code Online (Sandbox Code Playgroud)
我明白了
错误代码:1422.存储函数或触发器中不允许显式或隐式提交.
正如标题所说,MySQL 中的存储过程是原子的吗?即会像
for (..)
<check_if_row_has_flag>
for (..)
<update_row>
Run Code Online (Sandbox Code Playgroud)
原子地工作?
有趣的是,除了 2009 年的一个论坛帖子外,我在 Google 上找不到太多关于此的信息。
我是一名学生,我试图让我的函数返回我选择的结果,但我不知道在RETURN.
例如,我尝试使用数学运算创建函数,并且它可以正常工作,例如:
DELIMITER $$
CREATE FUNCTION `getScore`(`a` INT, `b` INT, `c` INT) RETURNS INT
BEGIN
RETURN a + b + c;
END$$
DELIMITER ;
SELECT getScore(0.3, 0.4, 0.5);
Run Code Online (Sandbox Code Playgroud)
但是我的问题是在这个函数中,我不知道该放什么RETURN或者如何仔细检查这个函数:
DELIMITER $$
CREATE FUNCTION `getCharacters`() RETURN
BEGIN
SELECT *
FROM `characters`
WHERE `level` > 50
END$$
DELIMITER ;
SELECT getCharacters();
Run Code Online (Sandbox Code Playgroud)
我有下一个错误:
A "RETURNS" keyword was expected. (near "RETURN" at position 34)
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助,请原谅我的英语。
我的学习mysql和我的问题是检查我在这里做错了什么:
我正在尝试制作一个sql程序来检查用户输入的第一个数字是奇数还是偶数但是我在第9行附近获得语法错误'; //'
这是sql:
MYSQL>
DELIMITER //
CREATE PROCEDURE num()
BEGIN
IF (SELECT LEFT(num,1))=1 OR (SELECT LEFT(num,1))=3 OR (SELECT LEFT(num,1))=5 OR (SELECT LEFT(num,1))=7 THEN
SELECT 'number is odd';
ELSEIF (SELECT LEFT(num,1))=2 OR (SELECT LEFT(num,1))=4 OR (SELECT LEFT(num,1))=6 OR (SELECT LEFT(num,1))=8 THEN
SELECT 'number is even';
END IF;
END;//
Run Code Online (Sandbox Code Playgroud)
以下是用于测试的CALL:
MYSQL> CALL num(3123123123)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试在 phpMyAdmin 中创建以下存储过程。但是,我不断收到此错误:#1313 - RETURN is only allowed in a FUNCTION
CREATE PROCEDURE IS_POINT_IN_POLYGON()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE pX DECIMAL(19,16);
DECLARE pY DECIMAL(19,16);
DECLARE ls LINESTRING;
DECLARE poly1 POINT;
DECLARE poly1X DECIMAL(19,16);
DECLARE poly1Y DECIMAL(19,16);
DECLARE poly2 POINT;
DECLARE poly2X DECIMAL(19,16);
DECLARE poly2Y DECIMAL(19,16);
DECLARE i INT DEFAULT 0;
DECLARE result INT(1) DEFAULT 0;
SET pX = X(p);
SET pY = Y(p);
SET ls = ExteriorRing(poly);
SET poly2 = EndPoint(ls);
SET poly2X = X(poly2);
SET poly2Y …Run Code Online (Sandbox Code Playgroud) mysql ×12
sql ×4
phpmyadmin ×3
atomic ×1
database ×1
function ×1
if-statement ×1
mysql-error ×1
procedure ×1
terminology ×1
triggers ×1
variables ×1