powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / условие при создании таблицы
12 сообщений из 12, страница 1 из 1
условие при создании таблицы
    #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
условие при создании таблицы
    #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
условие при создании таблицы
    #38779318
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
либо еще вариант - задать дефолт Null и потом в запросах подставлять вместо этого null id.
...
Рейтинг: 0 / 0
условие при создании таблицы
    #38779847
Lexxk27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спс за советы. Так и не разобрался правда. Сроки жмут. Оставлю пока как сделал. Потом может переделаю :)
Если разберусь
...
Рейтинг: 0 / 0
условие при создании таблицы
    #38779975
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxk27Спс за советы. Так и не разобрался правда. Сроки жмут. Оставлю пока как сделал. Потом может переделаю :)
Если разберусь

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

Средствами DDL (create table) это не сделать.
Надо делать самому руками, в том числе, возможный вариант -- как у тебя сейчас.
...
Рейтинг: 0 / 0
условие при создании таблицы
    #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
условие при создании таблицы
    #38780219
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этой структуре ничего не получится. Поскольку weight NOT NULL - в запросе на добавление ОБЯЗАНО быть значение для этого поля.
...
Рейтинг: 0 / 0
условие при создании таблицы
    #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
условие при создании таблицы
    #38780414
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все проверено, не вводите в заблуждение.
можно в After но с олд (??? олд менять нельзя). Нью в Афте не работает.
Так что в бифо и с нью
Первый вставляется автоинкремент. Проверьте. Я ж все запулил в тестовой базе... видно по тексту
...
Рейтинг: 0 / 0
условие при создании таблицы
    #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
условие при создании таблицы
    #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
условие при создании таблицы
    #38780493
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
miksoft,
да вы правы. Проверял в ГУИ - гриде. Так не пойдет.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / условие при создании таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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