
ΠΠ²Π°Ρ ΡΠ»Π°Π½Π°ΠΊ Π΄Π΅ΡΠ°ΡΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΡΠ°Π²Π° ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ. Π Π΅ΡΠΈ ΡΠ΅ΠΌΠΎ Π²Π°ΠΌ ΡΡΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ³ΠΎΠ΄ΠΈΡΠΈ Π²Π°ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΠΌΠ° Π°ΠΊΠΎ ΠΏΠΎΠΊΡΡΠ°ΡΠ΅ Π΄Π° ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π±Π΅Π· ΠΏΡΠ΅Π»ΠΈΠΌΠΈΠ½Π°ΡΠ½Π΅ ΠΏΡΠΈΠΏΡΠ΅ΠΌΠ΅. ΠΠ°ΡΠΈΠΌ ΡΠ΅ΠΌΠΎ ΠΏΡΠΎΡΠΈ ΠΊΡΠΎΠ· ΡΠ°Π·Π΅ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ³ ΡΠΈΠΊΠ»ΡΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π° ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΄Π° Π½Π΅ΠΌΠ°ΡΡ Π·Π°ΡΡΠΎΡΠ° (ΠΏΡΠΈΠ±Π». ΡΡΠ°ΠΊΠ°: Π΄Π°ΡΠ΅ - Π½ΡΠ»Π° Π·Π°ΡΡΠΎΡΠ°). Π Π΅Π·ΡΠ»ΡΠ°Ρ Π½Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ° Π±ΠΈΡΠ΅ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π½Π°Π·Π°Π΄ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Ρ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π° Π½Π°ΡΠΈΠ½ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π°Π½ ΡΠ° ΡΠ½Π°Π·Π°Π΄.
ΠΠΊΠΎ ΠΆΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΡΠ°Π·ΡΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ· ΡΠ»Π°Π½ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡ ΠΏΡΠΎΠ½Π°ΡΠΈ Π½Π° .
Π£Π²ΠΎΠ΄
ΠΡΠΈΠΌΠ΅Π½Π° Π±Π΅Π· Π·Π°ΡΡΠΎΡΠ°
ΠΠ°ΠΊΠ²Π° ΠΌΠΈΡΡΠΈΠΊΠ° Π½ΡΠ»Π° Π·Π°ΡΡΠΎΡΠ° Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ? ΠΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠΈ Π΄Π° ΡΠ΅ ΡΠΎ ΠΊΠ°Π΄Π° ΡΠ΅ Π²Π°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠ΅Π½Π° Π½Π° Π½Π°ΡΠΈΠ½ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ²Π΅ΡΡΠΈ Π½ΠΎΠ²Ρ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ, Π° Π΄Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π½Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅Π½Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡ. ΠΠ· ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ΅, ΠΎΠ²ΠΎ ΡΠ΅ Π½Π°ΡΠ±ΠΎΡΠΈ ΠΌΠΎΠ³ΡΡΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅ ΡΠ΅Ρ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° ΡΠ²ΠΎΡΠ΅ΡΠ΅ Π½ΠΎΠ²ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΈ ΠΈΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ°ΠΊΠ° Π±Π΅Π· ΠΎΠΌΠ΅ΡΠ°ΡΠ°.
ΠΠ°ΠΊΠΎ ΡΠΎ ΠΏΠΎΡΡΠΈΡΠΈ? ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½Π°ΡΠΈΠ½Π°, Π΅Π²ΠΎ ΡΠ΅Π΄Π½ΠΎΠ³ ΠΎΠ΄ ΡΠΈΡ :
- ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΡ Π±Ρ. 1 ΡΠ²ΠΎΡΠ΅ ΡΡΠ»ΡΠ³Π΅
- ΠΈΠ·Π²ΡΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
- ΠΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΡ #2 ΡΠ²ΠΎΡΠ΅ ΡΡΠ»ΡΠ³Π΅ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠΎΠΌ #1
- ΡΠΈΠΌ Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π±Ρ.2 ΡΠ°Π΄ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠ΅Π±Π°, ΡΠΊΠ»ΠΎΠ½ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΡ Π±Ρ.1
- Π³ΠΎΡΠΎΠ²!
ΠΠ°ΠΊΠΎ, Π·Π°Ρ Π½Π΅? ΠΠ°ΠΆΠ°Π»ΠΎΡΡ, ΡΠΎ Π½ΠΈΡΠ΅ ΡΠ°ΠΊΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ, Π° ΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΠΌΠΎ ΡΠΎ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΈ. Π‘Π°Π΄Π° Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠΎ ΡΠΎΡ ΡΠ΅Π΄Π°Π½ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ° - ΠΏΠ»Π°Π²ΠΎ Π·Π΅Π»Π΅Π½ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠΈΠ²Π°ΡΠ΅.
ΠΠ΅ΡΡΠ΅ Π»ΠΈ ΠΈΠΊΠ°Π΄Π° ΡΡΠ»ΠΈ Π·Π° ? Π¦Π»ΠΎΡΠ΄ Π€ΠΎΡΠ½Π΄ΡΠΈ ΠΎΠ²ΠΎ ΡΠΈΠ½ΠΈ ΠΈΠ·ΡΠ·Π΅ΡΠ½ΠΎ Π»Π°ΠΊΠΈΠΌ. Π‘Π°ΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΡΠ΅ , Π³Π΄Π΅ ΠΎΠ²ΠΎ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΡΡΠ΅ΠΌΠΎ. ΠΠ° ΡΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅Π·ΠΈΠΌΠΈΡΠ°ΠΌΠΎ, ΠΏΠΎΠ΄ΡΠ΅ΡΠΈΠΌΠΎ Π²Π°Ρ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠ»Π°Π²ΠΎ Π·Π΅Π»Π΅Π½ΠΎ:
- ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡΠ΅ Π΄Π° Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΡΠ΅ Π²Π°ΡΠ΅Π³ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ ΠΊΠΎΠ΄Π° (βΠΏΠ»Π°Π²Π°β ΠΈ βΠ·Π΅Π»Π΅Π½Π°β) ΡΠ°Π΄Π΅;
- ΡΠ°Π² ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°Ρ ΡΡΠΌΠ΅ΡΠΈΡΠΈ Π½Π° ΠΏΠ»Π°Π²ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅, ΡΡ. ΡΠ°ΠΊΠΎ Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π΅ Π£Π Π Π°Π΄ΡΠ΅ΡΠ΅ ΡΠΏΡΡΡΡΡ ΡΠ°ΠΌΠΎ;
- ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠΈ ΡΠ²Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Ρ Π·Π΅Π»Π΅Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΡ;
- ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π£Π Π ΠΈΠ· ΠΏΠ»Π°Π²ΠΎΠ³ Ρ Π·Π΅Π»Π΅Π½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅
ΠΠ»Π°Π²ΠΎ Π·Π΅Π»Π΅Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π° ΡΠ΅ ΠΏΡΠΈΡΡΡΠΏ ΠΊΠΎΡΠΈ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° Π»Π°ΠΊΠΎ ΡΠ²Π΅Π΄Π΅ΡΠ΅ Π½ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ Π±Π΅Π· Π±ΡΠΈΠ³Π΅ ΠΎ ΠΏΡΠ΅ΠΊΠΈΠ΄Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ΅. Π’ΠΎ ΡΠ΅ Π·Π±ΠΎΠ³ ΡΠΈΡΠ΅Π½ΠΈΡΠ΅ Π΄Π° ΡΠ°ΠΊ ΠΈ Π°ΠΊΠΎ ΡΠ΅ Π½Π΅ΡΡΠΎ Π΄ΠΎΠ³ΠΎΠ΄ΠΈ, Π»Π°ΠΊΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ°ΡΠΈΡΠΈ Π½Π° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΠΌ βΠΏΡΠ΅Π±Π°ΡΠΈΠ²Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΊΠΈΠ΄Π°ΡΠ°β.
ΠΠ°ΠΊΠΎΠ½ ΡΡΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΡΠ²Π΅ Π³ΠΎΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠΈ ΠΏΠΈΡΠ°ΡΠ΅: ΠΠ°ΠΊΠ²Π΅ Π²Π΅Π·Π΅ Π½ΡΠ»ΡΠΈ Π·Π°ΡΡΠΎΡ ΠΈΠΌΠ° ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΎΠΌ ΠΏΠ»Π°Π²ΠΎ Π·Π΅Π»Π΅Π½Π΅ Π±ΠΎΡΠ΅?
ΠΠ°, ΠΈΠΌΠ°ΡΡ Π΄ΠΎΡΡΠ° ΡΠΎΠ³Π° Π·Π°ΡΠ΅Π΄Π½ΠΈΡΠΊΠΎΠ³, ΠΏΠΎΡΡΠΎ ΠΎΠ΄ΡΠΆΠ°Π²Π°ΡΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΡΠ΅ ΠΈΡΡΠΎΠ³ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° Π·Π°Ρ ΡΠ΅Π²Π° Π΄Π²ΠΎΡΡΡΡΠΊΠΈ Π½Π°ΠΏΠΎΡ Π΄Π° ΡΠ΅ ΠΎΠ½Π΅ ΠΎΠ΄ΡΠΆΠ΅. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° Π½Π΅ΠΊΠΈ ΡΠΈΠΌΠΎΠ²ΠΈ ΡΠ²ΡΠ΄Π΅ , ΠΏΡΠ°ΡΠΈΡΠ΅ Π²Π°ΡΠΈΡΠ°ΡΠΈΡΡ ΠΎΠ²ΠΎΠ³ ΠΏΡΠΈΡΡΡΠΏΠ°:
ΠΡΡΠ³Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΈΡΡΡ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΊΡΠ΅ΠΈΡΠ°ΡΡΡΠΈ ΠΏΠ»Π°Π²ΠΎ-Π·Π΅Π»Π΅Π½Π΅ ΠΏΡΠ΅ΠΊΠΈΠ΄Π°ΡΠ΅ Π·Π° Π²Π΅Π± ΠΈ ΡΠ»ΠΎΡΠ΅Π²Π΅ Π΄ΠΎΠΌΠ΅Π½Π°. Π£ ΠΎΠ²ΠΎΠΌ ΠΏΡΠΈΡΡΡΠΏΡ Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ΡΡΠΎ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΠΊΠ°Π΄Π° ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅Π½Ρ ΡΠ΅ΠΌΡ Π΄Π° Π±ΠΈΡΡΠ΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π»ΠΈ Π½ΠΎΠ²Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΡΠΎΡΡΠ²Π΅ΡΠ°.
Π ΠΎΠ²Π΄Π΅ Π΄ΠΎΠ»Π°Π·ΠΈΠΌΠΎ Π΄ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ. ΠΠ°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΠΎΡ ΡΠ΅Π΄Π½ΠΎΠΌ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΠΎΠ²Ρ ΡΡΠ°Π·Ρ.
ΠΈΠ·Π²ΡΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
Π‘Π°Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°ΡΠ΅ β ΡΡΠ° Π°ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π° ΡΠ½Π°ΡΡΠ°Π³? ΠΠ°Ρ ΡΠ΅ ΠΌΠΎΡΠ° ΠΏΡΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π½Π΅ΡΠ΅ ΠΏΠΎΠΊΠ²Π°ΡΠΈΡΠΈ? Π£ ΡΡΠ²Π°ΡΠΈ, ΡΠΏΡΠ°Π²ΠΎ ΡΠΎ ΡΠ΅ ΡΠ΅ Π΄ΠΎΠ³ΠΎΠ΄ΠΈΡΠΈ...
ΠΠ°ΠΊΠ»Π΅, ΡΠ°ΠΊ ΠΈ ΡΠΏΡΠΊΠΎΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈΠΌ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ° Π½ΡΠ»ΡΠ΅ Π·Π°ΡΡΠΎΡΠ΅ / ΠΏΠ»Π°Π²ΠΎ Π·Π΅Π»Π΅Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ΅ ΠΈΠΌΠ°ΡΡ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡΡ Π΄Π° ΡΠ»Π΅Π΄Π΅ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΈΡΠΈ ΠΏΡΠΎΡΠ΅Ρ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΡΠ²ΠΎΡΠΈΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°:
- ΠΏΡΠΈΠΏΡΠ΅ΠΌΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ° Π½ΠΎΠ²ΠΎΠΌ Π²Π΅ΡΠ·ΠΈΡΠΎΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
- ΠΈΡΠΊΡΡΡΠΈΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ
- ΠΏΠΎΠΊΡΠ΅Π½ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
- ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ ΠΈ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ Π½ΠΎΠ²Ρ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ Π΄Π΅ΡΠ°ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ° ΡΠ²ΠΎΡΠΎΠΌ Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π° Π±ΠΈΡΡΠ΅ ΠΈΡΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅ Π±Π΅Π· Π·Π°ΡΡΠΎΡΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π±Π΅Π· ΡΡΠ°ΡΠ° ΠΊΠΎΡΠ° Π½Π΅ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΎΠ΄ΠΌΠ°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠΈ Π½ΡΠ»ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Ρ Π·Π°ΡΡΠΎΡΠ°. ΠΠ°ΠΆΠ°Π»ΠΎΡΡ, Π²Π΅ΡΠΈΠ½Π° ΡΠΎΡΡΠ²Π΅ΡΠ° ΠΌΠΎΡΠ° Π½Π΅Π³Π΄Π΅ Π΄Π° ΡΡΠΊΠ»Π°Π΄ΠΈΡΡΠΈ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° ΡΡΠ΅Π±Π° Π΄Π²Π°ΠΏΡΡ ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈΡΠΈ ΠΏΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΡΠ½Π΅ΡΠ΅ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ ΠΊΠΎΠ»ΠΎ. ΠΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΡΡΠ΅ΠΌΠΎ Ρ Π΄Π΅ΡΠ°ΡΠ΅ ΠΎ ΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π° Π±Π΅Π· Π·Π°ΡΡΠΎΡΠ°, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠ²ΠΎ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΌΠΎ Π½Π° ΡΠ΅ΠΌΡ Π²Π΅ΡΠ·ΠΈΠΎΠ½ΠΈΡΠ°ΡΠ°.
Π¨Π΅ΠΌΠ° Π²Π΅ΡΠ·ΠΈΡΠ°
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΊΠ°ΠΎ Π°Π»Π°Ρ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΠ·ΠΈΡΠ° (ΠΏΡΠΈΠ±Π». ΠΡΠ΅Π²ΠΎΠ΄: Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ ΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠ°ΠΌΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°). ΠΠ°ΡΠ°Π²Π½ΠΎ, ΡΠ°ΠΊΠΎΡΠ΅ ΡΠ΅ΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΊΠΎΡΠ° ΠΈΠΌΠ° ΡΠ³ΡΠ°ΡΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΡΠΊΡ Π·Π° Π€Π»ΠΈΠ²Π°ΠΈ ΠΈ ΠΊΠΎΡΠ° ΡΠ΅ Π²ΡΡΠΈΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ ΡΠ΅ΠΌΠ΅ ΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ°Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π€Π»ΠΈΠ²Π°ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ Ρ ΡΠ°ΡΡΠΈΠΊΠ»Ρ ΡΠ° ΠΏΡΠΎΡΠ΅ΠΊΡΠΈΠΌΠ° (ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΎ Ρ classpath:db/migration). ΠΠ²Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ²ΠΈΡ
Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ
βββ db
βββ migration
βββ V1__init.sql
βββ V2__Add_surname.sql
βββ V3__Final_migration.sql
βββ V4__Remove_lastname.sqlΠ£ ΠΎΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎ 4 ΡΠΊΡΠΈΠΏΡΠ΅ Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ ΠΊΠΎΡΠ΅ ΡΠ΅ ΡΠ΅, Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ Π½Π΅ ΠΈΠ·Π²ΡΡΠ΅, ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠΈ ΡΠ΅Π΄Π½Π° Π·Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠ°Π΄Π° ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΏΠΎΠΊΡΠ΅Π½Π΅. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ ΡΠ°ΡΠ»ΠΎΠ²Π° (V1__init.sql) ΠΊΠ°ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ.
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');Π‘Π²Π΅ ΡΠ΅ ΡΠ°Π²ΡΡΠ΅Π½ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±ΠΈ ΡΠ°Π·ΡΠΌΡΠΈΠ²ΠΎ: ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π‘ΠΠ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π²Π°ΡΠ° Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠΎΠ²Π°Π½Π°. ΠΠ° Π²ΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΎ Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ-Ρ ΠΈ Π€Π»ΠΈΠ²Π°ΠΈ-Ρ, ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΡΠ΅ .
ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ Π°Π»Π°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈΠ·Π²ΠΎΡΠ° ΡΠ° Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ-ΠΎΠΌ, Π΄ΠΎΠ±ΠΈΡΠ°ΡΠ΅ 2 Π²Π΅Π»ΠΈΠΊΠ΅ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ:
- ΠΎΠ΄Π²Π°ΡΠ°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΎΠ΄ ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ΄Π°
- ΠΠΈΠ³ΡΠ°ΡΠΈΡΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π΅ΡΠ°Π²Π° Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° ΡΠ²ΠΎΡΠ΅ΡΠ΅ΠΌ Π²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΡΡ. Π²Π°Ρ ΠΏΡΠΎΡΠ΅Ρ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ΅Π½
Π Π΅ΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
Π£ ΡΠ»Π΅Π΄Π΅ΡΠ΅ΠΌ ΠΎΠ΄Π΅ΡΠΊΡ ΡΠ»Π°Π½ΠΊΠ°, ΡΠΎΠΊΡΡΠΈΡΠ°ΡΠ΅ΠΌΠΎ ΡΠ΅ Π½Π° ΡΠ°Π·ΠΌΠ°ΡΡΠ°ΡΠ΅ Π΄Π²Π° ΠΏΡΠΈΡΡΡΠΏΠ° ΠΏΡΠΎΠΌΠ΅Π½Π°ΠΌΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
- Π½Π°Π·Π°Π΄Π½Π° Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ
- ΠΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ
ΠΡΠ²ΠΈ ΡΠ΅ ΡΠ΅ ΡΠΌΠ°ΡΡΠ°ΡΠΈ ΡΠΏΠΎΠ·ΠΎΡΠ΅ΡΠ΅ΠΌ Π΄Π° Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° Π²ΡΡΠΈΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π½ΡΠ»ΡΠΎΠ³ Π·Π°ΡΡΠΎΡΠ° Π±Π΅Π· ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π΅ ΠΏΡΠΈΠΏΡΠ΅ΠΌΠ΅... ΠΡΡΠ³ΠΈ Π½ΡΠ΄ΠΈ ΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π±Π΅Π· Π·Π°ΡΡΠΎΡΠ°, Π° Π΄Π° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ ΠΎΠ΄ΡΠΆΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠ½Π°Π·Π°Π΄.
ΠΠ°Ρ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ Π½Π° ΠΊΠΎΡΠ΅ΠΌ ΡΠ΅ΠΌΠΎ ΡΠ°Π΄ΠΈΡΠΈ Π±ΠΈΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ Π€Π»ΠΈΠ²Π°ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΠΈΠΌΠ° Person Ρ first_name ΠΈ last_name Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° (ΠΏΡΠΈΠ±Π». ΠΏΡΠ΅Π²ΠΎΠ΄: Person ΡΠ΅ ΡΠ°Π±Π΅Π»Π° ΠΈ Ρirst_name ΠΈ last_name - ΠΎΠ²ΠΎ ΡΡ ΠΏΠΎΡΠ° Ρ ΡΠ΅ΠΌΡ). ΠΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΌΠΎ last_name Π² surname.
ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠ΅
ΠΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΡΡΠ΅ΠΌΠΎ Ρ Π΄Π΅ΡΠ°ΡΠ΅, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΎ Π½Π°ΡΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΠΌΠ°. ΠΠ»Π°Π²Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΊΠΎΡΠΈ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌΠΎ Π±ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½ ΠΏΡΠΎΡΠ΅Ρ.
ΠΠ΅Π»Π΅ΡΠΊΠ°. ΠΠΎΡΠ»ΠΎΠ²Π½ΠΈ ΠΠ Π-Π’ΠΠ. ΠΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠΈΠ²Π°ΡΠ΅ Π²Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅ Π²Π°ΠΌ ΡΡΡΠ΅Π΄Π΅ΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΡΠ° Π½Π° ΠΏΠΎΠ΄ΡΡΡΠΈ (ΡΡΠΎ Π²ΠΈΡΠ΅ ΡΡΠ΄ΠΈ ΡΠ°Π΄ΠΈΡΠ΅ Π·Π° Π²Π°ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡ, Π²ΠΈΡΠ΅ Π½ΠΎΠ²ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ΅Π΄Π΅ΡΠΈ)!
ΠΠ΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π·Π° Π²ΡΠ°ΡΠ°ΡΠ΅ΠΌ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
ΠΠ²ΠΎ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΡΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ (Π½Π΅ΠΊΠ° Π²ΡΠ°ΡΠ°ΡΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΡ ΡΠΊΠΎΡΠΎ Π½Π΅ΠΌΠΎΠ³ΡΡΠ°, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ Π²ΡΠ°ΡΠ°ΡΠ΅ Π±ΡΠΈΡΠ°ΡΠ°). Π Π°Π΄ΠΈΡΠ΅ Π²ΡΠ°ΡΠ°ΠΌΠΎ ΡΠ°ΠΌΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ° ΠΎΠ²Π°Ρ Π½Π°ΡΠΈΠ½, ΡΠ°ΠΊ ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π‘ΠΠ ΠΈ ΠΠΎΠ‘ΠΠ), Π²Π°Ρ ΡΠ΅Π²ΠΎΠ²ΠΎΠ΄ Π·Π° ΠΏΡΠΈΠΌΠ΅Π½Ρ ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΈΡΡΠΎ.
Π£Π²Π΅ΠΊ ΠΌΠΎΡΠ° Π±ΠΈΡΠΈ ΠΌΠΎΠ³ΡΡΠ΅ Π²ΡΠ°ΡΠΈΡΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π·Π° ΡΠ΅Π΄Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΡΠ½Π°Π·Π°Π΄ (Π½Π΅ Π²ΠΈΡΠ΅)
ΠΡΠ°ΡΠ°ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π²ΡΡΠΈ ΡΠ°ΠΌΠΎ ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠΎ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ. ΠΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠΈ Π³ΡΠ΅ΡΠΊΠ° Ρ ΡΡΠ΅Π½ΡΡΠ½ΠΎΡ Π²Π΅ΡΠ·ΠΈΡΠΈ ΠΊΠΎΡΡ Π½ΠΈΡΠ΅ Π»Π°ΠΊΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠΈ, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π±ΡΠ΄Π΅ΠΌΠΎ Ρ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠΎ Π½Π° Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΡ ΡΠ°Π΄Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ. ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΎΠ²Π° Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠ° ΡΠ°Π΄Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π°. ΠΠ΄ΡΠΆΠ°Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π·Π° Π²ΠΈΡΠ΅ ΠΎΠ΄ ΡΠ΅Π΄Π½ΠΎΠ³ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° Π±ΠΈΠ»ΠΎ Π±ΠΈ ΠΈΠ·ΡΠ·Π΅ΡΠ½ΠΎ ΡΠ΅ΡΠΊΠΎ ΠΈ ΡΠΊΡΠΏΠΎ.
ΠΠ΅Π»Π΅ΡΠΊΠ°. Π Π°Π΄ΠΈ Π²Π΅ΡΠ΅ ΡΠΈΡΡΠΈΠ²ΠΎΡΡΠΈ, Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ Π³Π»Π°Π²Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅.
ΠΠΎΡΠ°ΠΊ 1: ΠΠΎΡΠ΅ΡΠ½ΠΎ ΡΡΠ°ΡΠ΅
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅: 1.0.0
ΠΠ Π²Π΅ΡΠ·ΠΈΡΠ°: v1
ΠΠΎΠΌΠ΅Π½ΡΠ°Ρ
ΠΠ²ΠΎ ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΠΎΡΠ΅ΡΠ½ΠΎ ΡΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅.
ΠΡΠΎΠΌΠ΅Π½Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
ΠΠ ΡΠ°Π΄ΡΠΆΠΈ last_name.
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');ΠΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ΄Π°
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΎ Π»ΠΈΡΠ½ΠΎΡΡΠΈ Ρ last_name:
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.flyway;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastname) {
this.lastName = lastname;
}
@Override
public String toString() {
return "Person [firstName=" + this.firstName + ", lastName=" + this.lastName
+ "]";
}
}ΠΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½Π΅ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎ ΡΠ½Π°Π·Π°Π΄
ΠΠΎΠ³Π»Π΅Π΄Π°ΡΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠΌΠ΅ ΠΊΠΎΠ»ΠΎΠ½Π΅:
ΠΠ°ΠΆΡΠ°. Π‘Π»Π΅Π΄Π΅ΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΠΈ ΡΡΠ²Π°ΡΠΈ. ΠΠ²ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΡΠ΅ΠΌΠΎ Π΄Π° Π±ΠΈΡΠΌΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠΈ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅: 2.0.0.BAD
ΠΠ Π²Π΅ΡΠ·ΠΈΡΠ°: v2bad
ΠΠΎΠΌΠ΅Π½ΡΠ°Ρ
Π’ΡΠ΅Π½ΡΡΠ½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Π½Π°ΠΌ ΠΠ Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π°ΡΡ Π΄Π° ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΠΌΠΎ Π΄Π²Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ (ΡΡΠ°ΡΠ΅ ΠΈ Π½ΠΎΠ²Π΅). Π‘ΡΠΎΠ³Π° ΡΠ΅ Π±ΠΈΡΠΈ ΡΠ΅ΡΠΊΠΎ ΠΏΠΎΡΡΠΈΡΠΈ Π½ΡΠ»ΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π·Π°ΡΡΠΎΡΠ° (Π°ΠΊΠΎ ΡΠ΅ ΡΠ·ΠΌΡ Ρ ΠΎΠ±Π·ΠΈΡ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠ΅, ΡΠΎ ΡΠ΅ Π·Π°ΠΏΡΠ°Π²ΠΎ Π½Π΅ΠΌΠΎΠ³ΡΡΠ΅).
Π/Π ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅
Π’ΡΠ΅Π½ΡΡΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ 1.0.0, ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ ΠΈ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° v1. ΠΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π΄ΡΡΠ³Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, Π²Π΅ΡΠ·ΠΈΡΡ 2.0.0.BAD, ΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΡΠ΅ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π° v2bad.
ΠΠΎΡΠ°ΡΠΈ:
- ΠΏΡΠΈΠΌΠ΅ΡΡΡΠ΅ ΡΠ΅ Π½ΠΎΠ²Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅
2.0.0.BADΠΊΠΎΡΠΈ Π°ΠΆΡΡΠΈΡΠ° Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π°v2bad - Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
v2badΠΊΠΎΠ»ΠΎΠ½Π°last_nameΠ²ΠΈΡΠ΅ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ β ΠΏΡΠΎΠΌΠ΅ΡΠ΅Π½ΠΎ ΡΠ΅ Ρsurname - ΠΠΆΡΡΠΈΡΠ°ΡΠ΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ Π½Π΅ΠΊΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ ΡΡ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠ΅
1.0.0, Π΄ΡΡΠ³ΠΈ - Ρ2.0.0.BAD. Π‘Π²Π΅ ΡΠ΅ ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΎ ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°v2bad - ΡΠ²Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅
1.0.0ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ Π΄Π° Π±Π°ΡΠ° Π³ΡΠ΅ΡΠΊΠ΅ ΡΠ΅Ρ ΡΠ΅ ΠΏΠΎΠΊΡΡΠ°ΡΠΈ Π΄Π° ΡΠ±Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ ΠΊΠΎΠ»ΠΎΠ½Ρlast_nameΠΊΠΎΡΠΈ Π²ΠΈΡΠ΅ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ - ΡΠ²Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅
2.0.0.BADΡΠ°Π΄ΠΈΡΠ΅ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΠ°ΠΎ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, Π°ΠΊΠΎ ΠΈΠ·Π²ΡΡΠΈΠΌΠΎ ΡΠ½Π°Π·Π°Π΄ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ, Π/Π ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ Π½Π΅ΠΌΠΎΠ³ΡΡΠ΅.
ΠΡΠ°ΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ Π΄Π° Π½Π°ΠΊΠΎΠ½ ΠΏΠΎΠΊΡΡΠ°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ Π/Π (ΠΏΡΠΈΠ±Π». ΠΏΠ΅Ρ.: Π°ΡΡΠΎΡ ΡΠ΅ ΠΎΠ²Π΄Π΅ Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎ ΠΌΠΈΡΠ»ΠΈΠΎ Π½Π° Π/Π ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅) ΠΎΠ΄Π»ΡΡΠΈΠ»ΠΈ ΡΠΌΠΎ Π΄Π° ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° Π²ΡΠ°ΡΠΈΠΌΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π½Π° Π²Π΅ΡΠ·ΠΈΡΡ 1.0.0. Π Π΅ΡΠΈΠΌΠΎ Π΄Π° Π½Π΅ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° Π²ΡΠ°ΡΠΈΠΌΠΎ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠΎΡΠ°ΡΠΈ:
- Π·Π°ΡΡΡΠ°Π²ΡΠ°ΠΌΠΎ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅
2.0.0.BAD - Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΎΡ ΡΠ²Π΅ΠΊ
v2bad - ΠΎΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ΅
1.0.0Π½Π΅ ΡΠ°Π·ΡΠΌΠ΅ ΡΡΠ° ΡΠ΅ ΡΠΎsurname, Π²ΠΈΠ΄Π΅ΡΠ΅ΠΌΠΎ Π³ΡΠ΅ΡΠΊΠ΅ - ΠΏΠ°ΠΊΠ°ΠΎ ΡΠ΅ Π½Π°ΡΡΠ°ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π²ΠΈΡΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠΎ
ΠΠ°ΠΎ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, Π°ΠΊΠΎ ΠΈΠ·Π²ΡΡΠΈΠΌΠΎ ΡΠ½Π°Π·Π°Π΄ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠΎ Π½Π° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ.
ΠΠ½Π΅Π²Π½ΠΈΡΠΈ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ΅
Backward incompatible scenario:
01) Run 1.0.0
02) Wait for the app (1.0.0) to boot
03) Generate a person by calling POST localhost:9991/person to version 1.0.0
04) Run 2.0.0.BAD
05) Wait for the app (2.0.0.BAD) to boot
06) Generate a person by calling POST localhost:9991/person to version 1.0.0 <-- this should fail
07) Generate a person by calling POST localhost:9992/person to version 2.0.0.BAD <-- this should pass
Starting app in version 1.0.0
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
{"firstName":"b73f639f-e176-4463-bf26-1135aace2f57","lastName":"b73f639f-e176-4463-bf26-1135aace2f57"}
Starting app in version 2.0.0.BAD
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
curl: (22) The requested URL returned error: 500 Internal Server Error
Generate a person in version 2.0.0.BAD
Sending a post to 127.0.0.1:9995/person. This is the response:
{"firstName":"e156be2e-06b6-4730-9c43-6e14cfcda125","surname":"e156be2e-06b6-4730-9c43-6e14cfcda125"}ΠΡΠΎΠΌΠ΅Π½Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
Π‘ΠΊΡΠΈΠΏΡΠ° Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ ΠΊΠΎΡΠ° ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΡΠ΅ last_name Π² surname
ΠΠ·Π²ΠΎΡ Π€Π»ΠΈΠ²Π°ΠΈ ΡΠΊΡΠΈΠΏΡΠ°:
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');Π‘ΠΊΡΠΈΠΏΡΠ° ΠΊΠΎΡΠ° ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΡΠ΅ last_name.
-- This change is backward incompatible - you can't do A/B testing
ALTER TABLE PERSON CHANGE last_name surname VARCHAR;ΠΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ΄Π°
ΠΡΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠΌΠΎ Π½Π°Π·ΠΈΠ² ΠΏΠΎΡΠ° lastName Π½Π° surname.
ΠΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½Π΅ Π½Π° Π½Π°ΡΠΈΠ½ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π°Π½ ΡΠ½Π°Π·Π°Π΄
ΠΠ²ΠΎ ΡΠ΅ Π½Π°ΡΡΠ΅ΡΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΡΠ° ΠΊΠΎΡΠΎΠΌ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΡΡΡΠ΅ΡΡΠΈ. ΠΠΎΡΠ°ΠΌΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΡΠ½Π°Π·Π°Π΄ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅. ΠΠ΅Ρ ΡΠΌΠΎ Π΄ΠΎΠΊΠ°Π·Π°Π»ΠΈ Π΄Π° Π·Π° ΠΏΡΠΈΠΌΠ΅Π½Ρ Π±Π΅Π· Π·Π°ΡΡΠΎΡΠ° Π½Π΅ Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π±Π΅Π· Π΄ΠΎΠ΄Π°ΡΠ½ΠΈΡ ΠΊΠΎΡΠ°ΠΊΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΠΎΠ΄Π΅ΡΠΊΡ ΡΠ»Π°Π½ΠΊΠ°, ΠΈΠ·Π²ΡΡΠΈΡΠ΅ΠΌΠΎ 3 ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠ°ΠΌΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π΄Π° Π±ΠΈΡΠΌΠΎ ΠΏΠΎΡΡΠΈΠ³Π»ΠΈ ΠΆΠ΅ΡΠ΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ· ΠΎΠ΄ΡΠΆΠ°Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠΈ ΡΠ½Π°Π·Π°Π΄.
ΠΠ΅Π»Π΅ΡΠΊΠ°. ΠΠΎΠ΄ΡΠ΅ΡΠΈΠΌΠΎ ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΠΌΠ°
v1. Π‘Π°Π΄ΡΠΆΠΈ ΠΊΠΎΠ»ΠΎΠ½Π΅first_nameΠΈlast_name. ΠΠΎΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌΠΎlast_nameΠ½Π°surname. ΠΠΌΠ°ΠΌΠΎ ΠΈ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅1.0.0,ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠΎΡ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈsurname.
ΠΠΎΡΠ°ΠΊ 2: ΠΠΎΠ΄Π°ΡΡΠ΅ ΠΏΡΠ΅Π·ΠΈΠΌΠ΅
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅: 2.0.0
ΠΠ Π²Π΅ΡΠ·ΠΈΡΠ°: v2
ΠΠΎΠΌΠ΅Π½ΡΠ°Ρ
ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ΠΌ Π½ΠΎΠ²Π΅ ΠΊΠΎΠ»ΠΎΠ½Π΅ ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ΠΌ ΡΠ΅Π½ΠΎΠ³ ΡΠ°Π΄ΡΠΆΠ°ΡΠ°, ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠΎ Π½Π°Π·Π°Π΄ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°. Π£ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π°ΠΊΠΎ Π²ΡΠ°ΡΠΈΠΌΠΎ ΠΠΠ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΡΡΠ°ΡΠΈ ΠΠΠ , ΠΎΠ½ ΡΠ΅ Π½Π΅ΡΠ΅ ΠΏΠΎΠΊΠ²Π°ΡΠΈΡΠΈ ΡΠΎΠΊΠΎΠΌ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΠΌΠΎ Π½ΠΎΠ²Ρ Π²Π΅ΡΠ·ΠΈΡΡ
ΠΠΎΡΠ°ΡΠΈ:
- ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π΄Π° Π±ΠΈΡΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π»ΠΈ Π½ΠΎΠ²Ρ ΠΊΠΎΠ»ΠΎΠ½Ρ
surname. Π‘Π°Π΄Π° Π²Π°ΡΠ° ΠΠ Π²Π΅ΡΠ·ΠΈΡΠ°v2 - ΠΊΠΎΠΏΠΈΡΠ°Ρ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈΠ·
last_nameΠ²surname. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Π΄Π° Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ²ΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΈ! - Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ΄ Π³Π΄Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ ΠΠΠΠΠ ΠΈ Π½ΠΎΠ²ΠΈΠ ΡΡΠ°ΡΠΈ ΠΊΠΎΠ»ΠΎΠ½Π°. Π‘Π°Π΄Π° Π²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
2.0.0 - ΠΏΡΠΎΡΠΈΡΠ°ΡΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΈΠ· ΠΊΠΎΠ»ΠΎΠ½Π΅
surname, Π°ΠΊΠΎ Π½ΠΈΡΠ΅null, ΠΈΠ»ΠΈ ΠΎΠ΄ Π»ast_nameΠ°ΠΊΠΎsurnameΠ½ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π±ΡΠΈΡΠ°ΡΠΈgetLastName()ΠΈΠ· ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΡΠΎ ΡΠ΅ ΠΎΠ½ ΠΈΡΠΏΠΈΡΠ°ΡΠΈnullΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ Π²ΡΠ°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ°3.0.0Π΄ΠΎ2.0.0.
ΠΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ Π€Π»ΠΈΠ²Π°ΠΈ, ΠΎΠ²Π° Π΄Π²Π° ΠΊΠΎΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΡΠΈ ΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ΅ 2.0.0 Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠΊΠΎ ΡΡΡΠ½ΠΎ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ Π°Π»Π°ΡΠΊΡ Π·Π° ΠΎΠ΄ΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΌΠΎΡΠ°ΡΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°Π΄ΠΈΡΠ΅ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΡΡΠ²Π°ΡΠΈ Π΄Π° Π±ΠΈΡΡΠ΅ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ (ΠΏΡΠ²ΠΎ ΡΡΡΠ½ΠΎ Π°ΠΆΡΡΠΈΡΠ°ΡΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΡ Π΄Π±-Π°, Π° Π·Π°ΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π½ΠΎΠ²Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ).
ΠΠ°ΠΆΠ½ΠΎ ΡΠ΅. ΠΠ°ΠΏΠ°ΠΌΡΠΈΡΠ΅ Π΄Π° ΡΠ΅ Π½ΠΎΠ²ΠΎΡΡΠ²ΠΎΡΠ΅Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π° ΠΠ Π’Π ΠΠΠ Π±ΠΈΡΠΈ ΠΠΠ’ ΠΠ£ΠΠ. ΠΠΊΠΎ ΠΈΠ·Π²ΡΡΠΈΡΠ΅ Π²ΡΠ°ΡΠ°ΡΠ΅, ΡΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π΅ Π·Π½Π° Π·Π° Π½ΠΎΠ²Ρ ΠΊΠΎΠ»ΠΎΠ½Ρ ΠΈ Π½Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠΈ ΡΠΎΠΊΠΎΠΌ
Insert.ΠΠ»ΠΈ Π°ΠΊΠΎ Π΄ΠΎΠ΄Π°ΡΠ΅ ΠΎΠ²ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅ ΠΈ Π²Π°Ρ Π΄Π± ΡΠ΅ Π±ΠΈΡΠΈv2, ΠΎΠ²ΠΎ ΡΠ΅ Π·Π°Ρ ΡΠ΅Π²Π°ΡΠΈ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½ΠΎΠ²Π΅ ΠΊΠΎΠ»ΠΎΠ½Π΅. Π¨ΡΠΎ ΡΠ΅ Π΄ΠΎΠ²Π΅ΡΡΠΈ Π΄ΠΎ ΠΊΡΡΠ΅ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ°.ΠΠ°ΠΆΠ½ΠΎ ΡΠ΅. Π’ΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΡΠΊΠ»ΠΎΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄
getLastName(), ΡΠ΅Ρ Ρ Π²Π΅ΡΠ·ΠΈΡΠΈ3.0.0Π£ ΠΊΠΎΠ΄Ρ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ ΠΊΠΎΠ»ΠΎΠ½Π΅last_name. Π’ΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΡΠ΅ ΡΠ°ΠΌΠΎ Π±ΠΈΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ΅Π½Π° Π½ΡΠ»Π°. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ Π΄ΠΎΠ΄Π°ΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅ Π·Π°null, Π°Π»ΠΈ Π±ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅ Π±ΠΈΠ»ΠΎ Π΄Π° ΡΠ΅ Ρ ΡΠΎ ΡΠ²Π΅ΡΠΈΠΌΠΎ Ρ Π»ΠΎΠ³ΠΈΡΠΈgetSurname()ΠΈΠ·Π°Π±ΡΠ°Π»ΠΈ ΡΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π½Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΊΠΎΡΠ° Π½ΠΈΡΠ΅ Π½ΡΠ»Π°.
Π/Π ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅
Π’ΡΠ΅Π½ΡΡΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ 1.0.0, ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΎ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ, Π° Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Ρ v1. ΠΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π΄ΡΡΠ³Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ 2.0.0ΠΊΠΎΡΠΈ ΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°ΡΠΈ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π° v2.
ΠΠΎΡΠ°ΡΠΈ:
- ΠΏΡΠΈΠΌΠ΅ΡΡΡΠ΅ ΡΠ΅ Π½ΠΎΠ²Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅
2.0.0ΠΊΠΎΡΠΈ Π°ΠΆΡΡΠΈΡΠ° Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π°v2 - Ρ ΠΌΠ΅ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Ρ ΡΡ Π½Π΅ΠΊΠΈ Π·Π°Ρ
ΡΠ΅Π²ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈ ΠΎΠ΄ ΡΡΡΠ°Π½Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈ Π²Π΅ΡΠ·ΠΈΡΠ΅
1.0.0 - Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ Π±ΠΈΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ ΠΈΠΌΠ°ΡΠ΅ Π²ΠΈΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈΡ
ΠΈΠ½ΡΡΠ°Π½ΡΠΈ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
1.0.0ΠΈ Π΄ΡΡΠ³Π΅ Π²Π΅ΡΠ·ΠΈΡΠ΅2.0.0.Π‘Π²ΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°ΡΡ ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Ρv2 - Π²Π΅ΡΠ·ΠΈΡΠ°
1.0.0Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠ»ΠΎΠ½Ρ ΠΏΡΠ΅Π·ΠΈΠΌΠ΅Π½Π° Ρ Π±Π°Π·ΠΈ, Π²Π΅Ρ Π²Π΅ΡΠ·ΠΈΡΡ2.0.0ΠΊΠΎΡΠΈΡΡΠΈ. ΠΠ½ΠΈ ΡΠ΅ Π½Π΅ ΠΌΠ΅ΡΠ°ΡΡ ΡΠ΅Π΄Π½ΠΈ Ρ Π΄ΡΡΠ³Π΅ ΠΈ Π½Π΅ Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡΠ΄Π΅ Π³ΡΠ΅ΡΠ°ΠΊΠ°. - Π²Π΅ΡΠ·ΠΈΡΠ°
2.0.0ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈ Ρ ΡΡΠ°ΡΠΎΡ ΠΈ Ρ Π½ΠΎΠ²ΠΎΡ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΡΡΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠ½Π°Π·Π°Π΄
ΠΠ°ΠΆΠ½ΠΎ ΡΠ΅. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΡΠΏΠΈΡΠ΅ ΠΊΠΎΡΠΈ Π±ΡΠΎΡΠ΅ ΡΡΠ°Π²ΠΊΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈΠ· ΡΡΠ°ΡΠ΅/Π½ΠΎΠ²Π΅ ΠΊΠΎΠ»ΠΎΠ½Π΅, ΡΡΠ΅Π±Π° Π΄Π° Π·Π°ΠΏΠ°ΠΌΡΠΈΡΠ΅ Π΄Π° ΡΠ°Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π΄ΡΠΏΠ»ΠΈΡΠ°Π½Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ (Π½Π°ΡΠ²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ ΡΠΎΡ ΡΠ²Π΅ΠΊ ΠΌΠΈΠ³ΡΠΈΡΠ°ΡΡ). ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΆΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΠΏΡΠ΅Π±ΡΠΎΡΠΈΡΠ΅ Π±ΡΠΎΡ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° ΡΠΈΡΠ΅ ΠΏΡΠ΅Π·ΠΈΠΌΠ΅ (ΠΊΠ°ΠΊΠΎ Π³ΠΎΠ΄ Π΄Π° ΡΠ΅ Π·ΠΎΠ²Π΅ ΠΊΠΎΠ»ΠΎΠ½Π°) ΠΏΠΎΡΠΈΡΠ΅ ΡΠ»ΠΎΠ²ΠΎΠΌ
A, Π·Π°ΡΠΈΠΌ Π΄ΠΎΠΊ ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π΅ Π·Π°Π²ΡΡΠΈ (oldβnewΠΊΠΎΠ»ΠΎΠ½Π°) ΠΌΠΎΠΆΠ΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½Π΅Π΄ΠΎΡΠ»Π΅Π΄Π½Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Π°ΠΊΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ ΡΠΏΠΈΡ Π·Π° Π½ΠΎΠ²Ρ ΠΊΠΎΠ»ΠΎΠ½Ρ.
ΠΡΠ°ΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
Π‘Π°Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ 2.0.0 ΠΈ Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Ρ v2.
ΠΠΎΡΠ°ΡΠΈ:
- Π²ΡΠ°ΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π½Π° Π²Π΅ΡΠ·ΠΈΡΡ
1.0.0. - Π²Π΅ΡΠ·ΠΈΡΠ°
1.0.0Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠ»ΠΎΠ½Ρ Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°surname, ΡΠ°ΠΊΠΎ Π΄Π° Π±ΠΈ Π²ΡΠ°ΡΠ°ΡΠ΅ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ
ΠΠ ΠΏΡΠΎΠΌΠ΅Π½Π΅
ΠΠ°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ°Π΄ΡΠΆΠΈ ΠΊΠΎΠ»ΠΎΠ½Ρ ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ last_name.
ΠΠ·Π²ΠΎΡΠ½Π° ΡΠΊΡΠΈΠΏΡΠ° Π€Π»ΠΈΠ²Π°ΠΈ:
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null
);
insert into PERSON (first_name, last_name) values ('Dave', 'Syer');ΠΠΎΠ΄Π°ΡΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ surname.
ΠΠ°ΠΆΡΠ°. ΠΠ°ΠΏΠ°ΠΌΡΠΈΡΠ΅ Π΄Π° ΠΠ ΠΠΠΠΠ’Π ΠΠΠΠΠ’Π Π½ΠΈΠΊΠ°ΠΊΠ²Π° ΠΠΠ’ ΠΠ£ΠΠ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° Ρ ΠΊΠΎΠ»ΠΎΠ½Ρ ΠΊΠΎΡΡ Π΄ΠΎΠ΄Π°ΡΠ΅ΡΠ΅. ΠΠΊΠΎ Π²ΡΠ°ΡΠΈΡΠ΅ ΠΠΠ , ΡΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π΅ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΠΏΠΎΡΠΌΠ° ΠΎ Π΄ΠΎΠ΄Π°ΡΠΎΡ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠΈ Π½Π° ΠΠ£ΠΠ. ΠΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΊΠ²ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅, ΡΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΠΎΠΊΠ²Π°ΡΠΈΡΠΈ.
-- NOTE: This field can't have the NOT NULL constraint cause if you rollback, the old version won't know about this field
-- and will always set it to NULL
ALTER TABLE PERSON ADD surname varchar(255);
-- WE'RE ASSUMING THAT IT'S A FAST MIGRATION - OTHERWISE WE WOULD HAVE TO MIGRATE IN BATCHES
UPDATE PERSON SET PERSON.surname = PERSON.last_nameΠΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ΄Π°
ΠΠΎΠ΄Π°ΡΠΊΠ΅ ΡΡΠ²Π°ΠΌΠΎ ΠΊΠ°ΠΎ last_name, ΠΈ ΠΈΠ½ surname. Π£ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠΈΡΠ°ΠΌΠΎ ΠΈΠ· last_name, ΠΏΠΎΡΡΠΎ ΡΠ΅ ΠΎΠ²Π° ΠΊΠΎΠ»ΠΎΠ½Π° Π½Π°ΡΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈΡΠ°. Π’ΠΎΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, Π½Π΅ΠΊΠΈ Π·Π°Ρ
ΡΠ΅Π²ΠΈ ΡΡ ΠΌΠΎΠΆΠ΄Π° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈ ΠΎΠ΄ ΡΡΡΠ°Π½Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ° ΡΠΎΡ Π½ΠΈΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°Π½Π°.
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.flyway;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private String surname;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* Reading from the new column if it's set. If not the from the old one.
*
* When migrating from version 1.0.0 -> 2.0.0 this can lead to a possibility that some data in
* the surname column is not up to date (during the migration process lastName could have been updated).
* In this case one can run yet another migration script after all applications have been deployed in the
* new version to ensure that the surname field is updated.
*
* However it makes sense since when looking at the migration from 2.0.0 -> 3.0.0. In 3.0.0 we no longer
* have a notion of lastName at all - so we don't update that column. If we rollback from 3.0.0 -> 2.0.0 if we
* would be reading from lastName, then we would have very old data (since not a single datum was inserted
* to lastName in version 3.0.0).
*/
public String getSurname() {
return this.surname != null ? this.surname : this.lastName;
}
/**
* Storing both FIRST_NAME and SURNAME entries
*/
public void setSurname(String surname) {
this.lastName = surname;
this.surname = surname;
}
@Override
public String toString() {
return "Person [firstName=" + this.firstName + ", lastName=" + this.lastName + ", surname=" + this.surname
+ "]";
}
}ΠΠΎΡΠ°ΠΊ 3: Π£ΠΊΠ»Π°ΡΠ°ΡΠ΅ ΠΏΡΠ΅Π·ΠΈΠΌΠ΅Π½Π° ΠΈΠ· ΠΊΠΎΠ΄Π°
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅: 3.0.0
ΠΠ Π²Π΅ΡΠ·ΠΈΡΠ°:v3
ΠΠΎΠΌΠ΅Π½ΡΠ°Ρ
ΠΠ΅Π»Π΅ΡΠΊΠ° ΠΏΠ΅Ρ.: ΠΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ ΡΠ΅ Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ Π°ΡΡΠΎΡ Π³ΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠΏΠΈΡΠ°ΠΎ ΡΠ΅ΠΊΡΡ ΠΎΠ²ΠΎΠ³ Π±Π»ΠΎΠΊΠ° ΠΈΠ· ΠΊΠΎΡΠ°ΠΊΠ° 2. Π£ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΡΡΠ΅Π±Π° ΠΈΠ·Π²ΡΡΠΈΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅ Ρ ΠΊΠΎΠ΄Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ° ΡΠΈΡΠ΅ΠΌ Π΄Π° ΡΠ΅ ΡΠΊΠ»ΠΎΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΠΊΠΎΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠ»ΠΎΠ½Ρ last_name.
ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ΠΌ Π½ΠΎΠ²Π΅ ΠΊΠΎΠ»ΠΎΠ½Π΅ ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ΠΌ ΡΠ΅Π½ΠΎΠ³ ΡΠ°Π΄ΡΠΆΠ°ΡΠ°, Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ ΡΠ½Π°Π·Π°Π΄ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°. Π’Π°ΠΊΠΎΡΠ΅, Π°ΠΊΠΎ Π²ΡΠ°ΡΠΈΠΌΠΎ ΠΠΠ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΡΡΠ°ΡΠΈ ΠΠΠ , ΠΎΠ½ ΡΠ΅ Π½Π΅ΡΠ΅ ΠΏΠΎΠΊΠ²Π°ΡΠΈΡΠΈ ΡΠΎΠΊΠΎΠΌ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°.
ΠΡΠ°ΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
Π’ΡΠ΅Π½ΡΡΠ½ΠΎ ΠΈΠΌΠ°ΠΌΠΎ Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ 3.0.0 ΠΈ Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° v3. ΠΠ΅ΡΠ·ΠΈΡΠ° 3.0.0 Π½Π΅ ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ last_name. Π’ΠΎ Π·Π½Π°ΡΠΈ Π΄Π° Ρ surname ΡΡΠ²Π°ΡΡ ΡΠ΅ Π½Π°ΡΠ°ΠΆΡΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅.
ΠΠΎΡΠ°ΡΠΈ:
- Π²ΡΠ°ΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π½Π° Π²Π΅ΡΠ·ΠΈΡΡ
2.0.0. - Π²Π΅ΡΠ·ΠΈΡΠ°
2.0.0ΠΊΠΎΡΠΈΡΡΠΈ ΠΈlast_nameΠΈsurname. - Π²Π΅ΡΠ·ΠΈΡΠ°
2.0.0ΠΎΠ΄ΡΠΆΠ°ΡΠ΅surname, Π°ΠΊΠΎ Π½ΠΈΡΠ΅ Π½ΡΠ»Π°, ΠΈΠ½Π°ΡΠ΅ -last_name
ΠΡΠΎΠΌΠ΅Π½Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
Π£ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π΅ΠΌΠ° ΡΡΡΡΠΊΡΡΡΠ½ΠΈΡ ΠΏΡΠΎΠΌΠ΅Π½Π°. Π‘Π»Π΅Π΄Π΅ΡΠ° ΡΠΊΡΠΈΠΏΡΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΠ°Π²Π° Π΄Π° Π±ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΠ»Π° ΠΊΠΎΠ½Π°ΡΠ½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠ° ΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°:
-- WE'RE ASSUMING THAT IT'S A FAST MIGRATION - OTHERWISE WE WOULD HAVE TO MIGRATE IN BATCHES
-- ALSO WE'RE NOT CHECKING IF WE'RE NOT OVERRIDING EXISTING ENTRIES. WE WOULD HAVE TO COMPARE
-- ENTRY VERSIONS TO ENSURE THAT IF THERE IS ALREADY AN ENTRY WITH A HIGHER VERSION NUMBER
-- WE WILL NOT OVERRIDE IT.
UPDATE PERSON SET PERSON.surname = PERSON.last_name;
-- DROPPING THE NOT NULL CONSTRAINT; OTHERWISE YOU WILL TRY TO INSERT NULL VALUE OF THE LAST_NAME
-- WITH A NOT_NULL CONSTRAINT.
ALTER TABLE PERSON MODIFY COLUMN last_name varchar(255) NULL DEFAULT NULL;ΠΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ΄Π°
ΠΠ΅Π»Π΅ΡΠΊΠ° ΠΏΠ΅Ρ.: ΠΠΏΠΈΡ ΠΎΠ²ΠΎΠ³ Π±Π»ΠΎΠΊΠ° ΡΠ΅ ΡΠ°ΠΊΠΎΡΠ΅ Π³ΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠΏΠΈΡΠ°ΠΎ Π°ΡΡΠΎΡ ΠΈΠ· ΠΊΠΎΡΠ°ΠΊΠ° 2. Π£ ΡΠΊΠ»Π°Π΄Ρ ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠΎΠΌ ΡΠ»Π°Π½ΠΊΠ°, ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ ΠΊΠΎΠ΄Ρ Ρ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠΌΠ°ΡΡ Π·Π° ΡΠΈΡ Π΄Π° ΠΈΠ· ΡΠ΅Π³Π° ΡΠΊΠ»ΠΎΠ½Π΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΡΠΈ ΡΠ°Π΄Π΅ ΡΠ° ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΌ last_name.
ΠΠΎΠ΄Π°ΡΠΊΠ΅ ΡΡΠ²Π°ΠΌΠΎ ΠΊΠ°ΠΎ last_name, ΠΈ ΠΈΠ½ surname. ΠΠΎΡΠ΅Π΄ ΡΠΎΠ³Π°, ΡΠΈΡΠ°ΠΌΠΎ ΠΈΠ· ΠΊΠΎΠ»ΡΠΌΠ½Π΅ last_name, ΠΏΠΎΡΡΠΎ ΡΠ΅ Π½Π°ΡΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈΡΠΈ. Π’ΠΎΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, Π½Π΅ΠΊΠ΅ Π·Π°Ρ
ΡΠ΅Π²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π΄ΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΊΠΎΡΠ° ΡΠΎΡ ΡΠ²Π΅ΠΊ Π½ΠΈΡΠ΅ Π½Π°Π΄ΠΎΠ³ΡΠ°ΡΠ΅Π½Π°.
/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.flyway;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String surname;
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSurname() {
return this.surname;
}
public void setSurname(String lastname) {
this.surname = lastname;
}
@Override
public String toString() {
return "Person [firstName=" + this.firstName + ", surname=" + this.surname
+ "]";
}
}ΠΠΎΡΠ°ΠΊ 4: Π£ΠΊΠ»Π°ΡΠ°ΡΠ΅ ΠΏΡΠ΅Π·ΠΈΠΌΠ΅Π½Π° ΠΈΠ· Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°
ΠΠ΅ΡΠ·ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅: 4.0.0
ΠΠ Π²Π΅ΡΠ·ΠΈΡΠ°: v4
ΠΠΎΠΌΠ΅Π½ΡΠ°Ρ
ΠΠ±ΠΎΠ³ ΡΠΈΡΠ΅Π½ΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ΅ 3.0.0 Π½ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΎ ΠΊΠΎΠ»ΠΎΠ½Ρ last_name, Π½ΠΈΡΡΠ° Π»ΠΎΡΠ΅ ΡΠ΅ Π½Π΅ΡΠ΅ Π΄ΠΎΠ³ΠΎΠ΄ΠΈΡΠΈ ΡΠΎΠΊΠΎΠΌ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° Π°ΠΊΠΎ ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠΎ Π½Π° 3.0.0 Π½Π°ΠΊΠΎΠ½ ΡΠΊΠ»Π°ΡΠ°ΡΠ° ΠΊΠΎΠ»ΠΎΠ½Π΅ ΠΈΠ· Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠ½Π΅Π²Π½ΠΈΡΠΈ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ΅
We will do it in the following way:
01) Run 1.0.0
02) Wait for the app (1.0.0) to boot
03) Generate a person by calling POST localhost:9991/person to version 1.0.0
04) Run 2.0.0
05) Wait for the app (2.0.0) to boot
06) Generate a person by calling POST localhost:9991/person to version 1.0.0
07) Generate a person by calling POST localhost:9992/person to version 2.0.0
08) Kill app (1.0.0)
09) Run 3.0.0
10) Wait for the app (3.0.0) to boot
11) Generate a person by calling POST localhost:9992/person to version 2.0.0
12) Generate a person by calling POST localhost:9993/person to version 3.0.0
13) Kill app (3.0.0)
14) Run 4.0.0
15) Wait for the app (4.0.0) to boot
16) Generate a person by calling POST localhost:9993/person to version 3.0.0
17) Generate a person by calling POST localhost:9994/person to version 4.0.0
Starting app in version 1.0.0
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
{"firstName":"52b6e125-4a5c-429b-a47a-ef18bbc639d2","lastName":"52b6e125-4a5c-429b-a47a-ef18bbc639d2"}
Starting app in version 2.0.0
Generate a person in version 1.0.0
Sending a post to 127.0.0.1:9991/person. This is the response:
{"firstName":"e41ee756-4fa7-4737-b832-e28827a00deb","lastName":"e41ee756-4fa7-4737-b832-e28827a00deb"}
Generate a person in version 2.0.0
Sending a post to 127.0.0.1:9992/person. This is the response:
{"firstName":"0c1240f5-649a-4bc5-8aa9-cff855f3927f","lastName":"0c1240f5-649a-4bc5-8aa9-cff855f3927f","surname":"0c1240f5-649a-4bc5-8aa9-cff855f3927f"}
Killing app 1.0.0
Starting app in version 3.0.0
Generate a person in version 2.0.0
Sending a post to 127.0.0.1:9992/person. This is the response:
{"firstName":"74d84a9e-5f44-43b8-907c-148c6d26a71b","lastName":"74d84a9e-5f44-43b8-907c-148c6d26a71b","surname":"74d84a9e-5f44-43b8-907c-148c6d26a71b"}
Generate a person in version 3.0.0
Sending a post to 127.0.0.1:9993/person. This is the response:
{"firstName":"c6564dbe-9ab5-40ae-9077-8ae6668d5862","surname":"c6564dbe-9ab5-40ae-9077-8ae6668d5862"}
Killing app 2.0.0
Starting app in version 4.0.0
Generate a person in version 3.0.0
Sending a post to 127.0.0.1:9993/person. This is the response:
{"firstName":"cbe942fc-832e-45e9-a838-0fae25c10a51","surname":"cbe942fc-832e-45e9-a838-0fae25c10a51"}
Generate a person in version 4.0.0
Sending a post to 127.0.0.1:9994/person. This is the response:
{"firstName":"ff6857ce-9c41-413a-863e-358e2719bf88","surname":"ff6857ce-9c41-413a-863e-358e2719bf88"}ΠΠ ΠΏΡΠΎΠΌΠ΅Π½Π΅
Π Π΅Π»Π°ΡΠΈΠ²Π½ΠΎ v3 ΡΠ°ΠΌΠΎ ΡΠΊΠ»Π°ΡΠ°ΠΌΠΎ ΠΊΠΎΠ»ΠΎΠ½Ρ last_name ΠΈ Π΄ΠΎΠ΄Π°ΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° ΠΊΠΎΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡ.
-- REMOVE THE COLUMN
ALTER TABLE PERSON DROP last_name;
-- ADD CONSTRAINTS
UPDATE PERSON SET surname='' WHERE surname IS NULL;
ALTER TABLE PERSON ALTER COLUMN surname VARCHAR NOT NULL;ΠΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ΄Π°
ΠΠ΅ΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½Π° Ρ ΠΊΠΎΠ΄Ρ.
ΠΠ·Π»Π°Π·
Π£ΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½Π°Π·ΠΈΠ²Π° ΠΊΠΎΠ»ΠΎΠ½Π΅ ΠΊΠΎΡΠ° Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π° ΡΠ° ΡΠ½Π°Π·Π°Π΄ ΡΠ°ΠΊΠΎ ΡΡΠΎ ΡΠΌΠΎ ΠΈΠ·Π²ΡΡΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈΡ ΡΠ° ΡΠ½Π°Π·Π°Π΄. ΠΡΠΏΠΎΠ΄ ΡΠ΅ ΡΠ΅Π·ΠΈΠΌΠ΅ ΠΈΠ·Π²ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π΄ΡΠΈ:
- ΠΏΡΠΈΠΌΠ΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
1.0.0Ρv1ΡΠ΅ΠΌΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° (ΠΈΠΌΠ΅ ΠΊΠΎΠ»ΠΎΠ½Π΅ =last_name) - ΠΏΡΠΈΠΌΠ΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
2.0.0,ΠΊΠΎΡΠΈ ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρlast_nameΠΈsurname. ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠΈΡΠ° ΠΎΠ΄last_name. ΠΠ°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ Ρ Π²Π΅ΡΠ·ΠΈΡΠΈv2ΠΊΠΎΡΠΈ ΡΠ°Π΄ΡΠΆΠ΅ ΠΊΠΎΠ»ΠΎΠ½Π΅ ΠΏΠΎΠΏΡΡlast_nameΠsurname. surnameΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ° Π»ast_name. (ΠΠΠΠΠΠΠΠ: ΠΠ²Π° ΠΊΠΎΠ»ΠΎΠ½Π° Π½Π΅ ΡΠΌΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅ Π½ΠΈΡΠ΅ Π½ΡΠ»ΡΠΎ) - ΠΏΡΠΈΠΌΠ΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
3.0.0, ΠΊΠΎΡΠΈ ΡΠ°ΠΌΠΎ ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΡsurnameΠ° Π³Π»Π°ΡΠΈ ΠΈΠ· ΠΏΡΠ΅Π·ΠΈΠΌΠ΅Π½Π°. Π¨ΡΠΎ ΡΠ΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠΈΡΠ΅, ΠΏΠΎΡΠ»Π΅Π΄ΡΠ° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠ° ΡΠ΅ Ρ ΡΠΎΠΊΡlast_nameΠ²surname. Π’Π°ΠΊΠΎΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅ ΠΠΠ’ ΠΠ£ΠΠ ΡΠΊΠ»ΠΎΡΠ΅Π½Π° ΠΈΠ·last_name. ΠΠ°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°Π΄Π° Ρ Π²Π΅ΡΠ·ΠΈΡΠΈv3 - ΠΏΡΠΈΠΌΠ΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
4.0.0- Π½Π΅ΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½Π° Ρ ΠΊΠΎΠ΄Ρ. ΠΡΠΈΠΌΠ΅Π½Π° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°v4, ΠΊΠΎΡΠΈ ΡΠΊΠ»Π°ΡΠ°last_name. ΠΠ²Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠΈ ΡΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° ΠΊΠΎΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡ Ρ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΡΠ°ΡΠ΅ΡΠΈ ΠΎΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ, ΡΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΡΠ°ΡΠΈΡΠ΅ ΡΠ΅Π΄Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΡΠ½Π°Π·Π°Π΄ Π±Π΅Π· Π½Π°ΡΡΡΠ°Π²Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠΈ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°/Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
ΠΠΎΠ΄
Π‘Π°Π² ΠΊΠΎΠ΄ ΠΊΠΎΡΠΈΡΡΠ΅Π½ Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ Π΄ΠΎΡΡΡΠΏΠ°Π½ ΡΠ΅ Π½Π° . ΠΡΠΏΠΎΠ΄ ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠ½ΠΈ ΠΎΠΏΠΈΡ.
ΠΡΠΎΡΠ΅ΠΊΡΠΈ
ΠΠ°ΠΊΠΎΠ½ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΠ° ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ°, Π²ΠΈΠ΄Π΅ΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΡΡΠΈΠΊΠ»ΠΈ.
βββ boot-flyway-v1 - 1.0.0 version of the app with v1 of the schema
βββ boot-flyway-v2 - 2.0.0 version of the app with v2 of the schema (backward-compatible - app can be rolled back)
βββ boot-flyway-v2-bad - 2.0.0.BAD version of the app with v2bad of the schema (backward-incompatible - app cannot be rolled back)
βββ boot-flyway-v3 - 3.0.0 version of the app with v3 of the schema (app can be rolled back)
βββ boot-flyway-v4 - 4.0.0 version of the app with v4 of the schema (app can be rolled back)Π‘ΠΊΡΠΈΠΏΡΠ΅
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΠΊΡΠΈΠΏΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π΅ Ρ ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠ° Ρ Π½Π°ΡΡΠ°Π²ΠΊΡ, ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΈ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠ° Π±ΠΈΡΡΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ»ΡΡΠ°Ρ ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π°ΠΌΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈΠΌ ΡΠ° ΡΠ½Π°Π·Π°Π΄, ΡΡΡΠ°ΡΠΈ:
./scripts/scenario_backward_compatible.shΠ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»ΡΡΠ°Ρ ΡΠ° Π½Π°Π·Π°Π΄ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½Π°ΠΌΠ°, ΡΡΡΠ°ΡΠΈ:
./scripts/scenario_backward_incompatible.shΠΡΠΎΠ»Π΅ΡΠ½ΠΈ ΡΠ·ΠΎΡΠ°ΠΊ Π·Π° ΠΏΡΠΎΠ»Π΅ΡΠ΅
Π‘Π²ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΡ ΠΏΡΠ΅ΡΠ·Π΅ΡΠΈ ΠΈΠ· Spring Boot Sample Flyway.
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΈ http://localhost:8080/flyway, ΠΏΠΎΡΡΠΎΡΠΈ Π»ΠΈΡΡΠ° ΡΠΊΡΠΈΠΏΡΠΈ.
ΠΠ²Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΡΠ΅ ΡΠΊΡΡΡΡΡΠ΅ ΠΊΠΎΠ½Π·ΠΎΠ»Ρ Π₯2 (Π½Π° http://localhost:8080/h2-console) ΡΠ°ΠΊΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠ°ΡΡΡ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° (ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π° ΡΠ΄Π±Ρ Π£Π Π Π°Π΄ΡΠ΅ΡΠ° ΡΠ΅ jdbc:h2:mem:testdb).
Π΄ΠΎΠ΄Π°ΡΠ½ΠΎ
ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΈ Π΄ΡΡΠ³Π΅ ΡΠ»Π°Π½ΠΊΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Ρ:
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ
