After some tedious experiments, I finally managed to switch my site's default language from English to German both in frontend and backend. I am reliefed but not satisfied because it was a terrible hack:
Starting with @mscore's SQL script, I added a condition to make sure that field texts are only swapped if a translation exists
SET s1.data = s1.data123, s1.data123 = s2.data WHERE s1.pages_id = s2.pages_id AND s1.data1019 != '';
Especially important for backend field without translation, otherwise the backend text will get broken.
Then, I added some lines in order to update the option names for FieldtypeOptions:
UPDATE fieldtype_options s1, fieldtype_options s2
SET s1.title = s1.title123, s1.title123 = s2.title, s1.value = s1.value123, s1.value123 = s2.value
WHERE s1.fields_id = s2.fields_id and s1.option_id = s2.option_id;
The following statements are necessary for keeping the correct translation files for both languages (let 124 be the page id of the default language):
update field_language_files set pages_id = 123 where pages_id = 124;
update field_language_files_site set pages_id = 123 where pages_id = 124;
Unfortunately, since translation files are stored in the assets, it is also necessary to swap the corresponding asset directory names: files/123 to files/124.
The final step is changing the title of the new non-default language ("deutsch" to "english") and the language names respective.
I can't understand why there's still no out-of-the-box solution for this use-case, which is IMHO not so unusual. I also would prefer a PW API solution like @gebeer's one, but I couldnt' find out how to iterate over really all stuff I need (including backend) ...