在我发布的另一个问题中有人告诉我,之间有区别:
@variable
Run Code Online (Sandbox Code Playgroud)
和:
variable
Run Code Online (Sandbox Code Playgroud)
在MySQL中.他还提到了MSSQL如何具有批量作用域以及MySQL具有会话作用域.有人可以为我详细说明这个吗?
错误SQL查询:
--
-- Database: `work`
--
-- --------------------------------------------------------
--
-- Table structure for table `administrators`
--
CREATE TABLE IF NOT EXISTS `administrators` (
`user_id` varchar( 30 ) NOT NULL ,
`password` varchar( 30 ) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
Run Code Online (Sandbox Code Playgroud)
MySQL说:
#1046 - No database selected
Run Code Online (Sandbox Code Playgroud)
这里需要一些帮助.
我在看MySQL存储过程和函数.真正的区别是什么?
它们似乎相似,但功能有更多限制.
我可能错了,但似乎存储过程可以做所有事情,而存储功能可以做得更多.为什么/何时使用程序与函数?
我经常看到人们正在使用Delimiters.我试着找出什么是分隔符,它们的目的是什么.经过20分钟的谷歌搜索,我无法找到满足我的答案.那么,我现在的问题是:什么是分隔符,什么时候应该使用它们?
在mysql中导入数据库时,我遇到以下错误:
1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
我不知道我需要改变哪些事情.任何人都可以帮我解决这个问题吗?
如果我在mysql中有两个字符串:
@a="Welcome to Stack Overflow" @b=" Hello to stack overflow";
有没有办法使用MYSQL获得这两个字符串之间的相似性百分比?这里例如3个单词是相似的,因此相似性应该是这样的:
count(@a和@b之间相似的单词)/(count(@a)+ count(@b) - count(intersection))
因此结果是3 /(4 + 4 - 3)= 0.6
任何想法都非常感谢!
我想创建一个简单的MySQL函数,我有这个MySQL程序:
CREATE PROCEDURE getUser(gU INT)
SELECT * FROM Company
WHERE id_number = gU;
CALL getUser(2);
Run Code Online (Sandbox Code Playgroud)
我需要一些帮助,使其成为MySQL函数.在程序中使用函数的优缺点是什么?
我对一个看似简单的概念感到困惑.Mysql将确定性函数定义为函数
始终为相同的输入参数生成相同的结果
所以在我的理解中,功能就像
CREATE FUNCTION foo (val INT) READS SQL DATA
BEGIN
DECLARE retval INT;
SET retval = (SELECT COUNT(*) FROM table_1 WHERE field_1 = val);
RETURN retval;
END;
Run Code Online (Sandbox Code Playgroud)
不确定(不保证在2次调用函数之间不会发生删除/更新/插入).同时,我看到许多函数几乎完全相同,即基于查询结果的返回值,并声明为DETERMINISTIC.看起来我错过了一些非常基本的东西.
任何人都可以澄清这个问题吗?
谢谢.
更新
感谢那些回答(+1); 到目前为止,似乎存在广泛滥用DETERMINISTIC关键字的问题.我很难相信有这么多人这样做,所以我会等待其他答案.
我试图使用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)
有什么建议?
提前致谢
无论我到哪里,看起来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 上找不到太多关于此的信息。
mysql ×11
sql ×3
atomic ×1
delimiter ×1
function ×1
similarity ×1
sql-function ×1
variables ×1