Являются ли транзакции MySQL InnoDB сериализуемыми / атомными? [Дубликат]

Как уже отмечалось, вы также можете поместить легенду в сюжет или немного от нее до края. Ниже приведен пример использования Plotly Python API , сделанного с IPython Notebook . Я в команде.

Чтобы начать, вы захотите установить необходимые пакеты:

import plotly
import math
import random
import numpy as np

Затем установите Plotly:

un='IPython.Demo'
k='1fw3zw2o13'
py = plotly.plotly(username=un, key=k)


def sin(x,n):
sine = 0
for i in range(n):
    sign = (-1)**i
    sine = sine + ((x**(2.0*i+1))/math.factorial(2*i+1))*sign
return sine

x = np.arange(-12,12,0.1)

anno = {
'text': '$\\sum_{k=0}^{\\infty} \\frac {(-1)^k x^{1+2k}}{(1 + 2k)!}$',
'x': 0.3, 'y': 0.6,'xref': "paper", 'yref': "paper",'showarrow': False,
'font':{'size':24}
}

l = {
'annotations': [anno], 
'title': 'Taylor series of sine',
'xaxis':{'ticks':'','linecolor':'white','showgrid':False,'zeroline':False},
'yaxis':{'ticks':'','linecolor':'white','showgrid':False,'zeroline':False},
'legend':{'font':{'size':16},'bordercolor':'white','bgcolor':'#fcfcfc'}
}

py.iplot([{'x':x, 'y':sin(x,1), 'line':{'color':'#e377c2'}, 'name':'$x\\\\$'},\
      {'x':x, 'y':sin(x,2), 'line':{'color':'#7f7f7f'},'name':'$ x-\\frac{x^3}{6}$'},\
      {'x':x, 'y':sin(x,3), 'line':{'color':'#bcbd22'},'name':'$ x-\\frac{x^3}{6}+\\frac{x^5}{120}$'},\
      {'x':x, 'y':sin(x,4), 'line':{'color':'#17becf'},'name':'$ x-\\frac{x^5}{120}$'}], layout=l)

Это создаст ваш график, и позволяет вам сохранить легенду в самом сюжете. Значение по умолчанию для легенды, если оно не установлено, заключается в том, чтобы поместить его в график, как показано здесь.

enter image description here [/g3]

Для альтернативного размещения вы можете точно совместить край графика и границы легенды и удалять граничные линии для более близкой посадки.

enter image description here [/g4]

Вы можете перемещать и переписывать легенду и график с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие параметры, чтобы расположить легенду внутри графика, назначив значения х и у символа & lt; = 1. Например:

  • {"x" : 0,"y" : 0} - нижний левый
  • {"x" : 1, "y" : 0} - нижняя правая
  • {"x" : 1, "y" : 1} - верхняя правая
  • {"x" : 0, "y" : 1} - верхняя левая сторона
  • {"x" :.5, "y" : 0} - нижний центр
  • {"x": .5, "y" : 1} - верхний центр

В этом случае мы выбираем верхний правый, legendstyle = {"x" : 1, "y" : 1}, также описанный в документация :

enter image description here [/g5]

18
задан Webeng 3 June 2016 в 00:09
поделиться

3 ответа

Вы не найдете ответа в php-документации, потому что это не имеет никакого отношения к php или pdo.

Иннодский движок Innodb в mysql предлагает 4 так называемых уровня изоляции в соответствии со стандартом sql. Уровни изоляции в сочетании с блокирующими / неблокирующими чтениями будут определять результат приведенного выше примера. Вам нужно понять последствия различных уровней изоляции и выбрать подходящий для ваших нужд.

Подводя итог: если вы используете последовательный уровень изоляции с выключенным автосохранением, тогда результат будет 12000. В все остальные уровни изоляции и серийный номер с автосохранением позволяют получить результат 11000. Если вы начнете использовать блокирующие чтения, тогда результат может быть 12000 при всех уровнях изоляции.

13
ответ дан Shadow 21 August 2018 в 09:20
поделиться

Увы, «без помех» нуждается в некоторой помощи программиста. Для определения степени «транзакции» необходимы BEGIN и COMMIT. И ...

Ваш пример неадекватен. Для первого утверждения требуется SELECT ... FOR UPDATE. Это говорит о том, что обработка транзакций будет иметь место UPDATE для строк (строк), которые извлекает SELECT. Это предупреждение имеет решающее значение для «предотвращения помех». Теперь график времени читает:

  • script1.php BEGINs
  • script2.php BEGINs
  • script1.php выбирает данные (FOR UPDATE)
  • script2.php выбирает данные заблокирован, поэтому он ждет
  • script1.php обновляет данные
  • script1.php commit () происходит
  • script2. php выбирает данные (и получает новое значение)
  • script2.php обновляет данные
  • script2.php commit () происходит

(Примечание: это не «тупик», просто «ожидание».)

4
ответ дан Rick James 21 August 2018 в 09:20
поделиться

Судя по данным условиям (одиночный оператор DML), здесь вам не нужна транзакция, а блокировка таблицы. Это очень распространенная путаница.

Вам нужна транзакция, если вам нужно убедиться, что ВСЕ ваши инструкции DML были выполнены правильно или вообще не выполнялись.

Средства

  • вам не нужна транзакция для любого количества запросов SELECT
  • , вам не нужна транзакция, если выполняется только один оператор DML

Хотя, как было отмечено в отличном ответе от Shadow, вы можете использовать транзакцию здесь с соответствующим уровнем изоляции, это будет довольно запутанным. Здесь вам понадобится блокировка таблицы . Механизм InnoDB позволяет вам блокировать определенные строки вместо того, чтобы блокировать всю таблицу и, следовательно, должен быть предпочтительным.

Если вы хотите, чтобы зарплата составляла 1200, тогда используйте блокировки таблиц.

Или - более простой способ - просто запустите запрос на обновление atomic :

UPDATE employees SET salary = salary + 1000 WHERE name = ?

В этом случае будут записаны все зарплаты.

Если ваша цель другая, лучше выразить ее явно.

Но опять же: вы должны понимать, что транзакции вообще не имеют никакого отношения к выполнению отдельных скриптов. Что касается вашей темы о состоянии гонки , вас интересуют не транзакции, а блокировка таблицы / строки. Это очень распространенная путаница, и вам лучше изучить ее прямо:

  • транзакция заключается в обеспечении успешного выполнения набора запросов DML в одном скрипте.
  • table / row блокируется, чтобы гарантировать, что другие действия скрипта не будут мешать.

Единственная тема, в которой транзакции и блокировка мешают, - это тупик , но опять же - это только в случае, если транзакция использует блокировку.

7
ответ дан Your Common Sense 21 August 2018 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: