K4:Работа с базой данных
From In-Portal Developers Guide
(→Добавление колонок в таблицу) |
Current revision (08:12, 25 August 2015) (view source) (→Добавление колонок в таблицу) |
||
| Line 68: | Line 68: | ||
{{InfoBox|В каждой таблице должен быть '''основной ключ''' (primary key). Этот ключ всегда должен состоять из '''одной цифровой колонки''' и не должен быть <code>UNSIGNED</code>.}} | {{InfoBox|В каждой таблице должен быть '''основной ключ''' (primary key). Этот ключ всегда должен состоять из '''одной цифровой колонки''' и не должен быть <code>UNSIGNED</code>.}} | ||
| + | |||
| + | === Значение по умолчанию === | ||
| + | Значение по умолчанию должно явно указано в декларации поля добавлением <code>DEFAULT ...</code> части в SQL. | ||
=== Использование слова NULL === | === Использование слова NULL === | ||
Current revision
| ||
|---|---|---|
| Статьи в этой категории | ||
|
Contents |
При работе с базой данных следует использовать экземпляр класса kDBConnection доступный через атрибут Conn почти у каждого класса. В общем случае это выглядит так:
$result = $this->Conn->MethodName($params);
Вместо MethodName можно использовать методы описанные далее. Универсальная проверка на присутствие данных в ответе на запрос может выглядеть так:
if ($result) { // код будет выполнен только в случае удачного // завершения запроса и при наличии данных }
| | При изменении данных в базе в ручную не забывайте изменять данные в связанных таблицах, иначе может нарушится целостность данных (data integrity) в базе. |
Выборка данных из базы
| название метода | описание метода |
|---|---|
GetOne (mixed) | Возвращает первое поля первого ряда из запроса. |
GetRow (array) | Возвращает первый ряд запроса. |
GetCol (array) | Возвращает первую колонку из запроса. |
Query (array) | Выбирает все записи из базы под данному sql запросу. |
При неудачной выборке будет возвращён false или пустой массив.
Обработка результатов запроса
| название метода | описание метода |
|---|---|
getInsertID (int) | Получить ID (из колонки autoincrement типа) от последней вставленной записи. |
getAffectedRows (int) | Вернуть количество рядов, которые изменил/выбрал запрос. |
qstr (string) | Экранировать строку для вставки в sql запрос (также ставит апострофы вокруг строки). |
TableFound (boolean) | Узнать есть-ли таблица в базе данных. |
Изменение данных в базе
| название метода | описание метода |
|---|---|
doInsert | Вставит данные из ассоциативного массива. |
doUpdate | Обновить данные из ассоциативного массива. |
Добавление колонок в таблицу
При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки:
- сумма (деньги) - тип
DECIMAL(20,2)иNOT NULL - дата (timestamp) - тип
INT(11)иNULL - короткий текст (имя/фамилия, до 8KB) -
VARCHAR(255)иNOT NULL - текст средней длинны (описание, от 8KB байт и до 64KB) -
TEXTиNULL - длинный текст (описание, от 64KB и до 4MB) -
LONGTEXTиNULL
В следующих случаях нужно всегда ставить INDEX на колонку:
- колонка содержит дату;
- колонка содержит статус записи, напр.
Active/Disabled; - колонка указывает на то, что запись основная, т.е.
IsPrimary; - по колонке будет делаться сортировка и колонка цифровая, напр.
Order,Priority; - по колонке может быть сделать
JOIN; - колонка является
ForeignKey.
| | В каждой таблице должен быть основной ключ (primary key). Этот ключ всегда должен состоять из одной цифровой колонки и не должен быть UNSIGNED.
|
Значение по умолчанию
Значение по умолчанию должно явно указано в декларации поля добавлением DEFAULT ... части в SQL.
Использование слова NULL
Если, и только если, требуется знать факт отсутствия значения в колонке, то её надо создавать, какNULL. Во всех остальных случаях колонка должна быть NOT NULL. | | Все колонки типов TINYTEXT, TEXT, LONGTEXT должны быть NULL без DEFAULT значения (требование в MySQL5).
|
Использование слова UNSIGNED
Если присутствует 100% уверенность в том, что в колонке не может быть отрицательных значений, то колонку нужно делать UNSIGNED. Колонки, где храниться timestamp нельзя делать UNSIGNED в тех случаях, когда
- в колонке с датой может быть дата меньше 1 января 1970 года;
- в колонке находиться только время (без даты).
