рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдореИрдВ PostgreSQL рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдПрдХ рд╕реЗрдЯ (рдпрд╛ рд╕реЗрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛? - рдПрдХ рд╢рдмреНрдж рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рднрд╡реНрдп рд╣реИ) рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред
рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╢рд╛рд╕рди рдкрд░
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд╛рдареНрдпрдХреНрд░рдо (рд░реВрд╕реА рдореЗрдВ) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧреА рдЬреЛ рдХрд┐ рдкрд╛рд╡реЗрд▓
рдкреНрд▓реБрдЬрд╝рдиреЛрд╡ рдФрд░ рдореИрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рд░ рдХреЛрдИ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ (рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ), рдФрд░ рд╕реНрд▓рд╛рдЗрдб рдкрдврд╝рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдордп рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдХрдорд╛рддреНрд░ рдХреЛрд░реНрд╕ 2-рдбреЗ рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рдЯреВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реАрдХреНрдпреВ 11 рд╣реИ ред
рдмреЗрд╢рдХ, рд▓реЗрдЦ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕рдм рдХреБрдЫ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ, рдкреНрд░рд╢рд╛рд╕рди рдХреЛ рдЫреЛрдбрд╝ рдХрд░, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЬреНрдЮрд╛рди рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рд╣реА рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд▓рд┐рдП рд╣реИред
рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА PostgreSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реИред рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ PostgreSQL рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ psql рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ред
рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╕рд╛рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд░реНрддрдорд╛рди, 11 рд╡реЗрдВ рд╡реЗрдирд┐рд▓рд╛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдкрд╣рд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЕрд▓рдЧрд╛рд╡ рдФрд░ рдмрд╣реБрд╡реНрд░реАрд╣рд┐ рд╕рдВрдЧрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдорд╛рдирдХ рдФрд░ PostgreSQL (рдпрд╣ рд▓реЗрдЦ) рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛ рдЧрдпрд╛ рдЕрд▓рдЧрд╛рд╡ред
- рдХрд╛рдВрдЯреЗ, рдлрд╛рдЗрд▓реЗрдВ, рдкреЗрдЬ - рднреМрддрд┐рдХ рд╕реНрддрд░ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
- рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг , рд╡рд░реНрдЪреБрдЕрд▓ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдФрд░ рд╕рдмрдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯред
- рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдФрд░ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рджреГрд╢реНрдпрддрд╛; рдШрдЯрдирд╛ рдХреНрд╖рд┐рддрд┐рдЬред
- рдЗрди-рдкреЗрдЬ рд╡реИрдХреНрдпреВрдо рдФрд░ HOT рдЕрдкрдбреЗрдЯ ред
- рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдпреВрдо ред
- рдСрдЯреЛрд╡реИрдХреНрдпреВрдо ред
- рд▓реЗрди-рджреЗрди рдЖрдИрдбреА рд░реИрдкрд░рд╛рдЙрдВрдб рдФрд░ рдардВрдб ред
рд╣рдо рдЪрд▓реЗ!
рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВ рдПрд▓реЗрдирд╛ рдЗрдВрджреНрд░реБрдкрд╕реНрдХрд╛рдпрд╛ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЕрд▓рдЧрд╛рд╡ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?
рд╕рдВрднрд╡рддрдГ, рд╣рд░ рдХреЛрдИ рдХрдо рд╕реЗ рдХрдо рд▓реЗрди-рджреЗрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИ, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо ACID рдореЗрдВ рдЖрдпрд╛ рд╣реИ, рдФрд░ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдЗрд╕ рд░рд╛рдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИред
рдпрджрд┐ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЧрд▓рдд рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЧрд▓рдд рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЦреБрд╢ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди "рд╕рд╣реА" рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐
рдЕрдЦрдВрдбрддрд╛ рдХреА рдХрдореА , рдЬреИрд╕реЗ рдХрд┐ NULL рдпрд╛ UNIQUE, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреАред рдпрджрд┐ рдбреЗрдЯрд╛ рд╣рдореЗрд╢рд╛ рдЕрдЦрдВрдбрддрд╛ рдХреА рдХрдореА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ DBMS рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ), рддреЛ рд╡реЗ рдЕрднрд┐рдиреНрди рд╣реИрдВред
рдХреНрдпрд╛
рд╕рд╣реА рдФрд░ рд╕рдорд╛рди рдЪреАрдЬреЗрдВ
рдЕрднрд┐рдиреНрди рд╣реИрдВ? рдмрд┐рд▓рдХреБрд▓ рдирд╣реАрдВред рд╕рднреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдЕрдбрд╝рдЪрдиреЗрдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ рдПрдХ рд╕рд╛рде рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреА рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдмрд╛рдзрд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдерд╛, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╛рдзрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП,
рд╢реБрджреНрдзрддрд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХрд╛ рд╕рд╣реА рдорддрд▓рдм рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╢реБрджреНрдзрддрд╛ рдХрд╛ "рд╕реНрд╡рд░реНрдг рдорд╛рдирдХ" рдПрдХ рдРрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрд╛
рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рддреЛ DBMS рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди "рд░реЗрдб-рд╣реИрдВрдбреЗрдб" рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж
рд╕рдВрдЧрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╣реА рдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡реЗрджрди рд╕рд╣реА рд╣реИ рддреЛ DBMS рдХреА рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕рд╣реА рдХреНрд░рдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдПрдХ рд╣реИрдХрдиреАрдб рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рдзрди рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╣реИред рд╕реНрдерд┐рд░рддрд╛ рдирд┐рдпрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
рдПрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрднреА рднреА рдЦрд╛рддреЛрдВ рдкрд░ рдХреБрд▓ рд░рд╛рд╢рд┐ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдпрд╣ рдирд┐рдпрдо SQL рдореЗрдВ рдПрдХ рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рдореМрдЬреВрдж рд╣реИ рдФрд░ DBMS рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рд╣реИ)ред рдПрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдореЗрдВ рджреЛ рдСрдкрд░реЗрд╢рди рд╣реЛрддреЗ рд╣реИрдВ: рдкрд╣рд▓рд╛ рдПрдХ рдЦрд╛рддреЗ рдкрд░ рдзрди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ - рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рдкрд░ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдСрдкрд░реЗрд╢рди рдбреЗрдЯрд╛ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╛рдпрд╛рдо рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрдкрд░реЛрдХреНрдд рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред
рдпрджрд┐ рдкрд╣рд▓рд╛ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд┐рдирд╛ рдмрд╣реБрдд рдХреБрдЫ: рджреВрд╕рд░реЗ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдмрд┐рдЬрд▓реА рдХреА рд╡рд┐рдлрд▓рддрд╛, рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢, рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рднрд╛рдЬрди - рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдВрдЧрддрд┐ рдЯреВрдЯ рдЬрд╛рдПрдЧреА, рдФрд░ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛ рд╕рдХрддреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрд╡реЗрджрди рдХреЗ рд╕реНрддрд░ рдкрд░ рдРрд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдмрд░рджрд╕реНрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдХреАрдордд рдкрд░; рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ: рдпрд╣ DBMS рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреАрдмреАрдПрдордПрд╕ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рджреЛ рдСрдкрд░реЗрд╢рди рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдкреВрд░реЗ рд╣реИрдВред рдпрд╛рдиреА
рдПрдХ рд▓реЗрди-рджреЗрди ред
рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдЬреИрд╕рд╛ рдХрд┐ рдбреАрдмреАрдПрдордПрд╕ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдЪрд╛рд▓рди рдПрдХ рд▓реЗрдирджреЗрди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдирджреЗрди рдкрд░рдорд╛рдгреБ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рд░рддрд╛ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рджреВрд╕рд░рд╛, рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрдИ рдПрдХ рд╕рд╛рде рд▓реЗрдирджреЗрди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдХреНрд░рдо рдорд┐рд▓рд╛-рдЬреБрд▓рд╛ рд╣реИ: рдЖрдк рдпрд╣ рдирд╣реАрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд▓реЗрдирджреЗрди рдХреЗ рд╕рднреА рд╕рдВрдЪрд╛рд▓рди рдкрд╣рд▓реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рдПрдХ рдХреЗ рд╕рднреА рд╕рдВрдЪрд╛рд▓рдиред
рд╕рд╛рде рдореЗрдВ рдПрдХ рдиреЛрдЯред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓реЗрди-рджреЗрди рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░, рдбрд┐рд╕реНрдХ рд╕рд░рдгреА, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рддрд░реНрдХ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╕рдордп-рд╕рд╛рдЭрд╛рдХрд░рдг рдореЛрдб рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдХреБрдЫ рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХреЗ рджреМрд░рд╛рди рдПрдХ рд▓реЗрди-рджреЗрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓реЗ рдХреБрдЫ рдЪрдХреНрд░реЛрдВ рдХреЗ рджреМрд░рд╛рди рдЕрдиреНрдп рдПрдХ рд╣реЛрддрд╛ рд╣реИред рдХрднреА-рдХрднреА
рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рд╕рд╣реА рд▓реЗрди-рджреЗрди рдПрдХ рд╕рд╛рде рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рдХреА
рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдо рд╕реЗ рдХрдо, рдЕрдиреНрдп рдЕрдкреНрд░рдпреБрдХреНрдд рд▓реЗрдирджреЗрди рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдЖрдк рди рдХреЗрд╡рд▓ рдЕрд╕рдВрдЧрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ (рдпрджрд┐ рд▓реЗрдирджреЗрди рд░рджреНрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ)ред рдЗрд╕ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рдПрдХ
рдЧрдВрджрд╛ рд░реАрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓, рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рд╕рдордЭреЗрдВрдЧреЗред
рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдмрдЪрдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ: рдЕрдиреНрдпрдерд╛, рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рдЖрдк рдпрд╛ рддреЛ рдЧрд▓рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдФрд░ рдлрд┐рд░ рд╕реЗ рдбреАрдмреАрдПрдордПрд╕ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдЖрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд▓реЗрдирджреЗрди
рдХреЛ рдХреНрд░рдорд┐рдХ
рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ
рдЕрд▓рдЧ -
рдерд▓рдЧ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, DBMS рдорд┐рд╢реНрд░рд┐рдд рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдкрд╣реБрдВрдЪреЗ:
рд▓реЗрди-рджреЗрди рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХ рд╕рд╣реА рд░рд╛рдЬреНрдп рд╕реЗ рджреВрд╕рд░реЗ рд╕рд╣реА рд░рд╛рдЬреНрдп (рд╕рдВрдЧрддрддрд╛) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рд▓реЗрди-рджреЗрди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ (рдкрд░рдорд╛рдгреБрддрд╛) рдФрд░ рдЕрдиреНрдп рд▓реЗрдирджреЗрди (рдЕрд▓рдЧрд╛рд╡) рдХреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ред
рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп ACID рдХреЗ рдкрд╣рд▓реЗ рддреАрди рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░рддреА рд╣реИред рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЗрддрдиреЗ рдШрдирд┐рд╖реНрда рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрддреНрд░ рдбреА (рд╕реНрдерд╛рдпрд┐рддреНрд╡) рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рджрд░рдЕрд╕рд▓, рдЬрдм рдХреЛрдИ рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рднреА рдЗрд╕рдореЗрдВ рдЕрдирдХреНрдорд┐рдЯреЗрдб рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрджрд▓рд╛рд╡ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реНрдг рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХрдард┐рди рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдереНрд░реВрдкреБрдЯ рдореЗрдВ рдХрдореА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рдмрд╛рд░ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ (рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛) рдХрдордЬреЛрд░ рдХрд┐рдП рдЧрдП рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╢реБрджреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕ рд╕реНрддрд░ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рд╕рд╣реА рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВред
рдПрд╕рдХреНрдпреВрдПрд▓ рдорд╛рдирдХ рдореЗрдВ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕реНрддрд░ рдФрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ
SQL рдорд╛рдирдХ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдЪрд╛рд░ рд╕реНрддрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдЗрди рд╕реНрддрд░реЛрдВ рдХреЛ рдЙрди рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдЬрдм рд▓реЗрдирджреЗрди рдХреЛ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрди рд╕реНрддрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрд┐рд╕ рдкрд░ рдЕрднреНрдпрд╛рд╕ рдХрд╛рдлреА рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рд╕рдордп рд╕реЗ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕рдЯреНрдЯрд╛ рд╣реИрдВред рд╡реЗ рдЧреНрд░рд╛рд╣рдХ рдЦрд╛рддреЛрдВ рдкрд░ рд╕рдорд╛рди рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдпрд╣ рдХрд╛рдлреА рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмреИрдВрдХ рд╕рдВрдЪрд╛рд▓рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рдирд┐ рдЕрджреНрдпрддрди
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдЦреЛрдП рд╣реБрдП рдЕрдкрдбреЗрдЯ рд╕реЗ ред рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рджреЛ рд▓реЗрди-рджреЗрди рддрд╛рд▓рд┐рдХрд╛ рдХреА рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд▓реЗрди-рджреЗрди рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рднреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ рдЙрд╕реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рд▓реЗрдирджреЗрди тВ╜100 (ред рд░реВрд╕реА рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдореБрджреНрд░рд╛ рдЪрд┐рд╣реНрди) рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рдЦрд╛рддреЗ рдкрд░ рд░рд╛рд╢рд┐ рдмрдврд╝рд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп (transaction1000) рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЙрд╕реА рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рд░рд╛рд╢рд┐ рдмрдврд╝рд╛рддрд╛ рд╣реИ (рдпрд╣ transaction1100 рджреЗрддрд╛ рд╣реИ) рдФрд░ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд╕рдорд╛рди and1100 рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЧреНрд░рд╛рд╣рдХ рдХреЛ .100 рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реБрдЖред
рдорд╛рдирдХ рдХрд┐рд╕реА рднреА рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдкрд░ рдЦреЛрдП рд╣реБрдП рдЕрдкрдбреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдЧрдВрджреЗ рдкрдврд╝реЗ рдФрд░ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдкрдврд╝реЗ
рдПрдХ
рдЧрдВрджрд╛ рдкрд╛рда рд╡рд╣ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рд▓реЗрди-рджреЗрди рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдирджреЗрди рджреНрд╡рд╛рд░рд╛ рдЕрднреА рддрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рд╕рднреА рдзрди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдЦрд╛рддрд╛ рд╢реЗрд╖ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, and0 рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдирдХрдж рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдЧрд░реНрднрдкрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 0 рдХрд╛ рдорд╛рди рдХрднреА рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рдорд╛рдирдХ рдЧрдВрджреЗ рдкрдврд╝реЗ рд╕реНрддрд░ рдкрд░ рдЧрдВрджреЗ рд░реАрдбреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдиреЙрди-рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рдФрд░ рд░реАрдб рдХрдорд┐рдЯреЗрдб
рдПрдХ
рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрдврд╝рд╛ рд╣реБрдЖ рд╡рд┐рд╕рдВрдЧрддрд┐ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд▓реЗрди-рджреЗрди рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рджреЛ рдмрд╛рд░ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд░реАрдб рдХреЗ рдмреАрдЪ рдореЗрдВ, рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд (рдпрд╛ рд╣рдЯрд╛рддрд╛ рд╣реИ) рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рддрдм рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдЧреНрд░рд╛рд╣рдХ рдЦрд╛рддреЛрдВ рдкрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рддреНрд░рд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧрддрд┐ рдирд┐рдпрдо рджреЗрдВред рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди .100 рджреНрд╡рд╛рд░рд╛ рдЦрд╛рддреЗ рдкрд░ рд░рд╛рд╢рд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, and1000 рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдХрдореА рд╕рдВрднрд╡ рд╣реИред рдЙрд╕реА рд╕рдордп рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЦрд╛рддреЗ рдореЗрдВ рд░рд╛рд╢рд┐ рдХреЛ рд╢реВрдиреНрдп рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдореЗрдВ рдЕрдм рд░рд╛рд╢рд┐ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ but0 рдорд┐рд▓реЗрдЧрд╛ (рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓реНрдп рдХрдо рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдЦрд╛рддрд╛ "рд▓рд╛рд▓ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ")ред
рдорд╛рдирдХ рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реАрдб рдХреЛ рдЕрдирдХрдореНрдлрд╝рд░реНрдб рдФрд░ рд░реАрдб рдХрдорд┐рдЯреЗрдб рд╕реНрддрд░реЛрдВ рдкрд░ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░реАрдб рдХрдорд┐рдЯреЗрдб рдЧрдВрджреЗ рд░реАрдбреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдкреНрд░реЗрдд рдкрдврд╝реЗрдВ рдФрд░ рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝реЗрдВ
рдПрдХ
рд░реАрдб рд░реАрдб рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЯреНрд░рд╛рдВрдЬрд╝реЗрдХреНрд╢рди рдПрдХ рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджреЛ рдмрд╛рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд░реАрдбреНрд╕ рдХреЗ рдмреАрдЪ рдореЗрдВ, рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ)ред рдлрд┐рд░ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдорд┐рд▓реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдЧрддрддрд╛ рдирд┐рдпрдо
рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ 3 рд╕реЗ рдЕрдзрд┐рдХ рдЦрд╛рддреЗ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ ред рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЦрд╛рддреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ (рдХрд╣рддреЗ рд╣реИрдВ, 2) рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдЙрджреНрдШрд╛рдЯрди рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реА рд╕рдордп, рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рднреА рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИред рдЕрдм рдпрджрд┐ рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ 3 рдорд┐рд▓реЗрдЧрд╛ (рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдФрд░ рдЦрд╛рддрд╛ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдЙрдирдореЗрдВ рд╕реЗ 4 рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ)ред
рдорд╛рдирдХ рдкреНрд░реЗрдд рдХреЛ рдкрдврд╝реЗ рд╣реБрдП рдЕрдирдХрдорд┐рдЬрд╝реНрдб, рд░реАрдб рдХрдорд┐рдЯреЗрдб рдФрд░ рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рд▓реЗрд╡рд▓ рдкрд░ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝рдиреЗ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдФрд░ рдХреНрд░рдорд┐рдХ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐
рдорд╛рдирдХ рдПрдХ рдФрд░ рд╕реНрддрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ - рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп - рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЕрджреНрдпрддрд┐рдд рдФрд░ рдЧрдВрджреЗ, рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ, рдпрд╛ рдкреНрд░реЗрдд рдкрдврд╝рдиреЗ рдХреА рдордирд╛рд╣реА рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред
рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреНрдЮрд╛рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рдЕрднреА рддрдХ рдЕрдЬреНрдЮрд╛рдд рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рд╣реИред
Serializable рд╕реНрддрд░
рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд▓реЗрди-рджреЗрди рдЕрд▓рдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕рд╣реА рдЕрдиреБрдХреНрд░рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рддрдм рднреА рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдЬрдм рдпреЗ рд▓реЗрдирджреЗрди рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдВрдЧреЗред
рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛
рдЕрдм рд╣рдо рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЕрдВрддрд┐рдо рдХреЙрд▓рдо, рдЬреЛ рдорд╛рдирдХ рд╕реЗ рдЧрд╛рдпрдм рд╣реИ, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЦрд┐рд░ рдпреЗ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдХреНрдпреЛрдВ?
рдорд╛рдирдХ рд╕реВрдЪреА рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реА рдХреНрдпреЛрдВ рдХрд░рддреА рд╣реИ, рдФрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреЗ рдХреНрдпреЛрдВ рд╣реИрдВ?
рдХреЛрдИ рднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЕрднреНрдпрд╛рд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЖрдЧреЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп (рдПрд╕рдХреНрдпреВрдПрд▓: 92 рдорд╛рдирдХ) рдЕрдиреНрдп рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рддрд╛рд▓реЛрдВ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
рджреЛ-рдЪрд░рдг рд▓реЙрдХрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (2PL) рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдПрдХ рд▓реЗрдирджреЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рддрд╛рд▓реЗ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рдХрд╛рдлреА рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓реЗрди-рджреЗрди рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдпрд╣ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднреА рдЕрдзрд┐рдХ рдкреАрдбрд╝рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд▓реЗрдирджреЗрди рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирдХ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рд▓реЗрди-рджреЗрди рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрдврд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рд░реАрдб рдЕрдирдХрдореНрдбрд░реНрдб рд▓реЗрд╡рд▓ рдорд┐рд▓рддрд╛ рд╣реИ: рдЦреЛрдП рд╣реБрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирдХрдореНрдлрд░реНрдб рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рд▓реЗрди-рджреЗрди рдкрдарди рдФрд░ рдЕрджреНрдпрддрди рджреЛрдиреЛрдВ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд░реАрдб рдХрдорд┐рдЯреЗрдб рд▓реЗрд╡рд▓ рдорд┐рд▓рддрд╛ рд╣реИ: рдЖрдк рдЕрдирдХреНрдорд┐рдЯреЗрдб рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдлрд┐рд░ рд╕реЗ рдкрдВрдХреНрддрд┐ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдорд╛рди (рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рд░реАрдб) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдХреЛрдИ рд▓реЗрди-рджреЗрди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрдиреЗ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рд╕реНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ: рдкрдВрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рд╕рдорд╛рди рдорд╛рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди Serializable рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд▓реЙрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдкреНрд░реЗрдд рд░реАрдб рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ: рдПрдХ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛) рдЬреЛ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреНрд╡реЗрд░реА рдХреА рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдкрдВрдХреНрддрд┐ рдлрд┐рд░ рд╕реЗ рдЪрдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред
рдЗрд╕рд▓рд┐рдП, рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реНрддрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рддрд╛рд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ - рдЖрдкрдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ (рд╡рд┐рдзреЗрдп) рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рддрд╛рд▓реЗ рдХреЛ
рд╡рд┐рдзреЗрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рд╡реЗ 1976 рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдзреЗрдпрдХреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд╛рд▓реЗ рдЕрднреА рддрдХ рдХрд┐рд╕реА рднреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред
PostgreSQL рдореЗрдВ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░
рд╕рдордп рдХреЗ рд╕рд╛рде, рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓реЙрдХ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрд▓рдЧрд╛рд╡ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (SI) рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддрд┐рдмрджреНрдз рдереЗред
рдпрд╣ рдЕрд▓рдЧрд╛рд╡ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрдВрджреЗ рд░реАрдб рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк PostgreSQL рдореЗрдВ рдЕрдирдХрдореНрдлрд░реНрдЯреЗрдб рд╕реНрддрд░ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдХрдорд┐рдЯреЗрдбред рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рд╣рдо рдЕрдирдХрдореНрдкреНрд▓реЗрдЯреЗрдб рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
PostgreSQL рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдПрдХ
рдмрд╣реБрднрд┐рдиреНрдирд░реВрдкреА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдорд▓реНрдЯреАрд╡реЗрд░рд╕ рдХрдВрд╕реАрдбрд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ DBMS рдореЗрдВ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдХрдо рд╕реЗ рдХрдо рддрд╛рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдмрд╛рдж рдХреЗ рдмрджрд▓рд╛рд╡ рд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╕рднреА рдСрдкрд░реЗрд╢рди рдПрдХ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд▓рд┐рдЦрдиреЗ рдХрд╛ рд▓реЗрди-рджреЗрди рдХрднреА рднреА рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрди-рджреЗрди рдХреЛ рд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХрднреА рднреА рд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, PostgreSQL рдореЗрдВ рдЕрд▓рдЧрд╛рд╡ рдорд╛рдирдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рд▓реЗрд╡рд▓ рди рдХреЗрд╡рд▓ рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рд░реАрдбреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░реЗрдд рд░реАрдб рднреА рдкрдврд╝рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реНрдг рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдФрд░ рдпрд╣ рджрдХреНрд╖рддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдорд▓реНрдЯреАрд╡реЛрд░реНрд╕ рдХрдВрд╕реЗрдкреНрдЯ рдХреЛ "рд╣реБрдб рдХреЗ рддрд╣рдд" рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдВрдЦ рдХреЗ рд╕рд╛рде рддреАрди рд╕реНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, "рдЕрдиреНрдп рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдкреАрдЫреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ") ")ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЦрд╛рддреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдПрд▓рд┐рд╕ рдФрд░ рдмреЙрдм рдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ each1000 рд╣реИ, рд▓реЗрдХрд┐рди рдмреЙрдм рдХреЗ рджреЛ рдЦреБрд▓реЗ рдЦрд╛рддреЗ рд╣реИрдВ:
=> CREATE TABLE accounts( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, number text UNIQUE, client text, amount numeric ); => INSERT INTO accounts VALUES (1, '1001', 'alice', 1000.00), (2, '2001', 'bob', 100.00), (3, '2002', 'bob', 900.00);
рдкреНрд░рддрд┐рдмрджреНрдз рдкрдврд╝реЛ
рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЧрдВрджрд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдкрдврд╝реЗ рд╣реБрдП рдЖрдЗрд╕реЛрд▓реЗрд╢рди рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:
=> BEGIN; => SHOW transaction_isolation;
transaction_isolation ----------------------- read committed (1 row)
рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
=> SHOW default_transaction_isolation;
default_transaction_isolation ------------------------------- read committed (1 row)
рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЦреБрд▓реЗ рд▓реЗрдирджреЗрди рдореЗрдВ, рд╣рдо рдЦрд╛рддреЗ рд╕реЗ рдзрди рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрди-рджреЗрди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрддрд╛ рд╣реИ:
=> UPDATE accounts SET amount = amount - 200 WHERE id = 1; => SELECT * FROM accounts WHERE client = 'alice';
id | number | client | amount ----+--------+--------+-------- 1 | 1001 | alice | 800.00 (1 row)
рджреВрд╕рд░реЗ рд╕рддреНрд░ рдореЗрдВ, рд╣рдо рдПрдХ рд╣реА рдкрдврд╝реЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдирджреЗрди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдмрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрдВрдбреЗрдВрдЯ рдФрд░ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрдкрд░реЛрдХреНрдд рдЖрджреЗрд╢реЛрдВ (рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реИ) рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ psql рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рдЖрдк рдПрдХ рд▓реЗрди-рджреЗрди рдХреЗ рдЖрджреЗрд╢ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ - рджреВрд╕рд░реЗ рдХреЗред
| => BEGIN; | => SELECT * FROM accounts WHERE client = 'alice';
| id | number | client | amount | ----+--------+--------+--------- | 1 | 1001 | alice | 1000.00 | (1 row)
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдЧрдВрджреЗ рд░реАрдбреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рди рдкрдврд╝рдиреЗ рд╡рд╛рд▓рд╛
рдЕрдм рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ рдФрд░ рджреВрд╕рд░рд╛ рдЙрд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
=> COMMIT;
| => SELECT * FROM accounts WHERE client = 'alice';
| id | number | client | amount | ----+--------+--------+-------- | 1 | 1001 | alice | 800.00 | (1 row)
| => COMMIT;
рдХреНрд╡реЗрд░реА рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдпрд╛ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ - рдФрд░ рдпрд╣
рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрдврд╝рд╛ рд╣реБрдЖ рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╕реНрддрд░ рдкрд░ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд╖реНрдХрд░реНрд╖ : рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ, рдЖрдк рдкрд┐рдЫрд▓реЗ рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЧрдП рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмреАрдЪ рдЪреАрдЬреЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдБ рдХреЛрдб рдХреЛрдб рдореЗрдВ рдЗрддрдиреА рдмрд╛рд░ рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:
IF (SELECT amount FROM accounts WHERE id = 1) >= 1000 THEN UPDATE accounts SET amount = amount - 1000 WHERE id = 1; END IF;
рдЪреЗрдХрд┐рдВрдЧ рдФрд░ рдЕрдкрдбреЗрдЯ рдХреЗ рдмреАрдЪ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ "рдЪреЗрдХ" рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдПрдХ рд▓реЗрдирджреЗрди рдХреЗ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдХреАрд▓," рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
IF (SELECT amount FROM accounts WHERE id = 1) >= 1000 THEN
рдпрджрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдзреЛрдЦрд╛ рди рджреЗрдВ рдХрд┐ рдРрд╕рд╛ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ? рд╡рд┐рдХрд▓реНрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:
- рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдпрд╣ рдХреЛрдИ рдордЬрд╛рдХ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╛рдБрдЪ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:
ALTER TABLE accounts ADD CHECK amount >= 0;
рдЕрдм рдХрд┐рд╕реА рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдмрд╕ рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдВ рдЬреЛ рдХрд┐ рдЕрдЦрдВрдбрддрд╛ рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛ред
- рдПрдХрд▓ SQL рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдПрдХ рдФрд░ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рджреГрд╢реНрдпрдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рддреЛ рдХреЛрдИ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдирд╣реАрдВ рд╣реИрдВред
PostgreSQL рдореЗрдВ рдПрдХ SQL рдХрдерди рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрдХрдиреАрдХреЗрдВ рд╣реИрдВред рдЖрдЗрдП рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди (CTE) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдХреА рдХреЗ рдмреАрдЪ рдореЗрдВ, рдЖрдк INSERT / UPDATE / DELETE рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕, рд╕рд╛рде рд╣реА INSERT ON CONFLICT рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ "рдЗрдиреНрд╕рд░реНрдЯ" рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдкрдВрдХреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдЕрджреНрдпрддрди "рдПрдХ рдмрдпрд╛рди рдореЗрдВред
- рдХрд╕реНрдЯрдо рддрд╛рд▓реЗред
рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ (SELECT FOR UPDATE) рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реА рдореЗрдЬ (LOCK TABLE) рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЙрдХ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрд╡реНрд░реАрд╣рд┐ рд╕рдорд╕рд╛рдордпрд┐рдХрддрд╛ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рд╢реВрдиреНрдп рдХрд░рддрд╛ рд╣реИ: рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╡рд░реНрддреА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрдЬрд╛рдп рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрд╕рдВрдЧрдд рдкрдврд╝рд╛
рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рд▓рдЧрддрд╛ рд╣реИред PostgreSQL рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп, рдХрдо рдЬреНрдЮрд╛рдд, рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдиреЗ рдПрдХ рдмреЙрдм рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд┐рдпрд╛:
=> BEGIN; => UPDATE accounts SET amount = amount - 100 WHERE id = 2;
рдЙрд╕реА рд╕рдордп, рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдмреЙрдм рдХреЗ рд╕рдВрддреБрд▓рди рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИ, рдФрд░ рдЧрдгрдирд╛ рд╕рднреА рдмреЙрдм рдХреЗ рдЦрд╛рддреЛрдВ рдкрд░ рд▓реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓реЗрдирджреЗрди рдкрд╣рд▓реЗ рдЦрд╛рддреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдФрд░, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ):
| => BEGIN; | => SELECT amount FROM accounts WHERE id = 2;
| amount | -------- | 100.00 | (1 row)
рдЗрд╕ рд╕рдордп, рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ:
=> UPDATE accounts SET amount = amount + 100 WHERE id = 3; => COMMIT;
рдФрд░ рджреВрд╕рд░рд╛ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкрдврд╝рддрд╛ рд╣реИ (рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдпрд╛ рдореВрд▓реНрдп рджреЗрдЦрддрд╛ рд╣реИ):
| => SELECT amount FROM accounts WHERE id = 3;
| amount | --------- | 1000.00 | (1 row)
| => COMMIT;
рдЗрд╕рд▓рд┐рдП, рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдХреБрд▓ 001100 рдорд┐рд▓рд╛, рдпрд╛рдиреА рдЧрд▓рдд рдбреЗрдЯрд╛ред рдФрд░ рдпрд╣ рдПрдХ
рдЕрд╕рдВрдЧрдд рдкрдврд╝рд╛ рд╣реБрдЖ рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИред
рдкрдврд╝реЗ рд╣реБрдП рд╕реНрддрд░ рдкрд░ рд░рд╣рддреЗ рд╣реБрдП рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рдЬрд╛рдП? рдмреЗрд╢рдХ, рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
SELECT sum(amount) FROM accounts WHERE client = 'bob';
рдпрд╣рд╛рдБ рддрдХ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдбреЗрдЯрд╛ рджреГрд╢реНрдпрддрд╛ рдХреЗрд╡рд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдмрджрд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ? рдФрд░ рдЕрдЧрд░ рдХреНрд╡реЗрд░реА рд▓рдВрдмреА рд╣реЛрддреА рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдФрд░ рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ?
рдЖрдЗрдП рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк pg_sleep рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдЬрдмрд░рди рд╡рд┐рд▓рдВрдм рдбрд╛рд▓реЗрдВред рдЗрд╕рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдХрдВрдб рдореЗрдВ рджреЗрд░реА рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
=> SELECT amount, pg_sleep(2) FROM accounts WHERE client = 'bob';
рдЬрдмрдХрд┐ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдзрди рдХреЛ рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рд╡рд╛рдкрд╕ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
| => BEGIN; | => UPDATE accounts SET amount = amount + 100 WHERE id = 2; | => UPDATE accounts SET amount = amount - 100 WHERE id = 3; | => COMMIT;
рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рд░рд╛рдЬреНрдп рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрд╕ рд╕рдордп рдерд╛ рдЬрдм рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ред рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╕рд╣реА рд╣реИред
amount | pg_sleep ---------+---------- 0.00 | 1000.00 | (2 rows)
рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рднреА рдирд╣реАрдВ рд╣реИред PostgreSQL рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ
рдЕрд╕реНрдерд┐рд░рддрд╛ рд╢реНрд░реЗрдгреА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ VOLATILE рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреНрд╡реЗрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреЛ рдореБрдЦреНрдп рдХреНрд╡реЗрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВред
=> CREATE FUNCTION get_amount(id integer) RETURNS numeric AS $$ SELECT amount FROM accounts a WHERE a.id = get_amount.id; $$ VOLATILE LANGUAGE sql;
=> SELECT get_amount(id), pg_sleep(2) FROM accounts WHERE client = 'bob';
| => BEGIN; | => UPDATE accounts SET amount = amount + 100 WHERE id = 2; | => UPDATE accounts SET amount = amount - 100 WHERE id = 3; | => COMMIT;
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдЧрд▓рдд рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ - case100 рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ:
get_amount | pg_sleep ------------+---------- 100.00 | 800.00 | (2 rows)
рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡ рдХреЗрд╡рд▓ рдкрдврд╝реЗ рдЧрдП рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдкрд░ рдФрд░ рдХреЗрд╡рд▓ рд╡реАрдУрдПрд▓рдЯреАрдИрдПрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реА рд╕рдВрднрд╡ рд╣реИред рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдФрд░ рдЗрд╕ рдЕрд╕реНрдерд┐рд░рддрд╛ рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд▓ рдореЗрдВ рдордд рдкрдбрд╝реЛ!
рдЦреЛрдП рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рдЕрд╕рдВрдЧрдд рдкрдврд╝рд╛ рдЧрдпрд╛
рд╣рдо рдПрдХ рдЕрджреНрдпрддрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рднреАрддрд░ рдПрдХ рдЕрд╕рдВрдЧрдд рдкрдврд╝рд╛ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддрд░реАрдХреЗ рд╕реЗред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджреЛ рд▓реЗрдирджреЗрди рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдмреЙрдм рдХреЗ рджреЛ рдЦрд╛рддреЛрдВ рдкрд░ Bob1000 рд╣реИ:
=> SELECT * FROM accounts WHERE client = 'bob';
id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 200.00 3 | 2002 | bob | 800.00 (2 rows)
рд╣рдо рдПрдХ рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмреЙрдм рдХреЗ рд╕рдВрддреБрд▓рди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ:
=> BEGIN; => UPDATE accounts SET amount = amount - 100 WHERE id = 3;
рдЙрд╕реА рд╕рдордп, рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдореЗрдВ рдмреНрдпрд╛рдЬ рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдЦрд╛рддреЛрдВ рдкрд░ рдХреБрд▓ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ ru1,000 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ:
| => UPDATE accounts SET amount = amount * 1.01 | WHERE client IN ( | SELECT client | FROM accounts | GROUP BY client | HAVING sum(amount) >= 1000 | );
рдЕрджреНрдпрддрди рдСрдкрд░реЗрдЯрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ SELECT рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реА рд▓реЗрди-рджреЗрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдмреНрдпрд╛рдЬ рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЪрдпрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдмреЙрдм рдХреЗ рдЦрд╛рддреЗ рдХреА рд╢рд░реНрдд рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕рдХрд╛ рд╕рдВрддреБрд▓рди .10 рддрдХ рдмрдврд╝ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рджреВрд╕рд░рд╛ рдЪрд░рдг рдЪрдпрдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЕрджреНрдпрддрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди "рд▓рдЯрдХрд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдИрдбреА = 3 рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рд╕реЗ рдмрдВрдж рд╣реИред
рдЗрд╕ рдмреАрдЪ, рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИ:
=> COMMIT;
рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
=> SELECT * FROM accounts WHERE client = 'bob';
id | number | client | amount ----+--------+--------+---------- 2 | 2001 | bob | 202.0000 3 | 2002 | bob | 707.0000 (2 rows)
рдЦреИрд░, рдПрдХ рддрд░рдл, UPDATE рдХрдорд╛рдВрдб рдХреЛ рджреВрд╕рд░реЗ рд▓реЗрди-рджреЗрди рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдЗрд╕реЗ рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдЦреЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдмрд╛рд░ рд▓реЙрдХ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, UPDATE рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣ рд░рд╣рд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпрд╣ рдПрдХ)ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдмреЙрдм рдиреЗ ,900 рдХреА рд░рд╛рд╢рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ ,9 рдЕрд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмреЙрдм рдХреЗ рдкрд╛рд╕ тВ╜900 рдереЗ, рддреЛ рдЙрд╕рдХреЗ рдЦрд╛рддреЗ рдЪрдпрди рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдереЗред
рддреЛ, рд▓реЗрди-рджреЗрди рдореЗрдВ рдЧрд▓рдд рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ: рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдПрдХ рд╕рдордп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ, рдФрд░ рдХреБрдЫ рджреВрд╕рд░реЗ рдкрд░ред рдЦреЛрдП рд╣реБрдП рдЕрдкрдбреЗрдЯ рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ
рдЕрд╕рдВрдЧрдд рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рдорд┐рд▓рддреА рд╣реИред
рдЪреМрдХрд╕ рдкрд╛рдардХреЛрдВ рдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХреБрдЫ рдорджрдж рд╕реЗ рдЖрдк рд░реАрдб рдХрдорд┐рдЯреЗрдб рдХреЗ рд╕реНрддрд░ рдкрд░ рднреА рдПрдХ рдЦреЛрдпрд╛ рд╣реБрдЖ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
x := (SELECT amount FROM accounts WHERE id = 1); UPDATE accounts SET amount = x + 100 WHERE id = 1;
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЛрд╖ рдирд╣реАрдВ рджреЗрдирд╛ рд╣реИ: рдпрд╣ рджреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ x + 100 рдХрд╛ рдореВрд▓реНрдп рдХрд┐рд╕реА рддрд░рд╣ рдЦрд╛рддреЛрдВ рдХреА рд░рд╛рд╢рд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪреЗрдВред
рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп
рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдкреНрд░реЗрдд рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрдврд╝рддрд╛ рд╣реИ
рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд▓реЗрд╡рд▓ рдХрд╛ рдмрд╣реБрдд рдирд╛рдо рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрдврд╝рдирд╛ рд░рд┐рдкреАрдЯреЗрдмрд▓ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рдкреНрд░реЗрдд рд░реАрдб рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдореЗрдВ, рд╣рдо рдмреЙрдм рдХреЗ рдЦрд╛рддреЛрдВ рдХреЛ рдЙрдирдХреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд╛рд░реНрд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ:
=> BEGIN; => UPDATE accounts SET amount = 200.00 WHERE id = 2; => UPDATE accounts SET amount = 800.00 WHERE id = 3; => INSERT INTO accounts VALUES (4, '3001', 'charlie', 100.00); => SELECT * FROM accounts ORDER BY id;
id | number | client | amount ----+--------+---------+-------- 1 | 1001 | alice | 800.00 2 | 2001 | bob | 200.00 3 | 2002 | bob | 800.00 4 | 3001 | charlie | 100.00 (4 rows)
рджреВрд╕рд░реЗ рд╕рддреНрд░ рдореЗрдВ, рд╣рдо BEGIN рдХрдорд╛рдВрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд░реАрдбрд╛рдпрд░реЗрдмрд▓ рд░реАрдб рд▓реЗрд╡рд▓ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдХрд╛ рд╕реНрддрд░ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИ)ред
| => BEGIN ISOLATION LEVEL REPEATABLE READ; | => SELECT * FROM accounts ORDER BY id;
| id | number | client | amount | ----+--------+--------+---------- | 1 | 1001 | alice | 800.00 | 2 | 2001 | bob | 202.0000 | 3 | 2002 | bob | 707.0000 | (3 rows)
рдЕрдм рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЙрд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
=> COMMIT;
| => SELECT * FROM accounts ORDER BY id;
| id | number | client | amount | ----+--------+--------+---------- | 1 | 1001 | alice | 800.00 | 2 | 2001 | bob | 202.0000 | 3 | 2002 | bob | 707.0000 | (3 rows)
| => COMMIT;
рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЕрднреА рднреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдбреЗрдЯрд╛ рджреЗрдЦрддрд╛ рд╣реИ: рдореМрдЬреВрджрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдпрд╛ рдирдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджреЛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЦреЛрдП рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рддреНрд░реБрдЯрд┐
рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ рдХрд┐ рдЬрдм рджреЛ рд▓реЗрди-рджреЗрди рдкрдврд╝реЗ рд╣реБрдП рд╕реНрддрд░ рдкрд░ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрд╕рдВрдЧрдд рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рд▓реЗрдирджреЗрди рд▓реЙрдХ рдХреА рдЧрдИ рдкрдВрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрдиреНрдп рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред
рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рд╕реНрддрд░ рдкрд░, рдЗрд╕ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рд▓реЗрдирджреЗрди рдПрдХ рдХреНрд░рдорд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдмреНрдпрд╛рдЬ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рджреЛрд╣рд░рд╛рдХрд░ рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:
=> SELECT * FROM accounts WHERE client = 'bob';
id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 200.00 3 | 2002 | bob | 800.00 (2 rows)
=> BEGIN; => UPDATE accounts SET amount = amount - 100.00 WHERE id = 3;
| => BEGIN ISOLATION LEVEL REPEATABLE READ;<span/> | => UPDATE accounts SET amount = amount * 1.01<span/> | WHERE client IN (<span/> | SELECT client<span/> | FROM accounts<span/> | GROUP BY client<span/> | HAVING sum(amount) >= 1000<span/> | );<span/>
=> COMMIT;
| ERROR: could not serialize access due to concurrent update
| => ROLLBACK;
рдбреЗрдЯрд╛ рд╕реБрд╕рдВрдЧрдд рд░рд╣рд╛:
=> SELECT * FROM accounts WHERE client = 'bob';
id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 200.00 3 | 2002 | bob | 700.00 (2 rows)
рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдпрд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реА рдЪрд┐рдВрддрд╛ рдХреЗ рд╕реНрддрдВрдн рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗ рдЧрдП рд╣реЛрдВред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд╖реНрдХрд░реНрд╖ : рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓реЗрди-рджреЗрди рдХреЗ рд▓рд┐рдП рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рдХреНрд░рдордмрджреНрдзрддрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрди-рджреЗрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдЕрд╕рдВрдЧрдд рд▓реЗрдЦрди
рдЗрд╕рд▓рд┐рдП, PostgreSQL рдореЗрдВ, рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рдкрд░, рдорд╛рдирдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рдирд╣реАрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА
рджреЛ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИрдВред (рдпрд╣ рди рдХреЗрд╡рд▓ PostgreSQL рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднреА рд╕рдЪ рд╣реИред)
рдЗрди рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдПрдХ
рдЕрд╕рдВрдЧрдд рд▓реЗрдЦрди рд╣реИ ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рд░рддрд╛ рдирд┐рдпрдо рдХреЛ рдорд╛рдиреЗрдВ:
рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рднреА рдЦрд╛рддреЛрдВ рдкрд░ рдХреБрд▓ рд░рд╛рд╢рд┐ рдЧреИрд░-рдЛрдгрд╛рддреНрдордХ рдмрдиреА рд╣реБрдИ рд╣реИ, рддреЛ рдЧреНрд░рд╛рд╣рдХ рдЦрд╛рддреЛрдВ рдкрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд░рд╛рд╢рд┐ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ ред
рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдХреЛ рдмреЙрдм рдХреЗ рдЦрд╛рддреЛрдВ рдкрд░ рд░рд╛рд╢рд┐ рдорд┐рд▓рддреА рд╣реИ: amount900ред
=> BEGIN ISOLATION LEVEL REPEATABLE READ; => SELECT sum(amount) FROM accounts WHERE client = 'bob';
sum -------- 900.00 (1 row)
рджреВрд╕рд░реЗ рд▓реЗрди-рджреЗрди рдкрд░ рд╕рдорд╛рди рд░рд╛рд╢рд┐ рдорд┐рд▓рддреА рд╣реИред
| => BEGIN ISOLATION LEVEL REPEATABLE READ; | => SELECT sum(amount) FROM accounts WHERE client = 'bob';
| sum | -------- | 900.00 | (1 row)
рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рд╕рд╣реА рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдХ рдЦрд╛рддреЗ рдХреА рд░рд╛рд╢рд┐ .600 рддрдХ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИред
=> UPDATE accounts SET amount = amount - 600.00 WHERE id = 2;
рдФрд░ рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЙрд╕реА рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ:
| => UPDATE accounts SET amount = amount - 600.00 WHERE id = 3; | => COMMIT;
=> COMMIT; => SELECT * FROM accounts WHERE client = 'bob';
id | number | client | amount ----+--------+--------+--------- 2 | 2001 | bob | -400.00 3 | 2002 | bob | 100.00 (2 rows)
рд╣рдо рдмреЙрдм рдХреЗ рд╕рдВрддреБрд▓рди рдХреЛ рд▓рд╛рд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрди рдЕрдХреЗрд▓реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдкрдврд╝реЗрдВ-рдХреЗрд╡рд▓ рд▓реЗрдирджреЗрди рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐
рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рдФрд░ рдЕрдВрддрд┐рдо рд╣реИ рдЬреЛ рдХрд┐ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рд╕реНрддрд░ рдкрд░ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрди рд▓реЗрдирджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреЛ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдФрд░ рддреАрд╕рд░рд╛ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкрдврд╝реЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдЗрдП рдмреЙрдм рдХреЗ рдЦрд╛рддреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
=> UPDATE accounts SET amount = 900.00 WHERE id = 2; => SELECT * FROM accounts WHERE client = 'bob';
id | number | client | amount ----+--------+--------+-------- 3 | 2002 | bob | 100.00 2 | 2001 | bob | 900.00 (2 rows)
рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдореЗрдВ, рд╕рднреА рдмреЙрдм рдХреЗ рдЦрд╛рддреЛрдВ рдкрд░ рдЙрдкрд▓рдмреНрдз рд░рд╛рд╢рд┐ рдкрд░ рдмреНрдпрд╛рдЬ рдорд┐рд▓рддрд╛ рд╣реИред рдмреНрдпрд╛рдЬ рдЙрдирдХреЗ рдЦрд╛рддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИ:
=> BEGIN ISOLATION LEVEL REPEATABLE READ;
рдлрд┐рд░ рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рджреВрд╕рд░реЗ рдмреЙрдм рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рдкреИрд╕реЗ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИ:
| => BEGIN ISOLATION LEVEL REPEATABLE READ;
рдпрджрд┐ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рд╡рд┐рд╕рдВрдЧрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА: рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдХреЛ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ (рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдиреЗ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦреА = рдЙрд╕рдХреЗ рдкрд╣рд▓реЗ 3 рдЦрд╛рддрд╛ рджреВрд╕рд░реА рд▓реЗрди-рджреЗрди рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рддреАрд╕рд░рд╛ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП) рд▓реЗрдирджреЗрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рджреЛ рд▓реЗрдирджреЗрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ:
| => BEGIN ISOLATION LEVEL REPEATABLE READ;
| id | number | client | amount | ----+--------+--------+-------- | 1 | 1001 | alice | 800.00 | (1 row)
рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ:
=> COMMIT;
рддреАрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЕрдм рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?
| SELECT * FROM accounts WHERE client = 'bob';
рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рддреАрд╕рд░рд╛ рд▓реЗрдирджреЗрди рджреВрд╕рд░реЗ рд▓реЗрди-рджреЗрди (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рдерд╛) рдХреЗ рдмрджрд▓рд╛рд╡ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХрд╛ рдирд╣реАрдВ (рдЬреЛ рдЕрднреА рддрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рдерд╛)ред рджреВрд╕рд░реА рдУрд░, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рдкрддрд╛ рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рдкрд╣рд▓реЗ рдПрдХ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЛ рднреА рд░рд╛рдЬреНрдп рддреАрд╕рд░рд╛ рд▓реЗрдирджреЗрди рджреЗрдЦрддрд╛ рд╣реИ рд╡рд╣ рдЕрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ - рдпрд╣ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрди рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рд╕реНрддрд░ рдкрд░ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ:
| id | number | client | amount | ----+--------+--------+-------- | 2 | 2001 | bob | 900.00 | 3 | 2002 | bob | 0.00 | (2 rows)
| => COMMIT;
serializable
рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реНрддрд░ рд╕рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╡ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реАрд░рд┐рдпрд▓рд╢реЙрдЯ рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реЗ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЬреЛ рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЧрдВрджреЗ, рдЧреИрд░-рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп, рдпрд╛ рдкреНрд░реЗрдд рдкрдврд╝реА рдЬрд╛рддреА рд╣реИрдВ) рдпрд╛ рддреЛ рд╕реАрд░рд┐рдпрд▓ рдпреЛрдЧреНрдп рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдФрд░ рд╡реЗ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЬреЛ рдШрдЯрд┐рдд рд╣реЛрддреА рд╣реИрдВ (рдПрдХ рдЕрд╕рдВрдЧрдд рд▓реЗрдЦрди рдФрд░ рдПрдХ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕рдВрдЧрддрд┐) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓реЗрди-рджреЗрди рдЧрд░реНрднрдкрд╛рдд - рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдХреНрд░рдордмрджреНрдзрддрд╛ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ:
рдкрд╣реБрдБрдЪ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ ред
рдЕрд╕рдВрдЧрдд рд▓реЗрдЦрди
рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдЕрд╕рдВрдЧрдд рд▓реЗрдЦрди рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЗ рд╕рд╛рде рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ:
=> BEGIN ISOLATION LEVEL SERIALIZABLE; => SELECT sum(amount) FROM accounts WHERE client = 'bob';
sum ---------- 910.0000 (1 row)
| => BEGIN ISOLATION LEVEL SERIALIZABLE; | => SELECT sum(amount) FROM accounts WHERE client = 'bob';
| sum | ---------- | 910.0000 | (1 row)
=> UPDATE accounts SET amount = amount - 600.00 WHERE id = 2;
| => UPDATE accounts SET amount = amount - 600.00 WHERE id = 3; | => COMMIT;
=> COMMIT;
ERROR: could not serialize access due to read/write dependencies among transactions DETAIL: Reason code: Canceled on identification as a pivot, during commit attempt. HINT: The transaction might succeed if retried.
рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рд▓реЗрд╡рд▓ рдкрд░ рдареАрдХ рдЙрд╕реА рддрд░рд╣, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрдмрд▓ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд▓реЗрд╡рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреЛ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрд░рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрд░рд░ рдореИрд╕реЗрдЬ рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рд╕рд╛рджрдЧреА рд╣рд╛рд╕рд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рд▓рд┐рдП рдХреАрдордд рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдХреЗ рд▓реЗрди-рджреЗрди рдХреА рдмрд╛рдзреНрдпрддрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЕрдВрд╢ рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рдХреЗрд╡рд▓ рдЙрди рд▓реЗрдирджреЗрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдФрд░ рдЕрдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрд╕рд▓ рдореЗрдВ, PostgreSQL рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдРрд╕рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЭреВрдареЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдирджреЗрди рдЬреЛ "рдЕрдирд▓рдХреА" рд╣реИрдВ рд╡реЗ рднреА рдЧрд░реНрднрдкрд╛рдд рдХрд░ рджреЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдпрд╣ рдХрдИ рдХрд╛рд░рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреБрдХреНрдд рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдпрд╛ рдЙрдкрд▓рдмреНрдз рд░реИрдо рдХреА рдорд╛рддреНрд░рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдЕрдиреНрдп (рдмрд╣реБрдд рдЧрдВрднреАрд░) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Serializable рд╕реНрддрд░ рдкрд░ рдХреНрд╡реЗрд░реАрдЬрд╝ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреА, рдФрд░ рд╡реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдЬрд╛рд░реА рд╣реИ, рдореМрдЬреВрджрд╛ рд╕реАрдорд╛рдПрдВ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдЗрд╕ рд╕реНрддрд░ рдХреЛ рдХрдо рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддреА рд╣реИрдВред
рд╕рдорд╛рдирд╛рдВрддрд░ рдпреЛрдЬрдирд╛ PostgreSQL 12 ( рдкреИрдЪ ) рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдкрд░ рдХреНрд╡реЗрд░реАрдЬрд╝ PostgreSQL 13 ( рдПрдХ рдФрд░ рдкреИрдЪ ) рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреА рд╣реИред
рдкрдврд╝реЗрдВ-рдХреЗрд╡рд▓ рд▓реЗрдирджреЗрди рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐
рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реМрджреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдкреАрдбрд╝рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, PostgreSQL рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдХрдиреАрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдРрд╕рд╛ рд▓реЗрдирджреЗрди рддрдм рддрдХ рдмрдВрдж рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕реБрд░рдХреНрд╖рд┐рдд рди рд╣реЛред рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдПрдХ рд╕реЗрд▓реЗрдХреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрдВрдХреНрддрд┐ рдЕрдкрдбреЗрдЯ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
=> UPDATE accounts SET amount = 900.00 WHERE id = 2; => UPDATE accounts SET amount = 100.00 WHERE id = 3; => SELECT * FROM accounts WHERE client = 'bob' ORDER BY id;
id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 900.00 3 | 2002 | bob | 100.00 (2 rows)
=> BEGIN ISOLATION LEVEL SERIALIZABLE;
| => BEGIN ISOLATION LEVEL SERIALIZABLE;
рддреАрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
| => BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE;
рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд▓реЗрди-рджреЗрди рд▓реЙрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред
=> COMMIT;
рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддреАрд╕рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд╣реИ:
| id | number | client | amount | ----+--------+--------+-------- | 1 | 1001 | alice | 800.00 | (1 row)
| => SELECT * FROM accounts WHERE client = 'bob';
| id | number | client | amount | ----+--------+--------+---------- | 2 | 2001 | bob | 910.0000 | 3 | 2002 | bob | 0.00 | (2 rows)
| => COMMIT;
рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ: рдпрджрд┐ рд╕реАрд░рд┐рдпрд▓ рдпреЛрдЧреНрдп рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рднреА рд▓реЗрдирджреЗрди рдЗрд╕ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк Serializable рдХреЗ рд╕рд╛рде Read-Committed (рдпрд╛ repeatable Read) рд▓реЗрдирджреЗрди рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЖрдк рдорд┐рд╢реНрд░рдг рдХрд░
рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдРрд╕рд╛ рдмрд╛рдж рдореЗрдВ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк Serializble рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЧрд▓рдд рд╕реНрддрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХреЗрдЧрд╛):
ALTER SYSTEM SET default_transaction_isolation = 'serializable';
рдЖрдк рдХрд┐рддрд╛рдмреЛрдВ рдФрд░ рд▓реЗрдХреНрдЪрд░ рдХреЛрд░реНрд╕ рдореЗрдВ рд▓реЗрди-рджреЗрди, рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдФрд░ рдЕрдзрд┐рдХ рдХрдареЛрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмреЛрд░рд┐рд╕ рдиреЛрд╡рд┐рдХреЛрд╡ "рдлрдВрдбрд╛рдореЗрдВрдЯрд▓ рдСрдл рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ" (рдХреЗрд╡рд▓ рд░рд┐рдпреЛрдирд┐рдпрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз)ред
рдХрд┐рд╕ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ?
PostgreSQL рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░реАрдб рдХрдорд┐рдЯреЗрдб рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдПрдХ рд▓реЗрдирджреЗрди рдЧрд░реНрднрдкрд╛рдд рдХреЗрд╡рд▓ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд╕рдВрдЧрддрддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреНрд░рдорд┐рдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕рд┐рдХреНрдХреЗ рдХреЗ рджреВрд╕рд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдЙрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрдЯ рди рд╣реЛрдиреЗ рджрд┐рдпрд╛ рдЬрд╛рдПред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдПрдХрд▓ SQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╕рдВрдЧрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕реНрд╡рдпрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдФрд░ рдЧреИрд░-рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдЕрд╕рдВрдЧрддрддрд╛ рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕, рд╕рднреА рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рд╢реЗрд╖ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдЖрд╡реЗрджрди рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреНрд░рдордмрджреНрдзрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХреЗред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрди-рджреЗрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрддрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЕрдВрдд рдореЗрдВ, Serializable рд╕реНрддрд░ рдЖрдкрдХреЛ рдЕрд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХреЛрдбрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрд░рдордмрджреНрдзрддрд╛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рд▓реЗрдирджреЗрди рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд░рд╕реНрдд рд▓реЗрдирджреЗрди, рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдХрд╛ рдЕрдВрд╢ рд╕рд┐рд╕реНрдЯрдо рдереНрд░реВрдкреБрдЯ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдкрд░ рдХреНрд░рдорд┐рдХ рд╕реНрддрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдиреНрдп рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░ рдкрдврд╝реЗрдВ ред