Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / условие при создании таблицы / 12 сообщений из 12, страница 1 из 1
17.10.2014, 07:18:30
    #38779314
Lexxk27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Доброго времени суток, сразу скажу что мало понимаю в sql. Да мне и не надо обычно :)
Могли бы гуру мне бы подсказать в одном вопросе.

Есть скрипт создания таблицы
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE IF NOT EXISTS `test` (
	`id` int(14)  auto_increment,
	`parent` varchar(50) default '0',
	`weight` int(14) NOT NULL,
	PRIMARY KEY  (`id`)				
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=3 ;



Так вот как задать условие что бы полу weight если оно не указано явно, по умолчанию ровнялось полю id .
Сделал через UPDATE. Но вот интересно можно ли сразу задать такое условие полю в таблице.
...
Рейтинг: 0 / 0
17.10.2014, 07:32:39
    #38779317
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Lexxk27Доброго времени суток, сразу скажу что мало понимаю в sql. Да мне и не надо обычно :)
Могли бы гуру мне бы подсказать в одном вопросе.

Есть скрипт создания таблицы
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE IF NOT EXISTS `test` (
	`id` int(14)  auto_increment,
	`parent` varchar(50) default '0',
	`weight` int(14) NOT NULL,
	PRIMARY KEY  (`id`)				
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=3 ;



Так вот как задать условие что бы полу weight если оно не указано явно, по умолчанию ровнялось полю id .
Сделал через UPDATE. Но вот интересно можно ли сразу задать такое условие полю в таблице.


это называется default constraint,
его можно указать на поле в create table, но только там допустимо указывать только константы .

такое делается либо триггером, либо можно просто в приложении всегда задавать одно и то же значение для этих полей.
...
Рейтинг: 0 / 0
17.10.2014, 07:36:09
    #38779318
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
MasterZiv,
либо еще вариант - задать дефолт Null и потом в запросах подставлять вместо этого null id.
...
Рейтинг: 0 / 0
17.10.2014, 13:07:03
    #38779847
Lexxk27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Спс за советы. Так и не разобрался правда. Сроки жмут. Оставлю пока как сделал. Потом может переделаю :)
Если разберусь
...
Рейтинг: 0 / 0
17.10.2014, 13:57:15
    #38779975
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Lexxk27Спс за советы. Так и не разобрался правда. Сроки жмут. Оставлю пока как сделал. Потом может переделаю :)
Если разберусь

Что тут разбираться?

Средствами DDL (create table) это не сделать.
Надо делать самому руками, в том числе, возможный вариант -- как у тебя сейчас.
...
Рейтинг: 0 / 0
17.10.2014, 14:52:02
    #38780081
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Lexxk27,

три строчки кода примеры на офф.сайте
Код: sql
1.
2.
3.
CREATE DEFINER = 'root'@'localhost' TRIGGER test.trigger1
	BEFORE INSERT 	ON test.test
	FOR EACH ROW BEGIN   set new.weight=new.id; END
...
Рейтинг: 0 / 0
17.10.2014, 16:00:40
    #38780219
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
На этой структуре ничего не получится. Поскольку weight NOT NULL - в запросе на добавление ОБЯЗАНО быть значение для этого поля.
...
Рейтинг: 0 / 0
17.10.2014, 16:04:47
    #38780231
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Alex_UstinovLexxk27,

три строчки кода примеры на офф.сайте
Код: sql
1.
2.
3.
CREATE DEFINER = 'root'@'localhost' TRIGGER test.trigger1
	BEFORE INSERT 	ON test.test
	FOR EACH ROW BEGIN   set new.weight=new.id; END

Не сработает. В момент BEFORE INSERT автоинкремент ещё не имеет значения, все weight получат нулевое значение.
...
Рейтинг: 0 / 0
17.10.2014, 17:23:05
    #38780414
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
все проверено, не вводите в заблуждение.
можно в After но с олд (??? олд менять нельзя). Нью в Афте не работает.
Так что в бифо и с нью
Первый вставляется автоинкремент. Проверьте. Я ж все запулил в тестовой базе... видно по тексту
...
Рейтинг: 0 / 0
17.10.2014, 17:53:37
    #38780429
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.14-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE TABLE IF NOT EXISTS `test` (
    ->  `id` int(14)  auto_increment,
    ->  `parent` varchar(50) default '0',
    ->  `weight` int(14) NULL,
    ->  PRIMARY KEY  (`id`)
    -> );
Query OK, 0 rows affected (0.14 sec)

mysql> CREATE TRIGGER test.trigger1
    -> BEFORE INSERT ON test.test
    -> FOR EACH ROW set new.weight=new.id;
Query OK, 0 rows affected (0.20 sec)

mysql> INSERT INTO test(parent) VALUES (null),(1),(1),(null),(3);
Query OK, 5 rows affected (0.04 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
+----+--------+--------+
| id | parent | weight |
+----+--------+--------+
|  1 | NULL   |      0 |
|  2 | 1      |      0 |
|  3 | 1      |      0 |
|  4 | NULL   |      0 |
|  5 | 3      |      0 |
+----+--------+--------+
5 rows in set (0.00 sec)

Я вижу нули. У Вас иначе? цитату покажите...
...
Рейтинг: 0 / 0
17.10.2014, 18:01:23
    #38780437
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Увы...
http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html In a BEFORE trigger, the NEW value for an AUTO_INCREMENT column is 0, not the sequence number that is generated automatically when the new row actually is inserted.
...
Рейтинг: 0 / 0
17.10.2014, 19:14:30
    #38780493
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
условие при создании таблицы
Akina,
miksoft,
да вы правы. Проверял в ГУИ - гриде. Так не пойдет.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / условие при создании таблицы / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]