Firebird Documentation Index → Firebird 1.5 Quick Start → Работа с базами данных |
В директории examples
Вашей
инсталляции Firebird лежит образец базы данных -
employee.fdb
, которую можно использовать «для
пробы пера».
Если Вы вдруг решили переместить образец базы данных на другой диск, убедитесь, что он физически подключен к компьютеру. Разделяемые (shared), присоединенные (mapped) диски или (на Unix) смонтированные (mounted) SMB (Samba) файловые системы не будут работать. Это правило касается любых создаваемых Вами баз данных.
При использовании TCP/IP строка подключения состоит из двух частей: имя сервера и путь к файлу. Формат строки имеет следующий вид:
Для Linux-серверов:
имя-сервера:/путь-к-файлу/имя-файла-базы-данных
Пример для Linux или другой Posix-системы с именем
serverxyz
:
serverxyz:/opt/interbase/examples/employee.fdb
Для Windows-серверов:
имя-сервера:буква-диска:\путь-к-файлу\имя-файла-базы-данных
Пример для Windows:
serverxyz:C:\Program Files\Firebird\examples\employee.fdb
Для подключения к базе данных Firebird пользователь должен
аутентифицироваться с использованием имени пользователя и правильного
пароля. Кроме того, любому пользователю отличному от SYSDBA, root
(Posix - системы), или Administrator
(на Windows-системах, если
Firebird запущен от имени этого пользователя) необходимо иметь
разрешения на доступ к объектам внутри самой базы данных (так
называемые объектные привилегии). Для простоты, рассмотрим процедуру
аутентификации пользователя SYSDBA с
использованием пароля masterkey
.
Существует несколько способов подключения к базе данных с
использованием утилиты isql. Один из них
- это использование isql в интерактивном
режиме. Перейдите в подкаталог bin
директории, в которой установлена
Ваша версия Firebird, и в командной строке наберите
isql (для Linux: ./isql) [↵
означает «нажать клавишу
Enter»]:
C:\Program Files\Firebird\Firebird_1_5\bin>isql↵ Use CONNECT or CREATE DATABASE to specify a database SQL>CONNECT "C:\Program Files\Firebird\Firebird_1_5\examples\employee.fdb"↵ CON>user 'SYSDBA' password 'masterkey';↵
В isql каждое SQL-выражение
должно завершаться точкой с запятой. Если строка не
заканчивается точкой с запятой, и Вы нажимаете клавишу
Enter, isql будет считать, что выражение
будет продолжаться на следующей строке и сменит приглашение с
SQL>
на CON>
. Это
позволяет разбивать длинные выражения на несколько строк. Если
Вы нажали клавишу Enter, забыв указать точку
с запятой, просто наберите символ после приглашения и нажмите
Enter ещё раз.
Если, используя Classic Server под Linux, не указать имя
хоста, будет предпринята попытка организовать прямое локальное
соединение. Что, в свою очередь, может закончиться неудачей в
случае отсутствия у текущей учетной записи Linux необходимых
прав доступа к файлу базы данных. В этом случае попробуйте
подключиться к localhost
:/
<path>. В этом случае файл
будет открывать серверный процесс (который в Firebird 1.5
обычно работает от имени firebird
). С другой стороны,
попытка сетевого соединения может закончиться неудачно, если
пользователь создавал базу данных при локальном подключении и
у сервера нет необходимых прав.
В случае использования Classic Server под Windows, Вы
должны указывать имя хоста (это может
быть localhost
) и
полный путь, в противном случае подключиться не
получиться.
Несмотря на то, что в Firebird «нормальными» символами разделения строк являются одинарные кавычки, в примере, при указании пути к базе данных, использовались двойные кавычки. Это необходимо, так же как и в некоторых других утилитах командной строки, при указании путей, содержащих пробелы. Одинарные кавычки будут работать для путей, не содержащих пробелы.
Кавычки вокруг «SYSDBA» и «masterkey» необязательны. Также не обязательно заключать в кавычки путь к базе данных, не содержащий пробелов.
Далее isql сообщит о том, что Вы подключились:
DATABASE "C:\Program Files\Firebird\Firebird_1_5\examples\employee.fdb", User: sysdba SQL>
Теперь Вы можете продолжить эксперименты с базой
employee.fdb
. isql означает
interactive SQL [utility] (интерактивный SQL).
Вы можете использовать её для извлечения данных, получения
метаинформации, создания объектов базы данных, запуска скриптов и
многого другого.
Для того, чтобы вернуться в командную строку наберите
SQL>QUIT;↵
За дополнительной информацией об использовании isql обращайтесь к Using Firebird, глава 10: Interactive SQL Utility (isql).
Обычно, графические средства самостоятельно собирают строку соединения на основании информации, вводимой пользователем в отдельных полях - имя сервера, путь к базе данных, имя пользователя и пароль. Как их использовать должны быть понятно из информации, изложенной в предыдущем разделе.
Существуют средства, в которых имя сервера + полный путь ожидаются в виде одной строки
Помните, что на Linux и других Posix-системах имена файлов и названия команд являются чувствительными к регистру
Утилита isql позволяет создавать базы данных более, чем одним способом. Мы же рассмотрим простой способ создания базы данных в интерактивном режиме, хотя для серьезного использования Вам, скорее всего, потребуется научиться создавать и использовать скрипты. В руководстве Using Firebird имеется отдельная глава, посвященная этому вопросу.
Для создания базы данных с использованием утилиты
isql в интерактивном режиме, в командной
строке перейдите в директорию bin
и наберите isql
(Windows) или ./isql (Linux):
C:\Program Files\Firebird\Firebird_1_5\bin>isql↵ Use CONNECT or CREATE DATABASE to specify a database
Теперь Вы можете создать базу данных. Предположим, что Вы хотите
создать базу данных test.fdb
и сохранить её в
папке data
на диске D
:
SQL>CREATE DATABASE 'D:\data\test.fdb' page_size 8192↵ CON>user 'SYSDBA' password 'masterkey';↵
В отличии от оператора CONNECT, в операторе CREATE DATABASE кавычки вокруг пути к файлу, имени пользователя и пароля являются обязательными.
Если Вы используете Classic Server под Linux и в пути не
указываете имя хоста, будет произведена попытка создать файл
базы данных с Вашей учетной записью в Linux в качестве
владельца. Может быть это именно то, что Вы и хотите, а может и
нет (подумайте о правах доступа, если Вы хотите, чтобы к базе
данных мог подключаться кто-то еще). Если же в пути указать,
например, localhost:
, тогда создавать и
влдаеть файлом будет серверный процесс (который в Firebird 1.5
обычно работает от имени firebird
).
В случае использования Classic Server под Windows, Вы
должны указывать имя хоста (которое может
быть localhost
) плюс
полный путь к файлу, в противном случае процесс создания
закончится неудачей.
Будет создана база данных и через некоторое время вновь появится приглашение SQL. Теперь Вы подключены к новой базе данных и можете создать какие-нибудь объекты в ней.
Чтобы убедиться, что там действительно база данных, выполните запрос:
SQL>SELECT * FROM RDB$RELATIONS;↵
На экран будет выдано большое количество данных! Этот запрос извлекает все строки из системной таблицы, в которой Firebird хранит метаданные для таблиц. «Пустая» база данных на самом деле не очень-то и пустая – она содержит базу данных, которая будет расти, наполняясь метаданными, по мере создания Вами новых объектов в ней.
Для возвращения в командную строку, наберите
SQL>QUIT;↵
За дополнительной информацией об isql обращайтесь к главе 10 Using Firebird: Interactive SQL Utility (isql).
Каждая систем управления базами данных имеет свои отличительные особенности в реализации SQL. По сравнению с любой другой СУБД, за возможным исключением «близкой родственницы» - InterBase®, Firebird наиболее строгим образом соответствует стандарту SQL. Разработчики, переходящие с других продуктов, соответствующих стандарту в меньшей степени, ошибочно воспринимают Firebird странным, притом, что многие мнимые «странности» на самом деле не являются таковыми.
В соответствии со стандартом SQL, Firebird при вычислении частного от деления целого числа на целое округляет результат до ближайшего меньшего целого. В случае если Вы не были готовы, это может слегка шокировать Вас при получении результатов.
Например, следующее вычисление является корректным с точки зрения SQL:
1 / 3 = 0
Если Вы переходите с СУБД, в которой частное от деления целого на другое целое приводится к нецелому, Вам будет необходимо доработать подобные выражения и заменить тип делимого, делителя или обоих на число с плавающей или фиксированной точкой.
Например, предыдущий пример, для получения результата отличного от нуля, можно изменить следующим образом:
1.000 / 3 = 0.333
В Firebird строки отделяются парными символами одинарных
кавычек – 'Замечательная строка'
– (ASCII код -
39, не 96). Если Вы использовали предыдущие
версии предшественницы Firebird, InterBase®, Вы можете вспомнить,
что там символы одинарных и двойных кавычек использовались
одновременно как разделители строк. В Firebird двойные кавычки не
могут использоваться в качестве разделителей строк в SQL
выражениях.
Если Вам необходимо использовать в строке символ апострофа, Вы можете «экранировать» (escape) его, предварив его другим апострофом.
Например, следующая строка приведет к ошибке:
'Joe's Emporium'
потому, что анализатор проинтерпретирует текст как строку
'Joe'
, за которой следуют какие-то неизвестные
ключевые слова.
Чтобы сделать строку правильной, необходимо добавить второй апостроф:
'Joe''s Emporium'
Обратите внимание на то, что это ДВА символа одинарной кавычки, а не символ двойных кавычек.
В SQL для конкатенации строк используются два символа
«трубы» (ASCII 124, в паре без пробела между ними). При
этом «+» является символом арифметического сложения,
соответственно, при попытке его использования для объединения строк,
вы получите сообщение об ошибке. Следующее выражение дополняет
значения столбца фразой «Reported by:
»:
'Reported by: ' || LastName
Будьте внимательны с конкатенацией и учтите, что Firebird выдаст сообщение об ошибке при попытке соединения значений двух или более столбцов типа char или varchar, чья суммарная потенциальная длина превышает предельный размер для строковых типов (32 Kb).
Кроме этого обратите внимание на нижеизложенный раздел NULL в выражениях относительно конкантенации в выражениях,
содержащих NULL
.
До выхода стандарта SQL-92, не допускалось использовать в качестве имен объектов (идентификаторов) ключевые слова, не учитывался регистр букв и не допускались пробельные символы. Стандарт SQL-92 сделал всё это возможным, определив, что идентификаторы должны определяться в парных двойных кавычках (ASCII код - 34) и при использовании также должны выделяться парными кавычками.
Смысл этого «подарка» заключался в упрощении процесса миграции метаданных из нестандартных СУБД в совместимые со стандартом. Обратная сторона медали заключается в том, что если Вы решаете использовать идентификаторы в двойных кавычках, их чувствительность к регистру и заключение их в двойные кавычки становятся обязательными.
При выполнении ограниченного набора условий, Firebird предлагает определенное послабление. Если идентификатор, определенный в двойных кавычках:
был определен в верхнем регистре,
не совпадает с ключевым словом,
и не содержит пробелов,
...тогда он может использоваться в SQL-выражениях без кавычек и учета регистра символов. (Однако, если Вы заключаете идентификатор в кавычки, Вы должны снова учитывать регистр символов!)
Не перемудрите с этим делом! Например, если у Вас есть таблицы "TESTTABLE" и "TestTable", определенные в двойных кавычках , и Вы выполняете запрос вида:
SQL>select * from TestTable;
...в результате Вы получите записи из таблицы "TESTTABLE", а не "TestTable"!
Обычно, рекомендуется, в случае отсутствия убедительных причин, избегать использования двойных кавычек при определении идентификаторов. К счастью, Firebird позволяет одновременно использовать идентификаторы в кавычках и без них – поэтому не бывает проблем в случае необходимости использования ключевых слов в качестве идентификаторов в унаследованных базах данных.
Некоторые инструменты администрирования по умолчанию принудительно заключают в двойные кавычки все идентификаторы. Постарайтесь выбрать средство, которое позволяет делать это опционально.
В SQL, NULL
- это не значение. Это условие,
или состояние, элемента данных, в котором его
значение не известно, в связи с этим NULL
не
может выступать в качестве значения. Если NULL
участвует в арифметических или других выражениях, результат всегда
будет NULL
. Это не нуль, не пустота (пробел) или
«пустая строка» и NULL
не ведет себя
как одно из этих значений.
Приведем некоторые, возможно «удивительные» для
Вас, примеры вычислений и сравнений с участием
NULL
:
1 + 2 + 3 +
NULL
=
NULL
not (
NULL
) =
NULL
'Home ' || 'sweet ' ||
NULL
=
NULL
if (a = b) then MyVariable = 'Equal'; else MyVariable = 'Not equal';
Если и a
и b
-
NULL
- то после выполнения данного кода,
значение MyVariable
будет 'Not
equal'
(не равны). Потому что результат вычисления
выражения 'a = b'
будет
NULL
, если хотя бы один из операндов будет
NULL
. Соответственно, в контексте этого
«if...then
»,
NULL
ведет себя как
FALSE
, блок 'then
'
пропускается и выполняется блок 'else
'.
if (a <> b) then MyVariable = 'Not equal'; else MyVariable = 'Equal';
В этом примере, MyVariable
будет иметь
значение 'Equal'
(равны), если
a
- NULL
, а
b
- нет, или наоборот. Объяснение аналогично
предыдущему случаю.
FirstName || ' ' || LastName
в результате даст NULL
, если хотя бы
FirstName
или LastName
-
NULL
.
Воспринимайте NULL
как
НЕИЗВЕСТНО
и ощущения странности результатов
пропадут! Если значение Number
не известно, то
результат '1 + 2 + 3 + Number
' так же получается
не известным (и поэтому NULL
). Если содержимое
MyString
не известно, тогда не известен результат
конкатенации 'MyString || YourString
'
(даже если YourString
не-NULL
) и т.д.
Больше информации об особенностях NULL
можно найти в руководстве NULL
в
СУБД Firebird, доступном по адресу:
Firebird Documentation Index → Firebird 1.5 Quick Start → Работа с базами данных |