Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2017, 15:22   #1
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию Типы данных и значение NULL

Доброго времени суток господа форумчане!

Изучаю MySQL, почитал, помучил консоль и решил создавать таблицы, ну, чтобы понимание так сказать случилось к данному процессу и соответственно, пришлось вернуться к началу моего изучения.
Вернувшись оказалось не всё так просто, начали появляться дополнительные вопросы которые в дальнейшем будут возникать и возникать, соответственно я буду писать и писать на форум, и очень надеюсь на ваши знания и опыт господа ЗНАТОКИ ПРОГРАММИРОВАНИЯ.

Вот здесь запросы для создания таблиц в базе данных:

Код:
mysql> CREATE TABLE person
> (person_id SMALLINT UNSIGNED,
> fname VARCHAR(20),
> lname VARCHAR(20),
> gender ENUM('M','F'),
> birth_date DATE,
> address VARCHAR(30),
> city VARCHAR(20),
> state VARCHAR(20),
> country VARCHAR(20),
> postal_code VARCHAR(20),
> CONSTRAINT pk_person PRIMARY KEY (person_id)
> );


Код:
CREATE TABLE `users` (
 
  id int unsigned NOT NULL AUTO_INCREMENT,
  email varchar(128) NOT NULL,
  first_name varchar(32) NOT NULL,
  last_name varchar(32) NOT NULL,
  gender char(1) NOT NULL,
  age TINYINT NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY email (email)
 
) ENGINE=InnoDB;


Код:
CREATE TABLE `users` (
 
  id int unsigned NOT NULL AUTO_INCREMENT,
  email varchar(128) NOT NULL,
  first_name varchar(32) NOT NULL,
  last_name varchar(32) NOT NULL,
  gender char(1) NOT NULL DEFAULT ' ' ,
  age TINYINT NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  UNIQUE KEY email (email)
 
) ENGINE=InnoDB;

В первом случае на NULL вообще нет ни какого намёка, во втором, что строка не должна быть пустой, а в третьем случае, что в строке "род" может быть пустая строка и в строке "возраст" может быть значение 0.
В каких случаях стоит это все применять "NOT NULL" и "NOT NULL DEFAULT " " "и "...DEFAULT 0"?
Если всё работает в первом случае, то зачем тогда "NOT NULL"? или без такового можно в строках вообще ничего не размещать?


Заранее всем спасибо и с наилучшими пожеланиями!



"Жизнь, как красивая мелодия, только песни перепутались."

Ганс Христиан Андерсен
gryllus вне форума Ответить с цитированием
Старый 16.11.2017, 15:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
а в третьем случае, что в строке "род" может быть пустая строка и в строке "возраст" может быть значение 0.
Нет, вот тут вы и запутались. NOT NULL - это одно, а значение по умолчанию DEFAULT это другое.

Цитата:
В каких случаях стоит это все применять "NOT NULL" и "NOT NULL DEFAULT " " "и "...DEFAULT 0"?
Когда это надо вам или требуется по задаче.

Цитата:
Если всё работает в первом случае, то зачем тогда "NOT NULL"? или без такового можно в строках вообще ничего не размещать?
Именно. А потом через год при проверке вы узнаете, что у половина ваших работников нет фамилий, да и стажа в принципе тоже...
p51x вне форума Ответить с цитированием
Старый 16.11.2017, 15:50   #3
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Спасибо за ответ!
Цитата:
Если всё работает в первом случае, то зачем тогда "NOT NULL"? или без такового можно в строках вообще ничего не размещать?
Цитата:
Именно. А потом через год при проверке вы узнаете, что у половина ваших работников нет фамилий, да и стажа в принципе тоже...
...значит получается, что "NOT NULL" лучше всегда пользоваться?
gryllus вне форума Ответить с цитированием
Старый 16.11.2017, 15:56   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Лучше смотреть на постановку задачи. Если у вас в базе "имя|фамилия|дата_уволнения", вы какую дату-то поставите?
p51x вне форума Ответить с цитированием
Старый 16.11.2017, 16:19   #5
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Цитата:
, вы какую дату-то поставите?
...не совсем вас понял?)))
gryllus вне форума Ответить с цитированием
Старый 16.11.2017, 16:24   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

У вас таблица сотрудников с 5 колонками:
ИД Имя Фамилия Дата_Принятия_На_Работу Дата_Уволнения
Если вы сделаете Дата_Уволнения обязательной, то какую дату вы туда поставите?
p51x вне форума Ответить с цитированием
Старый 16.11.2017, 16:52   #7
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Цитата:
У вас таблица сотрудников с 5 колонками:
ИД Имя Фамилия Дата_Принятия_На_Работу Дата_Уволнения
Если вы сделаете Дата_Уволнения обязательной, то какую дату вы туда поставите?
...если человек будет на момент создания уволен, то соответственно дату увольнения, а если не будет уволен то, ни какую соответственно, ведь я не могу знать когда, человек будет уволен.
В таком случае в строке, что-то можно сделать, на потом, я читал, когда например не ясно время доставки или дата прибытия.
gryllus вне форума Ответить с цитированием
Старый 16.11.2017, 16:59   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Как никакую, поле же обязательное? Или до вас стал доходить смысл слов "зависит от задачи"?
p51x вне форума Ответить с цитированием
Старый 16.11.2017, 17:00   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Вот если не можешь знать тогда и предусмотреть возможность NULL в поле, тем более типа даты.
Цитата:
NOT NULL DEFAULT 0
Позволяет при INSERT-е опускать поле и значение, тогда автоматически 0 вставится.
Цитата:
NULL DEFAULT 0
При вставке ведет себя аналогично, но и есть возможность NULL засунуть в отличии от предыдущего случая
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.11.2017 в 17:04.
Аватар вне форума Ответить с цитированием
Старый 16.11.2017, 17:18   #10
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Цитата:
Или до вас стал доходить смысл слов "зависит от задачи"?
...я и раньше понимал смысл слов "зависит от задачи". "Задачи" не было))).

Цитата:
Как никакую, поле же обязательное?
...наверно тогда мне поможет DEFAULT " ".
gryllus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типы данных, условный оператор (Чему будет равно значение переменной b после выполнения участка программы) Ксюша Исакова Паскаль, Turbo Pascal, PascalABC.NET 1 18.02.2014 11:21
Переменная принимающая значение даты и null wm_leviathan C# (си шарп) 1 17.06.2012 15:50
Пропустить значение Null при просчете Serebah Общие вопросы Delphi 5 01.08.2011 15:45
TParameters. Значение NULL Stilet БД в Delphi 4 13.05.2010 16:45