Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Date Default / 14 сообщений из 14, страница 1 из 1
24.02.2020, 08:08
    #39930124
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
Добрый день. MySQL 5.7 В таблице поле типа Date. Можно ли как-то указать ему дефолтовое значение - текущую дату? В полях типа DateTime прекрасно работает Default Now(), CurDate() почему-то он уже не понимает...
...
Рейтинг: 0 / 0
24.02.2020, 10:28
    #39930139
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
S_Gur
Можно ли как-то указать ему дефолтовое значение - текущую дату?

Нет. Версия маловата. Это на 8+ можно будет использовать выражение.

Используйте триггер:
Код: sql
1.
2.
3.
4.
5.
CREATE TRIGGER set_default_to_date
BEFORE INSERT
ON tablename
FOR EACH ROW
SET NEW.datefield = COALESCE(NEW.datefield, CURRENT_DATE);
...
Рейтинг: 0 / 0
24.02.2020, 11:03
    #39930146
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
Akina, жалко. Я хотел обойтись без триггера. А в описании индекса тоже никаких подобных конструкций не существует? Мне, собственно, нужна дата со временем и уникальный индекс, который включает в себя только эту дату без времени. В принципе, я меняю данные хранимыми процедурами, просто хотелось немного уменьшить их код
...
Рейтинг: 0 / 0
24.02.2020, 14:26
    #39930201
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
Блин, вот как вы все любите спросить одно, когда нужно совсем другое..

https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html
https://dev.mysql.com/doc/refman/5.7/en/create-table-secondary-indexes.html
...
Рейтинг: 0 / 0
24.02.2020, 14:39
    #39930208
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
Akina, я спрашивал именно то, что мне нужно. Заметь - не то, что ты себе представляешь, а то, что мне действительно нужно. Самым простым способом добиться того, что мне нужно, без написания триггера или лишнего кода в хранимке - это либо создать уникальный индекс на обрезанную от времени дату - что, как я понимаю, невозможно, - либо держать второе поле типа Date, в которое при записи обрезать от времени основной DateTime и строить индекс по нему. Альтернатива этому - либо триггер, либо совсем обойтись без индекса (благо, таблица небольшая) и проверять уникальность в коде процедуры. В общем-то, проблема решена и ответы на мои вопросы получены. Тема закрыта, спасибо
...
Рейтинг: 0 / 0
24.02.2020, 14:44
    #39930212
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
S_Gur
создать уникальный индекс на обрезанную от времени дату - что, как я понимаю, невозможно
Как я понимаю, ссылки, которые дал Akina, говорят об обратном.
...
Рейтинг: 0 / 0
24.02.2020, 15:06
    #39930219
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
miksoft, ты плохо прочел мой предыдущий пост. В ссылках как раз показывается, как создать второе поле нужного мне типа, я не говорил, что это невозможно. Немного неудобно держать в таблице лишнее поле, но в принципе это решает мою проблему, как я и написал. Создать индекс на предварительно обработанное поле - что-то типа Create Unique Undex I1 On Table1(Date(Table1.FieldDateTime)) - насколько я понял из этих ссылок, невозможно... Либо я чего-то не нашел
...
Рейтинг: 0 / 0
24.02.2020, 17:21
    #39930263
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
S_Gur,

Полноценные FBI появились только в 8 версии MySQL.
Но в версии 5.7 можно сделать генерируемое поле, даже без его физического хранения, и по этому полю построить индекс. Что есть практически тот же FBI, за исключением того, что в SELECT * станет больше полей. Но это не считаю критичным, т.к. в боевых запросах звездочку писать и без этого плохая практика.
...
Рейтинг: 0 / 0
24.02.2020, 19:08
    #39930304
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
S_Gur
Либо я чего-то не нашел
Да.
Слова VIRTUAL.
...
Рейтинг: 0 / 0
25.02.2020, 12:40
    #39930533
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
Akina, нет, не упустил. Virtual мне в данном случае вовсе не помогает. Это разновидность второго поля, которое - физически или виртуально - сидит в таблице и в коде мне приходится по мере надобности обращаться то к одному, то к другому. Этого я хотел бы избежать, но не получилось. Я уже упоминал, что таблица у меня небольшая, будет это поле физическим или виртуальным - мне абсолютно фиолетово. А конструкция `dtDateOnly` Date As (Date(`dtDate`)) Not Null Comment 'Дата документа' в Create Table меня вполне устраивает и прекрасно работает. Я очень надеялся, что в MySQL есть какая-то конструкция, которая позволяет строить индекс по обработанному предварительно полю из таблицы - как я писал, что-то типа Create Unique Undex I1 On Table1(Date(Table1.FieldDateTime)), не трогая ради этого структуру таблицы вообще.
...
Рейтинг: 0 / 0
25.02.2020, 14:06
    #39930609
paver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
S_Gur
Мне, собственно, нужна дата со временем и уникальный индекс, который включает в себя только эту дату без времени.

Нифига не понял (я чайник, да). Если нужна дата со временем, то причем тут поле типа Date? А если есть DateTime, что мешает сделать индекс только по дате?
...
Рейтинг: 0 / 0
25.02.2020, 15:48
    #39930663
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
paver
А если есть DateTime, что мешает сделать индекс только по дате?
Нежелание товарища создавать вычисляемое поле для индексирования по нему, даже виртуальное. Ну имеет право... об обновлении версии даже заикаться боюсь.
...
Рейтинг: 0 / 0
25.02.2020, 17:01
    #39930701
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
Akina, обновление версии пока невозможно, это не от меня зависит. А вычисляемое поле я сделал еще вчера, построил по нему индекс и вроде бы даже поблагодарил за помощь. Разве нет? :-)
...
Рейтинг: 0 / 0
25.02.2020, 17:27
    #39930712
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Date Default
paver, есть такая штука, как бизнес-процесс... Мне нужна дата со временем для одного процесса, и эта же самая дата, только без времени - для другого
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Date Default / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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