|
Программирование >> Создание клиентов mysql
Использование режимаДМЗ! Демо qld имеет опцию командной строки -ansi, позволяющую включить режим ANSI. В этом режиме поведение программы несколько меняется с целью улучшения совместимости со стандартом SQL-92. Ниже перечислены отжчительные особенности режима ANSI. Две вертикальные черты ( ) теперь представляют собой оператор конкатенации строк, а не оператор логического сложения. Обычно для совместимости с другими СУБД приходится пользоваться функцией CONCAT (). Между именем функции и открывающей скобкой разрешается ставить пробел. Обычно программа MySQL запрещает это делать, чтобы можно было отличать имена функций от имен столбцов. В режиме ANSI имена всех функций становятся зарезервированными словами, т.е. их нельзя использовать в качестве имен таблиц или столбцов. В режиме ANSI строковые литералы разрешается заключать только в одинарные кавычки. Обычно MySQL разрешает использовать двойные кавычки, но стандарт требует, чтобы в такие кавычки брались только идентификаторы с пробелами. Например, если таблица называется my table, то ее имя нужно заключать в кавычки, иначе оно будет воспринято как два разных имени. В обычном режиме такие имена берутся в обратные кавы чки. Тип REAL в MySQL обычно преобразуется в тип DOUBLE. Однако в режиме ANSI ему соответствует тип FLOAT. Стандартным уровнем изоляции транзакций в режиме ANSI является уровень SERIALIZABLE (см. главу 9,Транзакции и параллельные вхчисления ). Уникальные свойства MySQL Подобно всем реляционным СУБД, MySQL содержит целый ряд расширений стандарта SQL. Если в будущем планируется переход на другую СУБД, постарайтесь не задействовать эти расширения. Правда, я придерживаюсь противоположного принципа: использовать все, что возможно. Большинство расширений обеспечивает повышение производительности, что иногда приводит к отказу от перехода на якобы более мощную СУБД. Кроме того, некоторые приложения имеют короткое время жизни. Это особенно справедливо в отношении Web-приложений. Их универсализация бесполезна, если их вс е равно придется писать заново. В MySQL поддерживаются комментарии особого вида, позволяющие скрывать код от других СУБД. Такие комментарии записываются в стиле языка С, но текст комментария начинается с восклицательного знака. Программа MySQL распознает код, заключенный в такие комментарии, тогда как другие СУБД игнорируют их. После знака ! можно указать минимально допустимый номер версии MySQL. Таким способом помечаются спорные фрагменты инструкций. В листинге 28.5 приведена инструкция, некоторые фрагменты которой выходят за рамки стандарта SQL. В последней строке содержится требование, чтобы таблица MylSAM создавалась только в MySQL версии 3.23 или выше. Можно указывать более точный номер версии, например 32335 (т.е. 3.23.35). Уникальные свойства MySQL 505 CREATE TABLE /*! IE NOT EXISTS */ player ( /* Столбцы */ ID INT (11) /*! UNSIGNED */ NOT NULL /* ! AUTOJNCIIEMENT */, Nickname CHAR (8) NOT NULL, Password CHAR(8) NOT NULL, Rank FLOAT (4,2) NOT NULL /*! DEFAULT 50.0 */, PRIMARY KEY (ID) ) /*!323 TYPE=MyISAM */ Программа MySQL придерживается правил операционной системы в отношении чувствительности к регистру имен баз данных и таблиц. В Windows регистр не важен, а в UNIX- важен. Большинство СУБД придерживается первого варианта. Имена столбцов в MySQL тоже нечувствительны к регистру. Правда, в сравнении с другими СУБД, MySQL допускаем ьшую гибкость. К примеру, разрешаются имена, начинающиеся с цифр, а максимальная длина имен обхчно больше, чем в других СУБД. Все СУБ азному создают базы данных, поэтому о длине имен баз данных можно не беспокоиться. Инструкция CREATE DATABASE в MySQL не является частью стандарта. Что касается длины имен таблиц и столбцов, то многие СУБД ограничивают ее тридцатью двумя символами. Желательно не выходить за рамки этого ограничения, иначе при переносе базы данных придется переименовывать ее объекты. Убедитесь также, что никакие две базы данных или две таблицы одной базы данных не названы одинаково, за исключением регистра символов, например и Стандарт требует, чтобы при ссылке на столбцы использовалась точечная нотация вида . столбец. Реляционные СУБ азному расширяют это требование. MySQL позволяет добавлять слева имя базы данных ных. таблица. столбец. В соответствующем контексте можно ссылаться на имя таблицы, перед которым стоит имя базы данных. Чтобы избежать проблем с другими СУБД, старайтесь придерживаться стандарта. В стандарте SQL одинарная кавычка защищается от интерпретации удвоением С ). В MySQL для этой цели можно использовать символ \. О защите специальных символов рассказывалось в главе 9, Транзакции и параллельные вычисления . Строки можно заключать в одинарные или двойные кавычки. В MySQL операторы и S & обозначают операции логического сложения и умножения соответственно. Вместо них всегда можно использовать ключевые слова OR и AND. В стандарте SQL оператор обозначает конкатенацию строк. Если забыть об этом, то при переносе базы данных в другую СУБД могут возникнуть трудно обнаруживаемые ошибки. В MySQL поддерживается оператор который эквивалентен функции MOD В списке возвращаем1х столбцов инструкции SELECT можно использовать операторы сравнения, в главе 10, Типы данных, переменные и выражения . Результатом сравнения будет нуль или единица, в зависимости от является выражение истинным или ложным. Стандартный способ присваивания переменных заключается в использовании инструкции SET. В MySQL разрешается также задавать значения переменных в списке возвращаемых столбцов инструкции SELECT. Для этого предназначен оператор : =. Оператор RLIKE, NOT REGEXP и NO IKE позволяют сравнивать зна- чение с регулярным выражением. В некоторых СУБД для этих целей расширены возможности оператора LIKE. MySQL разрешает применять оператор LIKE к любым столбцам, даже числовым. Перед сравнением с шаблоном числовые значения приводятся к строковому типу. Например, можно записать LIKE 2%, чтобы найти целые числа, начинающиеся с цифры 2. В MySQL есть функции ERT ID (), возвращающая последнее значение поля-счетчика. Если первичный ключ является целым числом, на него всегда можно сослаться по специальному имени rowid. Если же первичного к люча нет, этому имени соответствует столбец типа UNIQUE, при условии, что таковой имеется. В стандарте SQL определено, что функция CONCAT) принимает два аргумента. В тех СУБД, которые соответствуют этой части стандарта, нужно использовать женные вызовы функции при объединении группы строк. MySQL не ограничивает число аргументов данной функции. Функция CHA () тоже имеет произвольное число аргументов. Помимо описанных выше функций в MySQL поддерживаются следующие нестандартные функции: BIT AND(), BIT COUNT() , BIT OR() , CASE() , DECODE() , ELT(), ENCODEO, ENCRYPTO, FORMAT() , FROM DAYS () , IF(), MD5 {) , PASSWORD () , PERIOD ADD () , PERIOD DIFF (), STD () , ТО САУЗ () и WEEKDAY () . В MySQL есть несколько нестандартных типов столбцов. Типы ENUM и SET позволяют определить диапазон допустимых значений столбца. Поддерживаются также производные типы, расширяющие наоборот, сокращающие размерность стандартного типа данных. Например, значение типа MEDIUMINT занимает три байта вместо четырех, а тип LONGBLOB поддерживает строки длиной до 4 Гбайт. Строки типа VARCHAR в MySQL теряют хвостовые пробелы при записи в таблицу, в то время как стандарт требует их сохранять. В будущих версиях MySQL данная установка может измениться. При обсуждении инструкции CREATE TABLE в главе 13, Инструкции SQL , рассказывалось о том, каким образом программа MySQL меняет определения столбцов. В таблицах с динамическими записями столбцы CHAR превратятся в VARCHAR, если их размерность составляет более четырех символов. И наоборот, более короткие столбцы типа VARCHAR будут приведены к типу CHAR в целях экономии места на диске. В MySQL поддерживается флаг AUTOINCREMENT, позволяющий реализовывать уникальные идентификаторы записей. Если столбец помечен таким флагом, то при вставке записи программа поместит в этот столбец следующее значение по порядку. В Oracle для этих целей применяются последовательности, которые можно вать с помощью таблицы, состоящей из одной ячейки. В листинге 28.6 демонстрируется универсальный способ создания последовательности при помощи механизма транзакций. Это не самый эффективный способ получения уникальных идентификаторов в MySQL, но он должен работать в тех СУБД, где поддерживаются транзакции. Стандартный тип несовместим с транзакциями, поэтому в примере создается таблица Berkeley DB. Последовательность начинается с нуля.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |