Кіріспе
SQL операторы
Реляциялық деректер базасын басқару жүйесі SQL (сондай-ақ upsert деп аталады) операторларын жаңа жазбаларды қосу немесе шарты сәйкес келген жағдайда қолданыстағы жазбаларды жаңарту үшін пайдаланады. Ол SQL:2003 стандартында ресми түрде енгізіліп, SQL:2008 стандартында кеңейтілді.
A relational database management system uses SQL (also called upsert) statements to INSERT new records or UPDATE existing records depending on whether condition matches. It was officially introduced in the SQL:2003 standard, and expanded in the SQL:2008 standard.
Қолданылу
Деректер қорын басқару жүйелері PostgreSQL, Oracle Database, IBM Db2, Teradata, EXASOL, Firebird, CUBRID, H2, HSQLDB, MS SQL, Vectorwise және Apache Derby стандартты синтаксисті қолдайды. Ал кейбіреулері стандартты емес SQL кеңейтімдерін қосады.
Синонимдері
Кейбір деректер қорының іске асырылуы "Upsert" терминін (жаңарту және енгізу сөздерінің қосындысы) деректер қорының операторына немесе операторлардың комбинациясына қабылдады, егер жазба дерекқордағы кестеде болмаса, жазбаны енгізеді, ал егер жазба бар болса, қолданыстағы жазбаны жаңартады. Бұл синоним PostgreSQL (v9.5+) және SQLite (v3.24+) жүйелерінде қолданылады. Ол сондай-ақ "MERGE" операторына балама псевдокодты қысқарту үшін де қолданылады. Microsoft Azure SQL деректер қорында да қолданылады.
Басқа стандартты емес іске асырулар
Кейбір басқа деректер қорын басқару жүйелері осы немесе осыған ұқсас мінез-құлқыны өздерінің стандартты емес SQL кеңейтулері арқылы қолдайды. Мысалы, MySQL ұқсас нәтижеге қол жеткізу үшін қолданылатын синтаксисті қолдайды, бірақ мақсат пен бастапқы дерек арасындағы қосылу тек PRIMARY KEY немесе UNIQUE шектеулері арқылы жасалуы керек, бұл ANSI/ISO стандартында міндетті емес. Ол сондай-ақ синтаксисті қолдайды, ол алдымен енгізуге тырысады, егер ол сәтсіз болса, бар болған жағдайда қатарды жояды, содан кейін жаңасын енгізеді. Сондай-ақ, оператордағы серверге "қайталама кілт" қателерін назарға алмауды және жалғастыруды (бар қатарлар енгізілмейді немесе жаңартылмайды, бірақ барлық жаңа қатарлар енгізіледі) айтатын клауза бар. SQLite-тің жұмысы да осыған ұқсас. Ол сондай-ақ MySQL-мен үйлесімділік үшін псевдоним ретінде қолдайды. Firebird бірнеше бастапқы дерек қатары болғанда қате шығармайды. Сонымен қатар, бір қатарлық нұсқасы бар, бірақ соңғысы енгізуге және жаңартуға қатысты әртүрлі әрекеттерді жасау мүмкіндігін бермейді (мысалы, жаңа қатарлар үшін ғана жаңа реттік мәнін орнату, ескілері үшін емес). IBM Db2 синтаксисті бірнеше және клаузалармен кеңейтеді, оларды күзетшілермен ажыратады. Microsoft SQL Server күзетшілерді қолдаумен және клаузалар арқылы Left Join қолдаумен кеңейтеді. PostgreSQL 15 нұсқасынан бастап біріктіруді қолдайды, бірақ бұрын CUBRID арқылы біріктіруді қолдады. CUBRID операторды қолдайды. Сондай-ақ, MySQL-мен үйлесімділік үшін синтаксисті қолдайды. Apache Phoenix және UPSERT SELECT синтаксисін қолдайды. Spark SQL және клаузаларын әрекеттерде қолдайды. Apache Impala қолдайды.
CUBRID supports statement. And supports the use of syntax. It also supports for compatibility with MySQL. Apache Phoenix supports and UPSERT SELECT syntax. Spark SQL supports and clauses in actions. Apache Impala supports .
NoSQL-те қолдану
Кейбір NoSQL деректер қорында ұқсас тұжырым қолданылады. Мысалы, MongoDB-де кілтке байланысты мәндегі өрістерді операция арқылы жаңартуға болады. Кілт табылмайтын болса, қате туындайды. Операция кезінде белгіні қоюға болады: бұл жағдайда берілген кілтке байланысты жаңа мән сақталады, егер ол болмаса, әйтпесе бүкіл мән ауыстырылады. Redis операциялары берілген кілтке байланысты мәнді орнатады. Redis мәннің ішкі құрылымы туралы ешқандай мәлімет білмейді, сондықтан жаңартудың мағынасы жоқ. Сондықтан операция әрқашан мәнді орнату немесе ауыстыру семантикасын қолданады.