SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.12.2008 15:30:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Ограничение на добавление данных в представление

В документации http://dev.mysql.com/doc/refman/5.1/en/ … ility.html

Сказано, что для добавления данных в представление необходимо выполнение следующего условия:
The view must contain all columns in the base table that do not have a default value.

Вообще-то, у меня добавляет несмотря на то, что есть поле (poster) не имеющее дефолтного значения. Пример выполнен на базе форума punbb, так что его легко повторить.


punbb >set sql_mode='traditional';
Query OK, 0 rows affected (0.00 sec)

punbb >describe topics;
+--------------+-----------------------+------+-----+---------+----------------+
| Field        | Type                  | Null | Key | Default | Extra          |
+--------------+-----------------------+------+-----+---------+----------------+
| id           | int(10) unsigned      | NO   | PRI | NULL    | auto_increment |
| poster       | varchar(200)          | NO   |     |         |                |
| subject      | varchar(255)          | NO   |     |         |                |
| posted       | int(10) unsigned      | NO   |     | 0       |                |
| last_post    | int(10) unsigned      | NO   |     | 0       |                |
| last_post_id | int(10) unsigned      | NO   |     | 0       |                |
| last_poster  | varchar(200)          | YES  |     | NULL    |                |
| num_views    | mediumint(8) unsigned | NO   |     | 0       |                |
| num_replies  | mediumint(8) unsigned | NO   |     | 0       |                |
| closed       | tinyint(1)            | NO   |     | 0       |                |
| sticky       | tinyint(1)            | NO   |     | 0       |                |
| moved_to     | int(10) unsigned      | YES  | MUL | NULL    |                |
| forum_id     | int(10) unsigned      | NO   | MUL | 0       |                |
+--------------+-----------------------+------+-----+---------+----------------+
13 rows in set (0.03 sec)

punbb >CREATE OR REPLACE VIEW v AS
    -> SELECT forum_name, `subject`, num_views FROM topics,forums f
    -> WHERE forum_id=f.id AND num_views>2000;
Query OK, 0 rows affected (0.05 sec)

punbb >insert into v (`subject`) values('test');
Query OK, 1 row affected (0.00 sec)

punbb >select * from topics where `subject`='test'\G
*************************** 1. row ***************************
          id: 1140
      poster:
     subject: test
      posted: 0
   last_post: 0
last_post_id: 0
 last_poster: NULL
   num_views: 0
 num_replies: 0
      closed: 0
      sticky: 0
    moved_to: NULL
    forum_id: 0
1 row in set (0.00 sec)
 


Поле poster не имеет дефолтного значения, однако добавляет зараза. В чем прикол?

Неактивен

 

#2 05.12.2008 16:25:19

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Ограничение на добавление данных в представление

Кажется, ты неправильно интерпретируешь пустое место возле poster. Там есть
значение по-умолчанию, и оно - пустая строка:

[aquatica] root test > set sql_mode='traditional';
Query OK, 0 rows affected (0.01 sec)

[aquatica] root test > create table t (a int not null, b int not null);
Query OK, 0 rows affected (0.02 sec)

[aquatica] root test > insert t(a) values (1);
ERROR 1364 (HY000): Field 'b' doesn''t have a default value

[aquatica] root test > create view v as select a from t;
Query OK, 0 rows affected (0.01 sec)

[aquatica] root test > insert v(a) values (1);
ERROR 1423 (HY000): Field of view 'test.v' underlying table doesn''t have a default value

[aquatica] root test > desc t;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| a     | int(11) | NO   |     | NULL    |       |
| b     | int(11) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 

Неактивен

 

#3 05.12.2008 16:31:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: Ограничение на добавление данных в представление

Да, действительно. Вопрос снимается. Спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson