K4:Работа с базой данных
From In-Portal Developers Guide
m (категория) |
Current revision (08:12, 25 August 2015) (view source) (→Добавление колонок в таблицу) |
||
(3 intermediate revisions not shown.) | |||
Line 53: | Line 53: | ||
== Добавление колонок в таблицу == | == Добавление колонок в таблицу == | ||
При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки: | При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки: | ||
- | * сумма (деньги) - тип '''<code>DECIMAL( | + | * сумма (деньги) - тип '''<code>DECIMAL(20,2)</code>''' и '''<code>NOT NULL</code>''' |
* дата (timestamp) - тип '''<code>INT(11)</code>''' и '''<code>NULL</code>''' | * дата (timestamp) - тип '''<code>INT(11)</code>''' и '''<code>NULL</code>''' | ||
- | * короткий текст (имя/фамилия) - '''<code>VARCHAR(255)</code>''' и '''<code>NOT NULL</code>''' | + | * короткий текст (имя/фамилия, до 8KB) - '''<code>VARCHAR(255)</code>''' и '''<code>NOT NULL</code>''' |
- | * текст средней длинны (описание, от | + | * текст средней длинны (описание, от 8KB байт и до 64KB) - '''<code>TEXT</code>''' и '''<code>NULL</code>''' |
* длинный текст (описание, от 64KB и до 4MB) - '''<code>LONGTEXT</code>''' и '''<code>NULL</code>''' | * длинный текст (описание, от 64KB и до 4MB) - '''<code>LONGTEXT</code>''' и '''<code>NULL</code>''' | ||
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 года;
- в колонке находиться только время (без даты).