我试图用phpmyadmin(v4.7.9)在MYSQL中创建一个存储过程(v5.7.21),有时会返回一个空的结果集。
CREATE DEFINER=`my_database`@`%` PROCEDURE `emptytest`(IN `_id` INT(11))
NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
select * from my_table where id=_id
下一个电话是:
call emptytest(1);
当该id存在于表中时,此方法工作得很好:
id name
--------
1 bob
但在没有行可
汇总:DELETE from mysql.proc能否安全地从MySQL 5.7继续使用?
在问题中,有人提到在MySQL中不可能在存储过程中使用DROP PROCEDURE (mysql代码1357,“不能从另一个存储例程中删除或更改%s”)。
根据经验:
DELETE from mysql.proc WHERE db = <db-name> AND name LIKE '<procedure-prefix>%';
反而看起来很好。
在一项评论中,有人问了这个问题(但没有回答):
mysql.proc仍然是与5.7中的MySQL元信息交互的可行方法吗
在MySQL中,我有一个触发器:
BEGIN
IF (EXISTS(SELECT * FROM devices WHERE device_id = NEW.device_id)) THEN
SET NEW.id = NULL;
ELSE
INSERT INTO objects (object_type) VALUES ('3');
SET NEW.id = LAST_INSERT_ID();
END IF;
END
当该触发器(从objects表)获得新的id时,它会将该id插入到设备表的id列中。
当我提到它(例如PHP中的mysql_insert_
我在mysql中有以下存储过程
DELIMITER $$
CREATE DEFINER=`user`@`%` PROCEDURE `sp_getJobs`()
BEGIN
SELECT * FROM jobs_table;
END$$
DELIMITER ;
以及在hsqldb中定义的以下内容(用于单元测试)
CREATE PROCEDURE sp_getJobs() READS SQL DATA
DYNAMIC RESULT SETS 1
BEGIN ATOMIC
DECLARE result CURSOR WITH RETURN FOR SELECT * FR
我有一个结构如下的MySQL表: -------------
| id | name |
------------- 其中ID是int,auto_increment是varchar(255)。 因此,我需要将名称设置为使用数据库默认值(如果在insert请求后为空),如下所示: INSERT INTO users; id = 1
name = "User1" ..。它也应该与null一起工作: INSERT INTO users (name) VALUES (null); id=8232
name = "User8232" 而且,如果我们为name发送空值也
我有一个在MySQL 5.6上运行良好的存储过程。在最近的服务器迁移期间,我们升级到MySQL 5.7.19。
我的存储过程现在抛出错误:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'utility-monitor.daily_readings.building_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible
我想知道如何删除一个仅当它存在的约束。在mysql服务器中有没有任何允许我这样做的单行语句?
我尝试了以下命令,但无法获得所需的输出
alter table airlines
drop foreign key if exits FK_airlines;
这方面的任何帮助都能真正帮助我在mysql中前进
我使用'IDataReader‘和简单的查询从DB读取数据
SELECT * FROM mytable ORDER BY Id
问题是打电话给
reader.IsDBNull(i)
即使对于可空字段也返回“false”..。
并打电话给
reader.GetValue(i)
如果这些字段中的值为NULL,则返回0。
请建议如何正确地获得空值。
附注:
我认为配置连接字符串以访问数据是有问题的,因此如下所示:
<add key="ConnectionString.MySql.Data.DataProvider.MySqlDataProvider.MySql"
当我运行mysql_real_escape_string($value)时,我得到了这个错误。
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to MySQL server on 'localhost' (10061) in ...
我将功能封装在一个很好的类中,如下所示
class escaper
{
function __get($value)
{
//in order for this to work proper
我想我在下面的mysql脚本中编写WHILE语句时做错了一些事情。我已经测试了下面代码的每个单独组件,并且所有东西都是独立工作的(没有抛出的错误与预期的测试输出相匹配),除了WHILE (抛出一个错误,只输入一个空值,并且只进行一次循环迭代)。我正在遵循文档中的说明,但我似乎遗漏了一些东西。我想要做的是在这个表中插入几个记录(百万)。我做错了什么?为什么这个WHILE语句不循环,为什么它只插入空值?
源
USE wordpress;
SET @i := 0;
WHILE @i < 10 DO
SET @rand_value = CAST(FLOOR(RAND()*10000)
我试图编写一个MySQL函数,它从两个值( a,b) ..However返回非空值,我得到一个错误
DELIMITER $$
CREATE FUNCTION GetNonNull(a,b) BEGIN
IF a = NULL THEN RETURN b; ELSE return a; ENDIF; END $$
DELIMITER ;
我知道这个错误:
错误1064 (42000):您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得在‘b’附近使用的正确语法,如果a= NULL然后返回b;否则在第1行返回a;ENDIF;END‘
任何帮助都将不胜感激!
这个简单的代码调用两个MySQL过程,但是在返回值的第一个过程之后,它将在第二个查询中返回一个错误。
注意:单独运行第一个或第二个的将为每一个正确返回。所以查询可以工作,只是不能一起使用。
完全错误是:Invalid query: Commands out of sync; you can't run this command now
请给我任何想法。
<?php
require_once ('connection.php');
//First Query and Output
$result = mysql_query("CALL C01_Clien
我使用的是Winform C#和MySQL。
我的朋友正在使用SQL。
他说MySQL没有存储过程。但我拒绝这样做,因为我已经在MySQL中使用这个SP了。他说这是一个函数,而不是SP。SP是预编译的。
我很困惑。
这是我的SP。
BEGIN
insert into bonafide_records (date,admin_no,name,CreationId) values (date_a,admin_no_a,name_a,CreationId_a);
END
请帮我清理一下,MySQL有SP吗?