Справочное руководство по MySQL

         Выбор хостинга для вашего сайта не должен быть сложной задачей. Лучш

Справочное руководство по MySQL версии 4.0.11-gamma

Это - справочное руководство по MySQL; оно представляет собой документацию по MySQL версии 4.0.11-gamma. Функциональные изменения отмечены номером версии, в которой они произведены, поэтому это руководство будет полезно при освоении также и более старых версий MySQL. Поскольку данный материал носит чисто справочный характер, в нем не содержится основных положений SQL или сведений по реляционным базам данных.


Общая информация
Об этом руководстве
Соглашения, используемые в данном руководстве
О русском переводе руководства
Что представляет собой MySQL?
История MySQL
Основные возможности MySQL
Насколько стабильным является MySQL?
Насколько большими могут быть таблицы в MySQL?
Вопросы, связанные с Проблемой-2000
Что представляет собой компания MySQL AB?
Бизнес-модель и услуги, оказываемые компанией MySQL AB
Поддержка
Обучение и сертификация
Консультации
Коммерческие лицензии
1О нашей программе партнерства
О рекламе


Как с нами связаться
Лицензии и поддержка MySQL
Поддержка, предлагаемая компанией MySQL AB
Авторские права и лицензии на MySQL
Лицензии на ПО MySQL
Использование ПО MySQL под коммерческой лицензией
Бесплатное использование ПО MySQL по лицензии GPL
Логотипы и торговые марки MySQL AB
Оригинальный логотип MySQL
Логотипы MySQL, которые могут использоваться без письменного разрешения
В каком случае для использования логотипов необходимо письменное разрешение?
Партнерские логотипы MySQL AB
Использование слова MySQL в текстовых документах и презентациях
Использование слова MySQL в названиях компаний и продуктов
Кратко о MySQL 4.x
Поэтапный выпуск
Можно использовать уже прямо сейчас
строенный MySQL
Другие функции, доступные в MySQL 4.0
Функции MySQL 4.x, которые будут добавлены в будущем
MySQL 4.1, следующая ветка в разработке

Источники информации по MySQL
Списки рассылки MySQL
Списки рассылки MySQL
Как задавать вопросы и направлять сообщения об ошибках
Как отправлять отчеты об ошибках или проблемах
Рекомендации по ответам на вопросы, направляемые в список рассылки
Пользователи MySQL на IRC
Насколько MySQL соответствует стандартам?
Каким стандартам соответствует MySQL ?
Запуск MySQL в режиме ANSI
Расширения MySQL к ANSI SQL92
Отличия MySQL от ANSI SQL92
Вложенные SELECTы
Оператор SELECT INTO TABLE
Транзакции и атомарные операции
Хранимые процедуры и триггеры
Внешние ключи
Представления
Символы `--' как начало комментария
Известные ошибки и недостатки проектирования в MySQL

1.10 MySQL и будущее (что предстоит сделать)
Что планируется реализовать в версии в 4.0
Things That Should be in 4.1
Что планируется реализовать в версии 5.0
Что должно быть сделано в ближайшем будущем
То, что надо сделать когда-нибудь
То, чего не планируется делать

Сравнение MySQL с другими СУБД
Сравнение MySQL и mSQL
Как конвертировать инструментальные средства mSQL в MySQL
Различия в клиент-серверных коммуникационных протоколах mSQL и MySQL
Различия в синтаксисе SQL между mSQL 2.0 и MySQL
Сравнение MySQL c PostgreSQL
Стратегии развития MySQL и PostgreSQL
Сравнение возможностей MySQL и PostgreSQL
Тестирование скорости работы MySQL и PostgreSQL

Установка MySQL
Быстрая стандартная установка MySQL
Установка MySQL на Linux
Установка MySQL на Windows
Установка бинарного кода
Подготовка конфигурации MySQL для Windows
Первый запуск сервера

Общие вопросы инсталляции
Как получить MySQL
Проверка целостности пакетов с помощью MD5 Checksums или GnuPG
Операционные системы, поддерживаемые MySQL
Какую версию MySQL использовать
Схемы установки
Как и когда выпускаются обновления
Бинарные коды MySQL, скомпилированные в MySQL AB
Установка бинарного дистрибутива MySQL

Установка исходного дистрибутива MySQL
Обзор быстрой установки
Применение патчей
Типичные опции configure
Установка из экспериментального набора исходных кодов
Проблемы с компиляцией?
Замечания по потокам MIT-pthreads
Дистрибутив исходного кода для Windows

Послеустановочные настройка и тестирование
Проблемы при запуске mysql_install_db
Проблемы при запуске сервера MySQL
Автоматический запуск и остановка MySQL

Апгрейд/даунгрейд MySQL
Модернизация с версии 4.0
Модернизация с версии 3.23 до версии 4.0
Модернизация с версии 3.22 до версии 3.23
Модернизация с версии 3.21 до версии 3.22
Модернизация с версии 3.20 до версии 3.21
Модернизация к иной архитектуре

Заметки по операционным системам
Примечания к Linux (Все версии Linux)
Примечания к бинарным дистрибутивам Linux
Заметки по поводу Linux x86
Примечания к Linux SPARC
Примечания к Linux Alpha
Примечания к Linux PowerPC
Примечания к Linux MIPS
Примечания к Linux IA64
Примечания к Windows
Запуск MySQL на Windows 95, 98 или Me
Запуск MySQL на Windows NT, 2000 или XP
Работа MySQL в среде Windows
Соединение с MySQL на удаленной машине под Windows с использованием SSH
Распределение данных в Windows между несколькими различными дисками
Компиляция MySQL-клиентов в среде Windows
Сравнительные характеристики MySQL под Windows и под Unix
Примечания к Solaris
Примечания к Solaris 2.7/2.8
Примечания к Solaris x86
Примечания к BSD
Примечания к FreeBSD
Примечания к NetBSD
Примечания к OpenBSD 2.5
Примечания к OpenBSD 2.8
Примечания к BSD/OS версий 2.x
Примечания к BSD/OS версий 3.x
Примечания к BSD/OS версий 4.x
Примечания к Mac OS X
Общедоступная бета-версия Mac OS X
Сервер Mac OS X
Примечания к другим Unix-системам
Примечания к бинарному дистрибутиву HP-UX
Примечания к HP-UX версии 10.20
Примечания к HP-UX версий 11.x
Примечания к IBM-AIX
Примечания к SunOS 4
Примечания к Alpha-DEC-UNIX (Tru64)
Примечания к Alpha-DEC-OSF/1
Примечания к SGI Irix
Примечания к Caldera (SCO)
Примечания к Caldera (SCO) Unixware Version 7.0
Примечания к OS/2
Примечания к BeOS
Примечания к Novell NetWare
Замечания по установке Perl
Установка Perl на Unix
Установка ActiveState Perl на Windows
Установка дистрибутива Perl для MySQL на Windows
Проблемы использования интерфейса Perl DBI/DBD
Учебное пособие по MySQL
Подсоединение к серверу и отсоединение от него
Ввод запросов
Создание и использование базы данных
Создание и выбор базы данных
Создание таблицы
Загрузка данных в таблицу
Выборка информации из таблицы
Выборка всех данных
Выборка определенных строк
Выборка определенных столбцов
Сортировка строк
Вычисление дат
Работа с значениями NULL
Сравнение по шаблонам
Подсчет строк
Использование нескольких таблиц
Получение информации о базах данных и таблицах
Примеры стандартных запросов
Максимальное значение столбца
Строка, содержащая максимальное значение некоторого столбца
Максимальное значение столбца для группы
Строка, содержащая максимальное значение некоторого столбца
Использование пользовательских переменных
Использование внешних ключей
Поиск по двум ключам
Подсчет посещений за день
Использование атрибута AUTO_INCREMENT
Использование mysql в пакетном режиме
Запросы проекта "Близнецы.html" (Twin Project)
Поиск нераспределенных близнецов
Вывод таблицы состояний пар близнецов
Использование MySQL совместно с Apache
Администрирование баз данных
Конфигурирование MySQL
Параметры командной строки mysqld
Файлы параметров `my.cnf'
Установка нескольких серверов на один компьютер
Запуск нескольких серверов MySQL на одном компьютере
Общие проблемы безопасности и система привилегий доступа MySQL
Общие принципы обеспечения безопасности
Как обезопасить MySQL от хакеров
Опции запуска mysqld, относящиеся к безопасности
Вопросы безопасности, относящиеся к команде LOAD DATA LOCAL
Функции, выполняемые системой привилегий
Как работает система привилегий
Привилегии, предоставляемые MySQL
Соединение с сервером MySQL
Управление доступом, этап 1: верификация подсоединения
Управление доступом, этап 2: верификация запросов
Причины появления ошибок Access denied ("в доступе отказано.html")
Управление учетными записями пользователей MySQL
Синтаксис команд GRANT и REVOKE
Имена пользователей MySQL и пароли
Когда изменения в привилегиях вступают в силу
Задание изначальных привилегий MySQL
Добавление новых пользователей в MySQL
Ограничение ресурсов пользователя
Задание паролей
Обеспечение безопасности своего пароля
Использование безопасных соединений
Основные сведения
Требования
Параметры команды GRANT
Предотвращение катастроф и восстановление
Резервное копирование баз данных
Синтаксис BACKUP TABLE
Синтаксис RESTORE TABLE
Синтаксис CHECK TABLE
Синтаксис REPAIR TABLE
Использование myisamchk для профилактики таблиц и послеаварийного
Синтаксис запуска myisamchk
Общие опции для myisamchk
Проверочные опции для myisamchk
Опции исправления для myisamchk
Другие опции для myisamchk
Использование памяти утилитой myisamchk
Использование myisamchk для послеаварийного восстановления
Как проверять таблицы на ошибки
Как ремонтировать таблицы
Оптимизация таблиц
Настройка режима профилактики таблиц
Получение информации о таблице
Справочник по языку администрирования баз данных
Синтаксис команды OPTIMIZE TABLE
Синтаксис команды ANALYZE TABLE
Синтаксис команды FLUSH
Синтаксис команды RESET
Синтаксис команды KILL
Синтаксис команды SHOW
Получение информации по базам данных, таблицам, столбцам и индексам
SHOW TABLE STATUS
SHOW STATUS
SHOW VARIABLES
SHOW LOGS
SHOW PROCESSLIST
SHOW GRANTS
SHOW CREATE TABLE
Локализация MySQL и использование национальных алфавитов
Набор символов, применяющийся для записи данных и сортировки
Набор символов немецкого алфавита
Сообщения об ошибках на языках, отличных от английского
Добавление набора символов
Массивы определения символов
Поддержка упорядочивания строк
Поддержка многобайтовых символов
Проблемы с наборами символов
Серверные сценарии и утилиты MySQL
Обзор серверных сценариев и утилит
safe_mysqld, оболочка mysqld
Mysqld_multi, программа для управления множеством серверов MySQL
myisampack, MySQL-генератор сжатых таблиц (только для чтения)
mysqld-max, расширенный сервер mysqld
Клиентские сценарии и утилиты MySQL
Обзор клиентских сценариев и утилит
mysql, Утилита командной строки
mysqladmin, Администрирование MySQL-сервера.
Использование mysqlcheck для сопровождения и аварийного восстановления таблиц.
mysqldump, Получение дампов данных и структуры таблицы
mysqlhotcopy, Копирование баз данных и таблиц MySQL
mysqlimport, импорт данных из текстовых файлов
Просмотр баз данных, таблиц и столбцов
perror, разъяснение кодов ошибок
Как запускать SQL-команды из текстового файла
Файлы журналов MySQL
Журнал ошибок
Общий журнал запросов
Журнал обновлений (update)
Бинарный журнал обновлений
Журнал медленных запросов
Обслуживание файлов журналов
Репликация в MySQL
Введение
Как реализована репликация: обзор
Как настроить репликацию
Возможности репликации и известные проблемы
Опции репликации в файле `my.cnf'
SQL-команды, относящиеся к репликации
Часто задаваемые вопросы по репликации
Поиск неисправностей репликации
Оптимизация в MySQL
Oбзор оптимизации
Конструктивные ограничения MySQL/компромиссы
Вопросы переносимости
Для чего мы использовали MySQL?
Набор тестов MySQL (The MySQL Benchmark Suite)
Использование собственных тестов
Оптимизация SELECT и других запросов
Синтаксис оператора EXPLAIN (получение информации о SELECT)
Оценка производительности запроса
Скорость выполнения запросов SELECT
Как MySQL оптимизирует выражения WHERE
Как MySQL оптимизирует DISTINCT
Как MySQL оптимизирует LEFT JOIN и RIGHT JOIN
Как MySQL оптимизирует ORDER BY
Как MySQL оптимизирует LIMIT
Скорость выполнения запросов INSERT
Скорость выполнения запросов UPDATE
Скорость выполнения запросов DELETE
Другие советы по оптимизации
Вопросы блокировок
Как MySQL блокирует таблицы
Вопросы блокирования таблиц
Оптимизация структуры базы данных
Конструктивные особенности MySQL
Сделайте объем данных как можно меньше

Индексы столбцов
Многостолбцовые индексы
Почему так много открытых таблиц?
Открытие и закрытие таблиц в MySQL
Недостатки создания множества таблиц в одной базе данных
Оптимизация сервера MySQL
Настройка параметров системы, компляции и запуска
Настройка параметров сервера
Как компиляция и линкование влияет на скорость MySQL
Как MySQL использует память
Как MySQL использует DNS
Синтаксис команды SET
Вопросы, относящиеся к диску
Использование символических ссылок
Использование символических ссылок для баз данных
Использование символических ссылок для таблиц
Справочник по языку MySQL
Структура языка
Литералы: представление строк и чисел
Cтроки
Числа
Шестнадцатеричные величины
Значения NULL
Имена баз данных, таблиц, столбцов, индексы псевдонимы
Чувствительность имен к регистру
Переменные пользователя
Синтаксис комментариев
`Придирчив'' ли MySQL к зарезервированным словам?
Типы данных столбцов
Числовые типы данных
Типы данных даты и времени
Проблема 2000 года и типы данных
Типы данных DATETIME, DATE и TIMESTAMP
Тип данных TIME
Тип данных YEAR
Символьные типы данных
Типы данных CHAR и VARCHAR
Типы данных BLOB и TEXT
Тип перечисления ENUM
Тип множества SET
Выбор правильного типа данных в столбце
Использование типов столбцов из других баз данных
Требования к памяти для различных типов столбцов
Функции, используемые в операторах SELECT и WHERE
Операторы и функции общего назначения
Круглые скобки
Операторы сравнения
Логические операторы
Функции потока управления программой
Строковые функции
Функции сравнения строк
Чувствительность к регистру
Числовые функции
Арифметические операции
Математические функции
Функции даты и времени
Функции приведения типов
Другие функции
Битовые функции
Разные функции
Функции, используемые в операторах GROUP BY
Обработка данных: SELECT, INSERT, UPDATE, DELETE
Синтаксис оператора SELECT
Синтаксис оператора JOIN
Синтаксис оператора UNION
Синтаксис оператора HANDLER
Синтаксис оператора INSERT
Синтаксис оператора INSERT ... SELECT
Синтаксис оператора INSERT DELAYED
Синтаксис оператора UPDATE
Синтаксис оператора DELETE
Синтаксис оператора TRUNCATE
Синтаксис оператора REPLACE
Синтаксис оператора LOAD DATA INFILE
Синтаксис оператора DO
Определение данных: CREATE, DROP, ALTER
Синтаксис оператора CREATE DATABASE
Синтаксис оператора DROP DATABASE
Синтаксис оператора CREATE TABLE
Молчаливые изменения определений столбцов
Синтаксис оператора ALTER TABLE
Синтаксис оператора RENAME TABLE
Синтаксис оператора DROP TABLE
Синтаксис оператора CREATE INDEX
Синтаксис оператора DROP INDEX
Основные команды пользовательских программ MySQL
Синтаксис команды USE
Синтаксис команды DESCRIBE (Получение информации о столбцах)
Команды управления транзакциями и блокировками в MySQL
Синтаксис команд BEGIN/COMMIT/ROLLBACK
Синтаксис команд LOCK TABLES/UNLOCK TABLES
Синтаксис команды SET TRANSACTION
Полнотекстовый поиск в MySQL
Ограничения для полнотекстового поиска
Тонкая настройка полнотекстового поиска в MySQL
Предстоящие доработки по полнотекстовому поиску
Кэш запросов в MySQL
Как работает кэширование запросов
Конфигурация кэша запросов
Параметры кэша запросов в запросе SELECT
Статус и поддержка кэша запросов
Типы таблиц MySQL
Таблицы MyISAM
Пространство, необходимое для ключей
Форматы таблиц MyISAM
Характеристики статической таблицы (с фиксированной длиной)
Характеристики динамических таблиц
Характеристики сжатых таблиц
Проблемы с таблицами MyISAM.
Повреждения таблиц MyISAM
Clients is using or hasn't closed the table properly
Таблицы MERGE
Проблемы при работе с таблицами MERGE
Таблицы ISAM
Таблицы HEAP
Таблицы InnoDB
Обзор таблиц InnoDB
Параметры запуска InnoDB
Создание табличной области InnoDB
Если во время создания базы данных что-то происходит не так
Создание таблиц InnoDB
Преобразование таблиц MyISAM в формат InnoDB
Ограничения внешнего ключа
Добавление и удаление файлов данных и журналов InnoDB
Создание резервных копий и восстановление баз данных InnoDB
Контрольные точки
Перенесение базы данных InnoDB на другой компьютер
Транзакционная модель InnoDB
Согласованное чтение
Чтение с блокировкой
Блокировка следующего ключа: устранение проблемы с фантомом
Блокировка, осуществляемая различными операторами SQL в InnoDB
Обнаружение и откат взаимоблокировки (deadlock)
Пример работы согласованного чтения в InnoDB
Рекомендации по увеличению производительности
InnoDB Monitor
Реализация многовариантности
Структуры таблиц и индексов
Физическая структура индекса
Буферизация вставок
Адаптивный хешированный индекс
Физическая структура записи
Как работают автоинкрементные столбцы в InnoDB
Управление файловым пространством и дисковый ввод/вывод
Дисковый ввод/вывод
Управление файловым пространством
Дефрагментация таблицы
Обработка ошибок
Ограничения для таблиц InnoDB
Контактная информация для получения данных по InnoDB
Таблицы BDB или Berkeley_DB
Обзор таблиц BDB
Установка BDB
Параметры запуска BDB
Характеристики таблиц BDB
Что нам нужно исправить в BDB в ближайшем будущем:
Операционные системы, поддерживаемые BDB
Ограничения таблиц BDB
Ошибки, которые могут возникнуть при использовании таблиц BDB
Интерфейсы для MySQL
Интерфейс PHP API для MySQL
Общие проблемы MySQL и PHP
Интерфейс Perl API для MySQL
DBI с помощью DBD::mysql
Интерфейс DBI
Больше информации по DBI/DBD
Поддержка ODBC в MySQL
Как установить MyODBC
Как заполнять различные поля в Администраторе ODBC
Параметры подключения для MyODBC
Как сообщать о проблемах с MyODBC
Программы, работающие с MyODBC
Как получить значение столбца AUTO_INCREMENT в ODBC
Составление отчетов о проблемах с MyODBC
Интерфейс C для MySQL
Типы данных C API
Обзор функций интерфейса C
Описание функций интерфейса C
mysql_affected_rows()
mysql_change_user()
mysql_character_set_name()
mysql_close()
mysql_connect()
mysql_create_db()
mysql_data_seek()
mysql_debug()
mysql_drop_db()
mysql_dump_debug_info()
mysql_eof()
mysql_errno()
mysql_error()
mysql_escape_string()
mysql_fetch_field()
mysql_fetch_field_direct()
mysql_fetch_fields()
mysql_fetch_lengths()
mysql_fetch_row()
mysql_field_count()
mysql_field_seek()
mysql_field_tell()
mysql_free_result()
mysql_get_client_info()
mysql_get_host_info()
mysql_get_proto_info()
mysql_get_server_info()
mysql_info()
mysql_init()
mysql_insert_id()
mysql_kill()
mysql_list_dbs()
mysql_list_fields()
mysql_list_processes()
mysql_list_tables()
mysql_num_fields()
mysql_num_rows()
mysql_options()
mysql_ping()
mysql_query()
mysql_real_connect()
mysql_real_escape_string()
mysql_real_query()
mysql_reload()
mysql_row_seek()
mysql_row_tell()
mysql_select_db()
mysql_shutdown()
mysql_stat()
mysql_store_result()
mysql_thread_id()
mysql_use_result()
Описания функций C, связанных с потоками
my_init()
mysql_thread_init()
mysql_thread_end()
mysql_thread_safe()
Описания функций C, доступных во встраиваемом сервере
mysql_server_init()
mysql_server_end()
Основные вопросы и проблемы в использовании интерфейса C
Почему после успешных возвратов функции mysql_query() функция mysql_store_result() иногда возвращает NULL?
Какие результаты можно получить из запроса?
Как получить уникальный идентификатор для последней внесенной строки?
Проблемы линкования с интерфейсом C
Сборка клиентских программ
Как создать клиентскую программу с потоками
ibmysqld, встраиваемая библиотека сервера MySQL
Обзор библиотеки встраиваемого сервера MySQL
Компиляция программ с libmysqld
Ограничения при использовании встраиваемого сервера MySQL
Использование файлов опций с встраиваемым сервером
Что осталось сделать по встраиваемомуому серверу (TODO)
Пример простого встраиваемого сервера
Лицензирование встраиваемого сервера
Интерфейсы C++
Интерфейс Borland C++
Взаимодействие MySQL и Java (JDBC)
Интерфейсы Python API для MySQL
Интерфейсы Tcl API для MySQL
Оболочка Eiffel для MySQL
Расширение MySQL
Внутреннее устройство MySQL
Потоки MySQL
Пакет тестирования MySQL
Выполнение тестового пакета MySQL
Расширение тестового пакета MySQL
Отчет об ошибках в тестовом пакете MySQL
Добавление новых функций в MySQL
Синтаксис CREATE FUNCTION/DROP FUNCTION
Добавление новой определяемой пользователем функции
Последовательность вызова UDF для простых функций
Последовательность вызова UDF для агрегатных функций
Обработка аргументов
Возвращаемые значения и обработка ошибок
Компиляция и установка определяемых пользователем функций
Добавление новых родных функции
Добавление новой процедуры в MySQL
Процедура Analyse
Написание процедуры
Проблемы и распространенные ошибки
Как определить, чем вызваны проблемы
Распространенные ошибки при использовании MySQL
Ошибка Access denied
Ошибка MySQL server has gone away
Ошибка Can't connect to [local] MySQL server
Ошибка Host '...' is blocked
Ошибка Too many connections
Ошибка Some non-transactional changed tables couldn't be rolled back
Ошибка Out of memory
Ошибка Packet too large
Коммуникационные ошибки / Оборванные соединения
Ошибка The table is full
Ошибка Can't create/write to file
Ошибка в клиенте Commands out of sync
Ошибка Ignoring user
Ошибка Table 'xxx' doesn't exist
Ошибка Can't initialize character set xxx
Не найден файл (File not found)
Вопросы, связанные с инсталляцией
Проблемы при линковании с клиентской библиотекой MySQL
Запуск MySQL от обычного пользователем
Проблемы с правами доступа к файлам
Вопросы, связанные с администрированием
Что делать, если работа MySQL сопровождается постоянными сбоями
Как переустановить забытый пароль пользователя root
Как MySQL реагирует на переполнение диска
Где MySQL хранит временные файлы
Как защитить или изменить сокет-файл MySQL `/tmp/mysql.sock'
Проблемы с часовыми поясами
Проблемы, относящиеся к запросам
Чувствительность к регистру при поиске
Проблемы с использованием столбцов типа DATE
Проблемы со значением NULL
Проблемы с alias
Удаление строк из взаимосвязанных таблиц
Решение проблем с отсутствием строк, удовлетворяющих условиям поиска
Проблемы со сравнением чисел с плавающей точкой
Вопросы, связанные с определением таблиц
Проблемы с ALTER TABLE
Как изменить порядок столбцов в таблице
Проблемы, относящиеся к временным (TEMPORARY) таблицам
Привнесенные программы
Интерфейсы (API)
Клиенты
Веб-инструменты
Средства тестирования производительности
Средства аутентификации
Конверторы
Использование MySQL с другими программными продуктами
Утилиты
RPM общих инструментальных программ (преимущественно для RedHat 6.1)
Полезные функции
Программы для Windows
Не вошедшие в категории
Перенос на другие системы
Отладка сервера MySQL
Компиляция MySQL для отладки
Создание трассировочных файлов
Отладка mysqld при помощи gdb
Использование трассировки стека
Использование журналов для определения причин ошибок в mysqld
Создание контрольного примера при повреждении таблиц
Отладка клиента MySQL
Пакет DBUG
Методы блокировки
Замечания по потокам RTS
Различия между разными потоковыми пакетами
Переменные окружения
Регулярные выражения в MySQL
GNU General Public License
Preamble
Terms and conditions for copying, distribution and modification
How to Apply These Terms to Your New Programs
I GNU Lesser General Public License
Preamble
Terms and conditions for copying, distribution and modification
How to Apply These Terms to Your New Libraries
Команды SQL, функциональное оглавление
Концептуальное оглавление

Советы по Delphi

Сборник коротких, но очень практических советов по работе с Delphi

Очень медленный доступ к таблице
Задание псевдонима программным путем
Создание многомерного массива
Нажатие кнопки
Вызов Delphi DLL из MS Visual C++

Хитрость OnCalcFields
Получение идентификатора диска
Открытие и закрытие привода CD-ROM
Просмотр буфера обмена I
Работа с индексами Clipper'а
Как зарегистрировать OCX?
Программное открытие ComboBox

Директивы компилятора, способные увеличить скорость
Панель Управления
HEX -> Integer
CPU Speed routine
Создание db-файла во время работы приложения
Создание события во время выполнения приложения

Частичный показ DateTime
Таблицы dBASE: Структура .DBF-файла
Различные цвета строк в DBCtrlGrid
Перевод в верхний регистр первого вводимого символа
Использование опции MultiSelect в DBGRID
Проблема хранения TDBImage

Копирование текста DBMemo
Пример KeyDown компонента DBNavigator
Событие OnChange компонента DBRadioGroup
DCOM
Получение данных из Program Manager через DDE

Hard mode без перерыва
Задержка выполнения OnChange (Delphi 2)
Ошибка сохранения текста в Memo
Ошибка в руководстве "Getting Started"
Получение констант с определением ошибки функцией LoadStr
Снимок DESKTOP в form.canvas

Центрирование информационного диалога (MessageDlg)
Drag & Drop c Win95 Explorer I
Пример TDrawGrid Drawcell
Массив Edit-компонентов Procedure
Битное кодирование/декодирование I
Перехват ошибок DBEngine

DLL и ресурсы
Исключения в Delphi
FileListBox с двумя колонками...как
Поиск величины при вводе I
Как мне проверить готовность диска 'a:'? I

Как приложению воспользоваться своими шрифтами?
Заголовок TGA-файла
Серийный номер тома
Процедура форматирования
Header1
Оглавление файлов помощи

Вывод окна CPU (дизассемблер)
Изображение не масштабируется
Автоматический logon к локальной InterBase
Переход с Oracle на Interbase
Контроль джойстика в Delphi
Звуковой сигнал при нажатии <ENTER>

Label1
Изменение шрифта в Listbox
TListView, TTreeView
Перехват клавиши SHIFT во время выбора пункта меню
FFT аглоритм для Delphi
Прокрутка Memo
Общий доступ к памяти, распределенной DLL

Предел сегмента данных в 64K
Сообщения Windows
Перекрытие виртуальных методов
AT-команды модема
Добавление события OnMouseLeave
Excel

MAPI и MS Exchange
Delphi/MS Office 97/OLE/VB для приложений
Получение данных из Delphi-приложения в документе Word
Обзор сети
События OnClick/Onchange компонента Notebook

Создание объектных переменных
Конфигурирование ODBC
OLE тестер
Связь с personal Oracle
Ханойская башня
Извлечение из EXE-файла иконки и рисование ее в TImage
Высокоточный таймер
Сканирование версии структуры базы данных
FTP4W32.DLL и Delphi 2.0

Делегирование события
Сокращенное имя каталога
Каталог вашего приложения
Массив компонентов
Пример использования ActiveControl
Производная TOutline

Перемещение мышью панели на форме во время выполнения программы
Форматированные Memo-поля таблиц Paradox
Пример переменного количества параметров
Как избежать использования неактуальных указателей
Как динамически создавать пункты подменю в PopupMenu
Работа с последовательными портами

Управление монитором
Управляющие коды принтера
ProgressBar в StatusBar
Код определения свойств
Пример защиты типа SHAREWARE

Поиск записи с помощью TQuery
Проблемы со шрифтами у QuickReport
Текущий номер записи
Как удалить файлы в корзину
Регистры - доступ и использование вместо WIN.INI

Передача переменных отчета в ReportSmith
Таблицы строк
Чтение текста RichEdit из базы данных
Создание хранителя экрана
Синхронизация двух компонентов Scrollbox

Как создавать ярлыки
События, происходящие в приложениях Delphi при завершении работы Windows
Низкоуровневые процедуры обработки звука
Конструирование Splitter
Имя SQL-таблицы
Обработчик события OwnerDraw в компоненте StatusBar

Реализация собственного потока
Установка атрибутов
Эквивалент Trim$(),Mid$()
Добавление элементов управления в TTabbedNotebook и TNotebook

Создание компонента TTable без формы
Перемещение на страницу Tabset по имени
Больше цветов
Поиск строки текста в наследниках TCustmoEdit
Информация о TDataLink

Dos Copy через TFileStream
Delphi-приложения без форм
Канва от THandle
Рассуждения о потоках

TMetafile - ошибка при работе с памятью
Недокументированный TParser
Ускорение работы TreeView
Подсказка по работе TRegIniFile
Сохранение и чтение из потока данных объекта
TStringList в TIniFile
Пример TWriter/TReader

Огромные числа
Не работает функция Writeln
Получение переменных окружения DOS
Visual Basic "Beep" в Delphi
Пример DDE & WordPerfect

Самоучитель по Delphi 7 для профессионалов

Несколько лет назад книгу по Delphi 2 или 3 надо было начинать с азов объектно-ориентированного программирования (ООП). Многие только переходили к Delphi из DOS, многие использовали Borland Pascal for Windows и работали с Windows API напрямую. Объекты еще были в диковинку, и полное разъяснение новых принципов было просто обязательно.
Но и сейчас писать об этом вполне актуально. Конечно, выросло поколение программистов, которые "с молоком матери" впитали новые понятия. Но от понимания объектов до их грамотного использования — дистанция огромного размера. Для создания более или менее сложных приложений нужны навыки объектно-ориентированного дизайна, а для приложений в свою очередь — четкое знание возможностей вашей среды программирования. Поэтому в данной главе мы постараемся акцентировать внимание читателя на применение ООП в среде Delphi 7.
По сравнению с традиционными способами программирования ООП обладает рядом преимуществ. Главное из них заключается в том, что эта концепция в наибольшей степени соответствует внутренней логике функционирования операционной системы (ОС) Windows. Программа, состоящая из отдельных объектов, отлично приспособлена к реагированию на события, происходящие в ОС. К другим преимуществам ООП можно отнести большую надежность кода и возможность повторного использования отработанных объектов.

Объектно-ориентированное программирование
Библиотека визуальных компонентов VCL и ее базовые классы
Обработка исключительных ситуаций
Кроссплатформенное программирование для Linux
Элементы управления Win32

Элементы управления Windows XP
Списки и коллекции
Действия (Actions) и связанные с ними компоненты
Файлы и устройства ввода/вывода
Использование графики
Архитектура приложений баз данных

Набор данных
Поля и типы данных
Механизмы управления данными
Компоненты отображения данных
Процессор баз данных Borland Database Engine

Технология dbExpress
Сервер баз данных InterBase и компоненты InterBase Express
Использование ADO средствами Delphi
Технология DataSnap. Механизмы удаленного доступа
Сервер приложения

Клиент многозвенного распределенного приложения
Компоненты Rave Reports и отчеты в приложении Delphi
Визуальная среда создания отчетов
Разработка, просмотр и печать отчетов

Отчеты для приложений баз данных
Стандартные технологии программирования
Динамические библиотеки
Потоки и процессы
Многомерное представление данных
Использование возможностей Shell API

Глубины Indy

Indy отличается от других сокетных компонент, с которыми вы возможно уже знакомы. Если вы никогда не работали с другими сокетными компонентами, возможно, вы найдете, что Indy очень прост, так как Indy работает так как вы ожидали. Если вы уже работали с другими сокетными компонентами, то просто забудьте все, что вы знали. Это будет вам только мешать и вы будете делать ложные предпосылки.
Почти все другие компоненты работают в неблокирующем режиме, асинхронно. Они требуют от вас реагировать на события, создавать машину состояний и часто исполнять циклы ожидания. Например, с другими компонентами, когда вы делаете соединения, то вы должны ожидать событие соединения или крутить цикл ожидания, пока свойство, ухаживающие факт соединение не будет установлено. С Indy, вы просто вызываете метод Connect и просто ждете возврата из него. Если соединение будет успешное, то будет возврат из метода по окончанию соединения. Если же соединение не произойдет, то будет возбуждено исключение.
Работа с Indy аналогична работе с файлами. Indy позволяет поместить весь код в одно место, вместо создания различных разработчиков событий. В дополнение, многие находят Indy более простым в использовании. Indy также разработан на работу с потоками. Если вы имеет проблемы с реализацией чего-либо в Indy, то вернитесь назад и реализуйте это как для файлов.

Методология Indy
Прозрачные прокси
Небезопасный код