рд▓рд┐рд▓реАрдмреЗрд╕ рдХреЗ рд╕рд╛рде рдбрд╛рдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореИрдиреЗрдЬрдореЗрдВрдЯ

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рд╣рдордиреЗ рдЕрдкрдиреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд▓рд┐рдХреНрд╡рд┐рдб рд╕реНрдХреАрдорд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдХреЛ рдирдП рдФрд░ рдореМрдЬреВрджрд╛ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред Liquibase рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА, VCS, (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Git) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡реАрд╕реАрдПрд╕ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рдПрдХ рд╕рдВрд╢реЛрдзрди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдХрд╛рд░реНрдп рд▓рдЧрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рддрдм рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╕реНрдХреАрдорд╛ рдореЗрдВ рд╣реБрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдбреАрдбреАрдПрд▓ рд╕реНрдХреАрдорд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд┐рд▓реАрдмреЗрд╕ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЪрд▓реЛ рд╕рд░рд▓ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рд┐рдХреНрд╡рд┐рдбрдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЪрд▓рд╛рдКрдВрдЧрд╛, рд╕рд╛рде рд╣реА MySQL рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реАрдПрд▓рдЖрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рднреАред
рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рднреА рдорд╛рд╡реЗрди (рдПрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ) рдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ (рдПрдХ рдмреАрди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрдн рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЪрд▓рддрд╛ рд╣реИ)ред

рдЖрдЗрдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ PERSON рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ ID (рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА) рдФрд░ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

mysql> describe Person; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | UNI | NULL | | +-------+--------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) 


рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдбреАрдбреАрдПрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд "рдмрджрд▓рд╛рд╡" (рдмрджрд▓рд╛рд╡ - рдПрдХ рд╕реЗрдЯ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди), рдПрдХреНрд╕рдПрдордПрд▓-рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдЪреЗрдВрдЧрд▓реЙрдЧ рдлрд╛рдЗрд▓реЗрдВ рд░рдЪрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрдХ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ (рдЯреИрдЧ "createTable") рдФрд░ рджреЛ рдХреЙрд▓рдо (рдЯреИрдЧ "рдХреЙрд▓рдо") рдмрдирд╛рдПрдЧрд╛ред

 <databasechangelog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"> <changeset id="1" author="mueller@synyx.de" runonchange="true"> <createtable tablename="Person"> <column autoincrement="true" name="id" type="BIGINT"> <constraints nullable="false" primarykey="true"> </constraints> </column> <column name="name" type="VARCHAR(255)"> <constraints nullable="false"> </constraints> </column> </createtable> </changeset> </databasechangelog> 


рдЗрд╕ XML рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдПрдХ "рд╡реНрдпрдХреНрддрд┐" рддрд╛рд▓рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдЧрд╛ред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрдорд╛рдВрдб "рдЕрдкрдбреЗрдЯ" рд╣реИ:

 ./liquibase --url=jdbc:mysql://localhost:3306/liquiblog --driver=com.mysql.jdbc.Driver --username=root --password="" --changeLogFile=db.changelog-0.1.0.xml update 


рд▓рд┐рдХреЗрдмреЗрдЬ рдиреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдВрдЬрд┐рдкреНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, createTableред рдпрджрд┐ рд╣рдо "рдЕрдкрдбреЗрдЯ" рдХреЗ рдмрдЬрд╛рдп "рд▓рд╛рдЗрдирдмреИрдХрдХрд╛рдЙрдВрдЯ 1" рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдХрд┐рдмреЗрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрдХ рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: PERSON рддрд╛рд▓рд┐рдХрд╛ рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред

рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдВрдЬрд░ рд╕реЗрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, PERSON ("рдЗрдиреНрд╕рд░реНрдЯ" рдЯреИрдЧ) рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 <databasechangelog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"> <changeset id="init-1" author="mueller@synyx.de"> <insert tablename="Person"> <column name="name" value="John Doe"> </column> </insert> <rollback> DELETE FROM Person WHERE name LIKE 'John Doe'; </rollback> </changeset> </databasechangelog> 


рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ "рд░реЛрд▓рдмреИрдХ" рдЯреИрдЧ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЯреИрдЧ рдореЗрдВ SQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдФрд░ рд░реЗрдЧреБрд▓рд░ рд▓рд┐рд▓реАрдмреЗрд╕ рдЯреИрдЧ рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ XML рдЪреЗрдВрдЧрд▓реЙрдЧ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдореИрдВрдиреЗ рдПрдХ "рдореБрдЦреНрдп" рдлрд╛рдЗрд▓ рдмрдирд╛рдИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╣реА рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рдо рдореЗрдВ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ:

 <databasechangelog xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd"> <include file="db.changelog-0.1.0.xml"></include> <include file="db.changelog-0.1.0.init.xml"></include> </databasechangelog> 


рдЬрдм рдЪреЗрдВрдЬрд░ рд╕реЗрдЯ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП "рдЕрдкрдбреЗрдЯ" рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд░реНрдХрд┐рдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрдХ рдХреЛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдбреИрдЯрд╛рдмреЗрд╕реИрдиреНрдЪреЗрдВрдЬрд▓реЙрдЧреНрд╕ рд╕рд╣рд╛рдпрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЪреЗрдВрдЬрдЧреЗрдЯреНрд╕, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рд╣реИрд╢ рдорд╛рди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрджрд▓ рдЪреБрдХреЗ рдЪреЗрдВрдЬрд╕реЗрдЯ рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рди рд╣реЛред

 mysql> select id, md5sum, description from DATABASECHANGELOG; +--------+------------------------------------+--------------+ | id | md5sum | description | +--------+------------------------------------+--------------+ | 1 | 3:5a36f447e90b35c3802cb6fe16cb12a7 | Create Table | | init-1 | 3:43c29e0011ebfcfd9cfbbb8450179a41 | Insert Row | +--------+------------------------------------+--------------+ 2 rows in set (0.00 sec) 


рдЕрдм рдЬрдмрдХрд┐ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдХрд╛рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: рд╕реНрдХреАрдорд╛ рдХреЛ рдмрджрд▓рдирд╛, рдЬрд┐рд╕реЗ рд╕реНрдХреАрдорд╛ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред PERSON рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ NAME рдирд╛рдо рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓рдо рд╣реИ, рдФрд░ рдореИрдВ NAME рдХреЛ рджреЛ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - FIRSTNAME рдФрд░ LASTNAMEред рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ "рдЯреИрдЧ" рдбрд╛рд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдЯреИрдЧ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХреВрдВ:

 ./liquibase --url=jdbc:mysql://localhost:3306/liquiblog --driver=com.mysql.jdbc.Driver --username=root --password="" --changeLogFile=changelog-master.xml tag liquiblog_0_1_0 


рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдХ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рджреЛ рдирдП рдХреЙрд▓рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

 <changeset id="1" author="mueller@synyx.de" runonchange="true"> <addcolumn tablename="Person"> <column name="firstname" type="VARCHAR(255)"> <constraints nullable="false"> </constraints> </column> <column name="lastname" type="VARCHAR(255)"> <constraints nullable="false"> </constraints> </column> </addcolumn> </changeset> 


рдФрд░ рдЗрд╕ рдмрд╛рд░, рд▓рд┐рд▓реАрдмреЗрд╕ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪреЗрдВрдЬрд╕реЗрдЯ рдХреЛ рдХреИрд╕реЗ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо "рд░реЛрд▓рдмреИрдХ" рдЯреИрдЧ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред

рдЕрдм, PERSON рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдо рд╣реИрдВ, рдФрд░ рдЕрдкреНрд░рдЪрд▓рд┐рдд NAME рдХреЙрд▓рдо рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдирдП рд╕реНрдХреАрдорд╛ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рд▓рд┐рдХреНрд╡рд┐рдбрдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╣реЗрд░рдлреЗрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЪреЗрдВрдЬрд░ рдореЗрдВ рджреЗрд╢реА рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

 <changeset author="mueller@synyx.de" id="2"> <sql> UPDATE Person SET firstname = SUBSTRING_INDEX(name, ' ', 1); UPDATE Person SET lastname = SUBSTRING_INDEX(name, ' ', -1); </sql> <rollback> UPDATE Person SET firstname = ''; UPDATE Person SET lastname = ''; </rollback> </changeset> 


рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "рд░реЛрд▓рдмреИрдХ" рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд┐рд░рд░реНрдердХ рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЯреИрдЧ рд╕реНрд╡рдпрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдХрд░рд┐рдм рдХреЗрд╡рд▓ рдмреИрдХ рдЪреЗрдВрдЬрд░реНрд╕ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдХреЛ "рдЕрдкрдбреЗрдЯ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдХ рдпреЛрдЬрдирд╛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ: рдирд┐рд░реНрдорд┐рдд рдХреЙрд▓рдо FIRSTNAME рдФрд░ LASTNAME рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдореИрдВ рдкреБрд░рд╛рдиреЗ NAME рдХреЙрд▓рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

 <changeset id="3" author="mueller@synyx.de" runonchange="true"> <dropcolumn tablename="Person" columnname="name"> </dropcolumn> <rollback> <addcolumn tablename="Person"> <column name="name" type="VARCHAR(255)"> <constraints nullable="false"> </constraints> </column> </addcolumn> <sql> UPDATE Person SET name = CONCAT(firstname, CONCAT(' ', lastname)); </sql> </rollback> </changeset> 


рдЪреЗрдВрдЬрд░ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рд▓реАрдмреЗрд╕ рдХреЙрд▓рдо рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реЛрд▓рдмреИрдХ рдЯреИрдЧ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ:
  1. рдореИрдВ рдорд╛рдирдХ рдЯреИрдЧ "addColumn" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд░рд╛рдиреЗ рдХреЙрд▓рдо NAME рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ
  2. рдореИрдВ рдЗрд╕ рдХреЙрд▓рдо рдореЗрдВ рдбреЗрдЯрд╛ рд░рд┐рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ


рдкрд░рд┐рд╡рд░реНрддрди рдкрд░рд┐рдгрд╛рдо:

 mysql> select * from Person; +----+-----------+------------+ | id | firstname | lastname | +----+-----------+------------+ | 1 | John | Doe | +----+-----------+------------+ 1 rows in set (0.00 sec) 


рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдордиреЗ рд╢реБрд░реВ рдореЗрдВ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдХреАрдорд╛ рдХреЛ рдЯреИрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рд╣рдорд╛рд░реЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдХ рд╕реЗрдЯреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рднреА рдЬреЛрдбрд╝реЗ, рд╣рдо рдбреЗрдЯрд╛ рдЦреЛрдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ ...

 ./liquibase --url=jdbc:mysql://localhost:3306/liquiblog --driver=com.mysql.jdbc.Driver --username=root --password="" --changeLogFile=changelog-master.xml rollback liquiblog_0_1_0 


... рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ!

PERSON рдирд╛рдо рдХреЗ рддрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд / рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рд╣рдж рддрдХ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдореМрдЬреВрджрд╛ рдбреЛрдореЗрди рдХреНрд▓рд╛рд╕ (рдПрдХ рдЯреЗрдмрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдореБрдЭреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛: рдПрдХ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдФрд░ рджреЛ рд╕рдмрдХреНрд▓рд╛рд╕реЗрд╕, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред

Source: https://habr.com/ru/post/In178665/


All Articles