我必须在模型中运行这个sql例程:
$this->db->query('LOCK TABLE orders WRITE');
$this->db->query('TRUNCATE TABLE orders');
$this->db->query('INSERT INTO orders SELECT * FROM orders_tmp');
$this->db->query('UNLOCK TABLES');
但是我收到了这个错误:
错误号码:1192
无法执行请求的命令:锁定表或事务运行
的表 TRUNCATE TABLE命令
我在这张桌子上使用MyISAM作为数据库引擎。
你能帮我吗?
答案 0 :(得分:1)
要在无法进行并发插入时对表real_table执行许多INSERT和SELECT操作,可以将行插入临时表temp_table,并定期使用临时表中的行更新实际表。这可以使用以下代码完成:
mysql> LOCK TABLES real_table WRITE, temp_table WRITE;
请问它是否对您不起作用。
答案 1 :(得分:1)
试试这个
$this->db->query('TRUNCATE TABLE orders');
$this->db->query('LOCK TABLE orders WRITE');
$this->db->query('INSERT INTO orders SELECT * FROM orders_tmp');
$this->db->query('UNLOCK TABLES');
答案 2 :(得分:1)
您需要获取查询中所有表的锁定,而不仅仅是您要写入的表格。因此,在您的情况下,您还需要@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.email, htmlAttributes: new {@class = "control-label col-md-12", style="text-align: left; padding-left: 30px;"})
<div class="col-md-12" align="center">
@Html.EditorFor(model => model.email, new {htmlAttributes = new {@class = "form-control", id = "emailTxt"}})
@Html.ValidationMessageFor(model => model.email, "", new {@class = "text-danger"})
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.NewsletterType, htmlAttributes: new { @class = "control-label col-md-12", style = "text-align: left; padding-left: 30px;" })
<br />
<div class="col-md-12" align="center">
@Html.EnumDropDownListFor(model => model.NewsletterType, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.NewsletterType, "", new { @class = "text-danger", id = "ddlType" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-4 col-md-10" style="padding-bottom: 10px;">
<button type="button" class="btn btn-success btn-newsletter"></button>
</div>
</div>
</div>
<script>
$(function(){
var model = {
email: $('.emailTxt').text();
NewsletterType: $('.ddlType :selected').text();
}
$(.btn-newsletter).click(function(){
$.ajax({
url: url,
type: 'POST',
data: model,
beforeSend: function(xhr){xhr.setRequestHeader('__RequestVerificationToken', $('body').find('input[name="__RequestVerificationToken"]'));},
statusCode: {
200: function (data) { success(data); },
500: function (erro) { error(erro); }
}
});
});
});
</script>
上的读锁定。
来自文档:
需要锁定的会话必须在单个LOCK TABLES语句中获取所需的所有锁定。在保持这样获得的锁的同时,会话只能访问锁定的表。
文档:https://dev.mysql.com/doc/refman/5.5/en/lock-tables.html
干杯