Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO ts3 VALUES (NULL, 'mothra');
Query OK, 1 row affected (0.00 sec)
Осматривая файловую систему, Вы можете проверить, что первая из этих инструкций вставила новую строку в раздел p3 таблицы ts2, а вторая инструкция вставила новую строку в раздел p1 таблицы ts3:
/var/lib/mysql/test> ls -l ts2*.MYD
– rw-rw---- 1 mysql mysql 0 2006-03-10 10:35 ts2#P#p0.MYD
– rw-rw---- 1 mysql mysql 0 2006-03-10 10:35 ts2#P#p1.MYD
– rw-rw---- 1 mysql mysql 0 2006-03-10 10:35 ts2#P#p2.MYD
– rw-rw---- 1 mysql mysql 20 2006-03-10 10:35 ts2#P#p3.MYD
/var/lib/mysql/test> ls -l ts3*.MYD
– rw-rw---- 1 mysql mysql 0 2006-03-10 10:36 ts3#P#p0.MYD
– rw-rw---- 1 mysql mysql 20 2006-03-10 10:36 ts3#P#p1.MYD
– rw-rw---- 1 mysql mysql 0 2006-03-10 10:36 ts3#P#p2.MYD
Как в более ранних примерах, мы принимаем использование оболочки bash в операционной системе для Unix для списка файлов. Например, если Вы используете оболочку DOS в операционной системе Windows эквивалент последнего вывода мог быть получен, выполняя команду dir ts3*.MYD в каталоге C:Program FilesMySQLMySQL Server 5.1data est.
Как показано ранее в этом разделе, Вы можете также проверять, которые разделы использовались для сохранения значений удаляя их, а затем выполняя SELECT.
NULL обработан несколько по-другому для таблиц, разбитых на разделы HASH или KEY. В этих случаях любое выражение раздела, которое выдает значение NULL, обрабатывается, как если бы возвращаемое значение было нулевым. Мы можем проверять это поведение, исследуя эффекты в файловой системе от создания таблицы, разбитой на разделы HASH и начальной загрузкой с записью, содержащей соответствующие значения. Предположите, что Вы имеете таблицу th, созданную в базе данных test, используя эту инструкцию:
mysql> CREATE TABLE th (c1 INT, c2 VARCHAR(20))
– > PARTITION BY HASH(c1) PARTITIONS 2;
Query OK, 0 rows affected (0.00 sec)
При принятии установки RPM MySQL под Linux, эта инструкция создает два .MYD-файла в /var/lib/mysql/test, которые могут просматриваться в оболочке bash следующим образом:
/var/lib/mysql/test> ls th*.MYD -l
– rw-rw---- 1 mysql mysql 0 2005-11-04 18:41 th#P#p0.MYD
– rw-rw---- 1 mysql mysql 0 2005-11-04 18:41 th#P#p1.MYD
Обратите внимание, что размер каждого файла 0 байтов. Теперь вставьте в th строку, чей столбец c1 является NULL, и проверьте, что эта строка была вставлена:
mysql> INSERT INTO th VALUES (NULL, 'mothra');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM th;
+------+---------+
| c1 | c2 |
+------+---------+
| NULL | mothra |
+------+---------+
1 row in set (0.01 sec)
Заметьте, что для любого целого числа
var/lib/mysql/test> ls *.MYD -l
– rw-rw---- 1 mysql mysql 20 2005-11-04 18:44 th#P#p0.MYD
– rw-rw---- 1 mysql mysql 0 2005-11-04 18:41 th#P#p1.MYD
Вы можете видеть, что инструкция INSERT изменила только файл th#P#p0.MYD (увеличение размера на диске) без того, чтобы воздействовать на другой файл данных.
Важно: до MySQL 5.1.8 выделение разделов по RANGE значение выражения выделения разделов NULL работало как 0 (единственный способ обходить это должен был разработать таблицы так, чтобы не позволить пустые указатели, обычно объявляя столбцы NOT NULL). Если Вы имеете схему выделения разделов RANGE, которая зависит от этого более раннего поведения, Вы будете должны заново выполнить это при обновлении до MySQL 5.1.8 или позже.
3.3. Управление разделами
MySQL 5.1 обеспечивает ряд способов изменить разбитые на разделы таблицы. Возможно добавлять, удалять, переопределять, объединять или расчленять существующие разделы. Все эти действия могут быть выполнены, используя расширения выделения разделов к команде ALTER TABLE. Имеются также способы получить информацию относительно разбитых на разделы таблиц и разделов.
Обратите внимание: в MySQL 5.1 все разделы разбитой на разделы таблицы должны иметь то же самое число подразделов, и невозможно изменить подвыделение разделов, если только таблица была создана.
Инструкция ALTER TABLE … PARTITION BY … доступна с MySQL 5.1.6, предварительно, в MySQL 5.1, это было принято как допустимый синтаксис, но инструкция не делала ничего.
Чтобы изменять схему выделения разделов таблицы, необходимо использовать команду ALTER TABLE с предложением
CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)
PARTITION BY RANGE(YEAR(purchased)) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),