Şema SQL
Schema SQL sekmesi, diyagramın seçili veritabanına göre DDL'ini gösterir: diyagramın tablolarını anahtarları, dizinleri ve yabancı anahtarlarıyla birlikte oluşturan SQL.
Araç çubuğunda Schema SQL sekmesine geçin veya Hızlı aramada Tab altında Schema SQL öğesini seçin. Export alt menüsünden Schema SQL öğesini seçmek de sekmeyi kaydetmeye hazır olarak açar. SQL'i kaydetme veya kopyalama bölümüne bakın.
SQL solda yer alır, sağında ise Schema SQL başlıklı bir seçenekler paneli SQL'i biçimlendiren seçimleri tutar. Seçenekler paneli bölümüne bakın. Sağdan sola yazılan bir görüntüleme dilinde de SQL solda kalır ve soldan sağa okunur.
Panel, sekme ilk açıldığında düzenleyici 640 px genişlikten dar değilse kendiliğinden açılır. Panelin başlık satırındaki Hide options düğmesi paneli daraltır, kodun sağ üst köşesindeki Show options düğmesi ise geri getirir. Ardından panel, düzenleyici açık kaldığı sürece sekme geçişlerinde de bıraktığınız gibi açık ya da daraltılmış kalır. Kod oluşturucu sekmesinin panelinden bağımsız olarak daraltılır ve açılır, asla dosyaya kaydedilmez.

Bağlam menüsünü açmak için SQL'e sağ tıklayın:
DatabaseveBracket, her biri geçerli değeri işaretli gösteren bir alt menü.StatementsveHeader, her biri etkin seçimi işaretli gösteren bir alt menü. Veritabanının desteklemediği bir seçim,not in Oraclegibi soluk bir bilgi notu taşır ve hiçbir şey yapmaz.Options panel, panel görünürken işaretli olan ve paneli daraltan ya da açan öğe.Save file
Bu sekme açıkken Hızlı arama şunları sunar: Database ve Bracket; yalnızca veritabanının desteklediği seçimleri listeleyen Schema SQL: Statements ve Schema SQL: Header; paneli daraltan ya da açan Schema SQL: Options panel.
SQL, sekme açıldığında yazılır ve panelin seçimlerinden biri, veritabanı adı veya bir betik her değiştiğinde yeniden yazılır. Sekme açıkken tablolarda yapılan bir düzenleme, örneğin bir ortak çalışanın veya bir kodlama ajanının düzenlemesi, sekmeden çıkıp geri döndüğünüzde ya da bunlardan biri değiştiğinde görünür.
Tablo özelliklerinin tek bir tablonun DDL'ini gösteren kendi Schema SQL sekmesi vardır. Bu sekme her zaman başlık veya betik olmadan düz CREATE ifadeleri yazar, seçenekler paneli yoktur ve bağlam menüsü yalnızca Database ve Bracket öğelerini sunar.
Seçenekler paneli
Panel, her biri kendi başlık yazısının altında olan üç grup tutar:
Saved in the document:DatabaseveBracket. Veritabanı ve tırnak bölümüne bakın.This window only:Statements,Headerve diyagramda bir tablo grubu olduğu süreceTables. İfadeler, Başlık ve Tablolar bölümlerine bakın.Saved in the document · written as is for every database:Before tablesveAfter tablesbetikleri. Önceki ve sonraki betikler bölümüne bakın.
Save file ve Copy düğmeleri panelin alt kısmında yer alır. SQL'i kaydetme veya kopyalama bölümüne bakın.
This window only altındaki seçimler, onları yaptığınız düzenleyici penceresine aittir. Belgeye kaydedilmez, ortak çalışanlarla paylaşılmaz, geri alma geçmişine de eklenmez ve düzenleyici kapatıldığında ya da yeniden yüklendiğinde sıfırlanır; sekme değiştirmek ise onları korur.
Statements seçeneği If not exists, Header seçeneği ise CREATE + USE değeriyle başlar. Düzenleyiciyi gömen bir sayfanın getSchemaSQL() yöntemiyle okuduğu SQL ve bir kodlama ajanının okuduğu SQL ise bunun yerine başlık olmadan Create ile başlar.
Seçili veritabanının desteklemediği bir seçim, Not in Oracle gibi bir Not in <database> araç ipucuyla soluk olarak panelde kalır ve ona basmak hiçbir şey yapmaz.
SQL bu durumda veritabanının desteklediği en yakın biçimi kullanır ve o biçimin düğmesi basılı görünür: If not exists yerine Create, CREATE + USE yerine USE ya da veritabanında USE de yoksa None, USE yerine de None kullanılır. Seçiminiz korunur, bu yüzden onu destekleyen bir veritabanına geçmek seçimi geri getirir.
Veritabanı ve tırnak
Database, diyagramın veritabanıdır ve tuvalin bağlam menüsündeki Database öğesiyle ve Kod oluşturucudakiyle aynı ayardır. Veritabanları bölümüne bakın. Databricks, MSSQL, MariaDB, MySQL, Oracle, PostgreSQL, Snowflake ve SQLite seçeneklerini listeler, MySQL ile başlar ve her düzenleme gibi dosyaya kaydedilir.
Bracket, tablo, sütun, kısıtlama ve dizin adlarının çevresine konan tırnağı belirler: SingleQuote, DoubleQuote, Backtick ya da hiç tırnak kullanılmaması için varsayılan değer olan None. Kod oluşturucudakiyle aynı ayardır. Tırnak bölümüne bakın.
Adları yalnızca çift tırnak içine alan Snowflake, None dışındaki her seçimde çift tırnak kullanır, Databricks ise adları her zaman ters tırnak içine alır.
Bracket, yalnızca Ayarlar sekmesindeki Bracket Type kilidi devre dışıyken dosyaya kaydedilir ve yeni bir diyagramda tüm kilitler etkindir. Kilit etkinken yapılan bir değişiklik ekranınızdaki SQL'i yeniden yazar, ancak dosya kilitli değeri korur ve diyagram bu değerle yeniden açılır. Kilit bölümüne bakın.
Veritabanı Oracle iken SQL, Oracle 12.1 ve daha eski sürümlerin reddettiği 30 bayttan uzun bir ad içeriyorsa, iki listenin altındaki bir bilgi notu bu adların her birini belirtir: Oracle 12.2+ for names over 30 bytes: <names>. Bilgi notu tablo, sütun, şema, anahtar, dizin, dizi ve tetikleyici adlarını denetler. SQL'in kendisi değişmez.
İfadeler
Statements, tabloların nasıl oluşturulacağını belirler:
CreatedüzCREATEifadeleri yazar.If not existszaten var olan tabloları ve dizinleri atlar. MySQL, MariaDB, PostgreSQL, SQLite ve Databricks bunu destekler; MSSQL, Oracle ve Snowflake bunun yerineCreateyazar.- MySQL her tabloyu benzersiz kısıtlamaları, dizinleri ve yabancı anahtarları içinde olacak şekilde
CREATE TABLE IF NOT EXISTSolarak yazar ve tüm ifadeleriSET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;ileSET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;arasına koyar. - MariaDB her ifadeye
IF NOT EXISTSekler:CREATE TABLEifadesine, herUNIQUEveFOREIGN KEYkısıtlamasına ve herCREATE INDEXifadesine. - PostgreSQL
CREATE TABLE IF NOT EXISTSveCREATE INDEX IF NOT EXISTSyazar, her yabancı anahtarı yeniden eklemeden önceDROP CONSTRAINT IF EXISTSile siler. - SQLite
CREATE TABLE IF NOT EXISTSveCREATE INDEX IF NOT EXISTSyazar. - Databricks
CREATE TABLE IF NOT EXISTSyazar ve her yabancı anahtarı yeniden eklemeden önceDROP CONSTRAINT IF EXISTSile siler.
- MySQL her tabloyu benzersiz kısıtlamaları, dizinleri ve yabancı anahtarları içinde olacak şekilde
Drop & re-create, Snowflake dışında, yazdığı her tabloyu yeniden oluşturmadan önce siler. Her veritabanı bunu destekler:- MySQL ve MariaDB, yabancı anahtar denetimlerini kapatıp yeniden açan aynı iki satırın arasında her tablo için bir
DROP TABLE IF EXISTSyazar. - PostgreSQL her tabloyu adlandıran tek bir
DROP TABLE IF EXISTSyazar; listenin dışındaki bir tablo bunlardan birine başvuruyorsa bu ifade başarısız olur.CREATE + USEbaşlığı altında, adında şema belirtilmeyen bir tablo o şemadan silinir, örneğinshop.memberolarak. - MSSQL, düğmenin
SQL Server 2016+araç ipucunun belirttiği gibi SQL Server 2016 veya sonraki bir sürüm gerektiren tek bir işlem yazar. Önce yazılan tabloların tuttuğu yabancı anahtarları, ardından tek birDROP TABLE IF EXISTSile tabloları siler ve bir hata oluşursa işlemi geri alır. Listenin dışındaki bir tablonun tuttuğu bir yabancı anahtar silmeyi yine de engeller. - SQLite, o bağlantı için yabancı anahtarları kapalı bırakan
PRAGMA foreign_keys=OFF;ifadesini, ardından her tablo için birDROP TABLE IF EXISTSyazar. - Oracle her tablo için
DROP TABLE … CASCADE CONSTRAINTS, her otomatik artırma dizisi içinDROP SEQUENCEyazar; her biri, bir/satırıyla biten ve tablo ya da dizi bulunmadığında oluşan hatayı yok sayan bir PL/SQL bloğu içindedir. - Databricks her tablo için bir
DROP TABLE IF EXISTSyazar. - Snowflake hiçbir şeyi silmez, bunun yerine
CREATE OR REPLACE TABLEyazar.
- MySQL ve MariaDB, yabancı anahtar denetimlerini kapatıp yeniden açan aynı iki satırın arasında her tablo için bir
Drop & re-create etkinken paneldeki bir uyarı sildiği tabloları belirtir: Drops <tables> before creating them. Their rows are lost., Snowflake'te ise Replaces <tables>. Their rows are lost.
En fazla beş tablo tam olarak adlandırılır. Beşi aştığında uyarı ilk dört tabloyu adlandırır ve kalanların sayısını verir, örneğin a, b, c, d, and 3 more tables.
Başlık
Header, SQL'i çalıştığı veritabanını veya şemayı oluşturan ya da seçen ifadelerle başlatır. Kullanılan ad, araç çubuğundaki database name alanına yazılan, diyagramın veritabanı adıdır ve Bracket karakteriyle tırnak içine alınır.
- MySQL ve MariaDB:
USE,USE shop;yazar,CREATE + USEise bunun önüneCREATE DATABASE IF NOT EXISTS shop;yazar. - MSSQL:
USE,USE shopveGOyazar,CREATE + USEise bunların önüneIF DB_ID(N'shop') IS NULL CREATE DATABASE shopveGOyazar. - PostgreSQL yalnızca
CREATE + USEseçeneğini destekler, bu seçenekCREATE SCHEMA IF NOT EXISTS shop;veSET search_path TO shop, public;yazar. - Oracle yalnızca
USEseçeneğini destekler, bu seçenekALTER SESSION SET CURRENT_SCHEMA = shop;yazar.CREATE + USEyerine de bu seçenek kullanılır, bu yüzden Oracle'ın sekmenin varsayılan başlığı altında yazdığı satır budur. - Snowflake ve Databricks:
USE,USE SCHEMA shop;yazar,CREATE + USEise bunun önüneCREATE SCHEMA IF NOT EXISTS shop;yazar. - SQLite ikisini de desteklemez ve başlık yazmaz.
Veritabanı USE veya CREATE + USE seçeneğini desteklediğinde, düğmenin araç ipucu o veritabanında ne yazdığını belirtir, örneğin PostgreSQL'de CREATE SCHEMA + SET search_path.
Başlık yalnızca veritabanı adı basit bir tanımlayıcı olduğu sürece yazılır: bir ASCII harfi (A–Z, a–z) veya _, ardından ASCII harfleri, rakamlar veya _.
Boş ad da dahil olmak üzere başka herhangi bir adla başlık yazılmaz ve PostgreSQL'in DROP TABLE ifadesi de bu durumda şema belirtmez. None dışında bir başlık etkinken, Header altındaki bir bilgi notu bunu bildirir: Database name "<name>" is not a valid identifier.
Yeni bir diyagramın veritabanı adı boştur, bu yüzden ona bir ad verene kadar panel Database name "" is not a valid identifier. bilgi notunu gösterir.
Tablolar
Diyagramda gösterilsin ya da gizlensin en az bir tablo grubu olduğu sürece, This window only altında her seçim için bir onay kutusuyla Tables görünür:
- Her kutuyu işaretleyen veya işaretini kaldıran
All. Yalnızca bazıları işaretliyken karışık bir durum gösterir. - Diyagramın grup sırasıyla, her tablo grubu için grubun adıyla ya da adı olmayan bir grupta
unnamedile etiketlenen ve grubun bir rengi varsa o renkteki bir noktanın ardından gelen birer kutu. - Hiçbir grupta olmayan tablolar için
No group.
Tüm kutular işaretliyken sekme diyagramın tamamını yazar.
Yalnızca bazıları işaretliyken, işaretli kutuların tablolarını dizinleri ve tuttukları yabancı anahtarlarla birlikte yazar; dışarıda bırakılan bir tabloya başvuran bir yabancı anahtar da bunlara dahildir. Önceki ve sonraki betikler yine yazılır, Drop & re-create, onun uyarısı ve uzun adlara ilişkin Oracle bilgi notu ise yalnızca bu tabloları kapsar.
Hiçbir kutu işaretli değilken sekme hiçbir şey yazmaz ve kodun üzerindeki bir ipucunda No tables chosen. Check some under Tables. yazar. Bu durumda Save file boş bir dosya kaydeder, Copy ise boş bir metin kopyalar.
Statements ve Header seçeneklerinde olduğu gibi bu seçim de pencereye aittir. Seçenekler paneli bölümüne bakın.
Sonradan eklenen bir grup, yalnızca o anda tüm kutular işaretliyse işaretli olarak başlar. Bir grubu kaldırmak kutusunu da kaldırır, son grubu kaldırmak ise her şeyi yeniden işaretler.
Bu seçim yalnızca bu sekmeye uygulanır. Tablo özelliklerinin Schema SQL sekmesi ve getSchemaSQL() yöntemi bundan etkilenmez.
Önceki ve sonraki betikler
Before tables ve After tables, tablolardan önce CREATE EXTENSION veya SET ifadeleri, tablolardan sonra ise yetkilendirmeler, görünümler ve başlangıç verileri gibi kendi SQL'inizi tutar.
Bunlar belgeye kaydedilir; veritabanı ne olursa olsun tüm diyagram için tek bir çift vardır. Her biri SQL'e yazdığınız gibi, hiç denetlenmeden yazılır: önceki betik başlıktan sonra ve DROP ifadeleriyle tablolardan önce, sonraki betik ise en sona.
Satır sonları LF olarak yazılır, bir betiğin önündeki boş satırlar ve sonundaki boşluklar atılır.
MSSQL'de, iki alanın altındaki satırın belirttiği gibi, son satırı GO (veya bir sayıyla yazılmış GO) olmayan bir betiğin ardından bir GO satırı eklenir. Oracle'da bir PL/SQL bloğunu / satırıyla kendiniz bitirin.
Alanlar SQL'i vurgular ve metinleriyle birlikte büyür.
Bir düzenleme, başka bir yere tıklayarak veya sekme değiştirerek alandan çıktığınızda uygulanır ve yanındaki SQL ile belge ancak o zaman değişir. Yalnızca içine tıkladığınız bir alan hiçbir şeyi değiştirmez.
Bir betik düzenlemesi diyagramı diğer her düzenleme gibi değiştirir: Dosyaya kaydedilir, ortak çalışanlar onu görür ve uygulanan her düzenleme geri alma geçmişinde, ERD sekmesinden geri alınan tek bir adımdır.
Bir alana yazarken düzenleyicinin kendi kısayolları alana bırakılır; böylece Ctrl + Z (Windows/Linux) veya ⌘ + Z (Mac) oradaki yazdıklarınızı geri alır, kopyalama, kesme ve yapıştırma da diyagram yerine metin üzerinde çalışır.
Hızlı arama ve Gezgindeki arama yine kendi kısayollarıyla, Ctrl + K ve Ctrl + F (Windows/Linux) veya ⌘ + K ve ⌘ + F (Mac) ile açılır. Ctrl + F veya ⌘ + F ERD sekmesine geçtiği için, her sekme geçişi gibi düzenlemenizi uygular.
Klavye odağı olmayan bir alan, bir ortak çalışanın veya bir kodlama ajanının betiğinde yaptığı değişikliği izler. İçinde bulunduğunuz bir alan, hiçbir şey yazmadan çıktığınızda bu değişikliği gösterir. Bir şey yazdıysanız, çıktığınızda metniniz uygulanır ve onlarınkinin yerini alır.
SQL'i kaydetme veya kopyalama
Panelin alt kısmındaki veya bağlam menüsündeki Save file, tam olarak sekmenin gösterdiği SQL'i geçerli veritabanı, tırnak, ifadeler, başlık, tablolar ve betiklerle birlikte <database name>-<timestamp>.sql adıyla kaydeder. Diğer tüm dışa aktarmalar gibi adlandırılır ve kaydedilir. Dışa aktarma bölümüne bakın.
Tuvalin bağlam menüsündeki veya Hızlı aramadaki Export ▸ Schema SQL tek başına hiçbir şey kaydetmez.
Bu sekmeye geçer, daraltılmış olsa bile seçenekler panelini açar ve klavye odağını Save file düğmesine verir, böylece Enter tuşuna basmak dosyayı kaydeder.
Panelin alt kısmındaki Copy ya da kodun üzerine geldiğinizde sağ üst köşesinde beliren kopyalama düğmesi SQL'i kopyalar.
Onay işaretli bir Copied! bildirimi bunu iki saniye boyunca doğrular. Tarayıcı veya ana uygulama panoya erişimi reddederse, bunun yerine uyarı işaretli bir Couldn't copy to the clipboard bildirimi durumu bildirir. Yeniden kopyalamak yeni bir bildirim eklemek yerine mevcut bildirimi değiştirir.
SQL ayrıca seçilebilir, bu yüzden yalnızca bir kısmını alabilirsiniz.
DDL'in yazdıkları
Bu kurallar düzenleyicinin Şema SQL yazdığı her yerde geçerlidir: bu sekmede ve dosyasında, ayrıca düzenleyiciyi gömen bir sayfanın veya bir kodlama ajanının okuduğu SQL'de.
Tablo özelliklerinin Schema SQL sekmesi, gösterdiği tek tablo için bu kurallara uyar. CREATE TABLE ifadesinin içinde yer alan SQLite yabancı anahtarları dışında yabancı anahtar yazmaz, Oracle dizisi veya tetikleyicisi de yazmaz.
Bölümler, aralarında birer boş satırla şu sırayla gelir: başlık, önceki betik, DROP ifadeleri, tablolar ve sonraki betik. Tablolar ad sırasına göre yazılır.
Tablosu ve betiği olmayan bir diyagram, bir başlık seçili olsa bile hiçbir şey yazmaz.
Otomatik artırma
Auto Increment olarak işaretlenmiş bir sütun her veritabanının yazdığı şekilde yazılır: MySQL ve MariaDB'de AUTO_INCREMENT, MSSQL'de IDENTITY(1,1), Snowflake'te AUTOINCREMENT, PostgreSQL ve Databricks'te GENERATED ALWAYS AS IDENTITY.
Oracle'da bir SEQ_<table> dizisi ve sütunu bu diziden dolduran bir SEQ_TRG_<table> tetikleyicisi oluşturulur. Tetikleyici bir / satırıyla biter, böylece SQL*Plus ve SQLcl onu çalıştırır.
Bir veritabanı sütunun türünde otomatik artırmayı kabul etmediğinde yan tümce yer almaz ve tablodan sonraki bir yorum satırı sütunu belirtir:
- PostgreSQL bunu yalnızca
smallint,integerveyabiginttürlerinde, bunların herhangi bir adıyla kabul eder:INT,INTEGER,BIGINT,SMALLINT,INT2,INT4veyaINT8. Başka türdeki bir sütun ne yan tümceyi ne de bir varsayılan değeri alır ve yorumda örneğin-- PostgreSQL takes IDENTITY only on smallint, integer or bigint, so member.id is written without it.yazar. - Databricks bunu yalnızca
BIGINTveyaLONGtüründe kabul eder. - SQLite
AUTOINCREMENTanahtar sözcüğünü yalnızca bir tablonun, genişlik belirtilsin ya da belirtilmesinINT,BIGINTveyaINT8gibi tamsayı türündeki tek birincil anahtar sütununda kabul eder. Bu sütunINTEGER, anahtar isePRIMARY KEY (id AUTOINCREMENT)olarak yazılır. Başka herhangi bir türdeki tek anahtar bu anahtar sözcük olmadan yazılır.
Referans eylemleri
Her veritabanının hangi ON DELETE ve ON UPDATE eylemlerini yazdığı ON DELETE ve ON UPDATE bölümünde listelenir.
Snowflake bir eylemi dışarıda bıraktığında, o yabancı anahtarın ALTER TABLE ifadesinin üstündeki bir yorum bu eylemi belirtir, örneğin -- Snowflake creates no foreign key with a referential action other than NO ACTION, so ON DELETE CASCADE is left out.
Şema nitelikli tablo adları
Bracket değeri None iken sales.users gibi nokta içeren bir tablo adı, köşeli parantezlerin veya çift tırnakların dışındaki son noktasından bölünerek bir şema ve bir tablo olarak okunur.
- MySQL, MariaDB, MSSQL, Oracle ve PostgreSQL yazdıkları otomatik adları yalnızca tablo kısmından oluşturur: beşinde de
FK_users_TO_ordersveIDX_users, PostgreSQL dışındakilerdeUQ_users_email, bunlardan birincil anahtara ad veren iki veritabanı olan MSSQL ve Oracle'da isePK_users. Bu ikisinde[sales].[users]ve"sales"."users"daPK_usersverir,[Order]isePK_Orderverir. - SQLite kısıtlamalara ad vermez, bu yüzden oluşturduğu tek otomatik ad dizinin adıdır:
CREATE INDEX sales.IDX_users ON users. - Oracle tablonun dizinlerini ve otomatik artırmalı bir sütunun dizisi ile tetikleyicisini tablonun şemasında oluşturur:
sales.IDX_users,sales.SEQ_usersvesales.SEQ_TRG_users. - Oracle ve SQLite'ta, şemasını kendiniz verdiğiniz bir dizin adı bu şemayı korur.
- Büyük/küçük harf ayrımı yapmadan önceki bir adı tekrarlayan otomatik bir yabancı anahtar veya dizin adı bir numara alır.
orderstablosundan hemsales.usershem dehr.Userstablosuna başvurulduğunda ikinci anahtarFK_Users_TO_orders1olur.
Başka herhangi bir Bracket değerinde tablo adının tamamı tek bir tanımlayıcıdır, örneğin "PK_sales.users". Snowflake ve Databricks adın tamamını her zaman korur.
Dizinler sekmesinin Keys satırları aynı adları gösterir.
Varsayılan değerler
Bir sütunun varsayılan değeri yazdığınız gibi yazılır, ancak veritabanı o ifadeyi yalnızca parantez içinde okuyorsa parantez içine alınır. Zaten parantez içinde olan bir varsayılan değer olduğu gibi bırakılır.
- MySQL, bir sabit değer veya geçerli zaman dışındaki her şeyi parantez içine alır, örneğin
(uuid()). Ayrıca birBLOB,TEXT,JSON, uzamsal veyaLONG…sütunundakiNULLdışındaki her varsayılan değeri veTIMESTAMPya daDATETIMEdışındaki her sütundaki geçerli zamanı da parantez içine alır. - MariaDB, bir sabit değer, geçerli zaman, bir işlev çağrısı veya bir ad dışındaki her şeyi parantez içine alır.
- SQLite, bir sabit değer veya bir ad dışındaki her şeyi parantez içine alır, örneğin
(datetime('now')). - PostgreSQL yalnızca parantezlerin dışında
AT TIME ZONE,AND,OR,IS,IN,LIKE,COLLATEveya= ANYgibi bir sözcük içeren bir ifadeyi parantez içine alır, örneğin(now() AT TIME ZONE 'utc'). - MSSQL, Oracle, Snowflake ve Databricks her varsayılan değeri yazıldığı gibi yazar.
Salt okunur düzenleyiciler
readonly bir düzenleyicide sekme her zamanki gibi çalışır: Database ve Bracket gösterilen SQL'i yine değiştirir, Statements, Header ve Tables yine çalışır, Save file ve Copy de SQL'i yine kaydeder ve kopyalar.
Yalnızca iki betik alanı salt okunurdur.