我试图导入.sql文件,并在创建表时失败.
这是失败的查询:
CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`value` varchar(15) NOT NULL,
UNIQUE KEY `id` (`id`,`name`),
CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
我从同一个数据库导出.sql,我删除了所有的表,现在我试图导入它,为什么它失败了?
MySQL:无法创建表'./dbname/data.frm'(错误号:150)
我在看MySQL存储过程和函数.真正的区别是什么?
它们似乎相似,但功能有更多限制.
我可能错了,但似乎存储过程可以做所有事情,而存储功能可以做得更多.为什么/何时使用程序与函数?
所以我有两张这样的桌子......
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个触发器,它将:
ext_words_count.count时ext_words.word更新.使事情进一步复杂化,
ext_words.word在更新ext_words_count时不存在ext_words,我想将其插入ext_words_count并设置count为1.我一直在寻找类似的问题:
1. 使用自动增量字段插入触发器之前/之后,以及
2. 使用触发器更新另一个数据库中的表来
尝试组合2.这是我到目前为止所拥有的:
DELIMITER $$ …Run Code Online (Sandbox Code Playgroud) 我想设置一个触发器,以便在更新时预测字段为= 3,然后触发器将值更改为4并将其保存在数据库中.触发器如下.
出于某种原因,我不断收到错误说:
#1442 - Can't update table 'tzanalytic\_forecast\_cached' in stored
function/trigger because it is already used by statement which invoked
this stored function/trigger.
Run Code Online (Sandbox Code Playgroud)
这是正确的方式吗?
delimiter $$
CREATE TRIGGER no_BoW BEFORE UPDATE ON t FOR EACH ROW
BEGIN set @prediction = new.prediction;
UPDATE t SET t.prediction = (SELECT IF(@prediction = '3', '4', @prediction)) WHERE t.event_id = new.event_id AND t.price_tier = new.price_tier; END;
$$ delimiter ;
Run Code Online (Sandbox Code Playgroud)