[42000][1064] Ошибка SQL: невозможно выполнить новую таблицу в DataGrip.

create table Users
(
    AttendeeID varchar not null,
    FRAG boolean null,
    FirstName string null,
    LastName string null,
    BadgeName varchar null,
    BadgeNumber int not null,
    DateOfBirth date null,
    EmailAddress int not null,
    Password password null,
    PrivacyPolicy boolean null,
    TermsConditions boolean null
);

create unique index Users_AttendeeID_uindex
   on Users (AttendeeID);

create unique index Users_BadgeNumber_uindex
    on Users (BadgeNumber);

create unique index Users_EmailAddress_uindex
   on Users (EmailAddress);

alter table Users
    add constraint Users_pk
        primary key (AttendeeID);

Итак, я изучаю базы данных и использую Datagrip для своих баз данных, но когда я попытался выполнить это, я получил следующую ошибку:

[42000][1064] У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «не нуль, FRAG boolean null, строка FirstName null, строка LastName null, Ba» в строке 3.

Первоначально код читался не нулевым, поэтому я изменил его на нулевой, не понимая, в чем проблема. Я не нашел ответа на предыдущие вопросы, любая помощь будет отличной. Спасибо.


person Samantha Tigerlily    schedule 17.12.2018    source источник
comment
Вы должны указать длину для VARCHAR: например, VARCHAR(255). Кроме того, в MySQL нет типа данных BOOLEAN. Вместо этого вы можете использовать TINYINT(1) UNSIGNED и сохранить 1 для true и 0 для false. Или вы можете использовать ENUM.   -  person fifonik    schedule 18.12.2018
comment
BOOLEAN — это псевдоним для TINYINT, однако его не проблема. Рекомендую сделать один из уникальных индексов первичным ключом для таблицы, возможно, AttendeeID.   -  person danblack    schedule 18.12.2018
comment
Спасибо тебе за помощь!   -  person Samantha Tigerlily    schedule 18.12.2018
comment
Кстати, DataGrip должен подсвечивать ваши синтаксические ошибки перед выполнением запроса: pp. userapi.com/Xw-zJsCkPNdkoOqG8Ex4Lx_bdoCat3yW22J6Sg/   -  person moscas    schedule 19.12.2018


Ответы (2)


varchar должен иметь указанную длину, например varchar(30) для 30 символов.

string не является типом, используйте varchar(LENGTH).

password не является типом, используйте varbinary(LENGTH), так как я предполагаю, что вы поступаете правильно и используете соленый хэш.

person danblack    schedule 17.12.2018
comment
Благодарю вас! и я работаю с программированием, но он не мог видеть, что я делаю, потому что я просто писал ему. Но спасибо, потому что теперь мне не нужно ждать 3 часа, пока он вернется домой, чтобы исправить это. - person Samantha Tigerlily; 18.12.2018

Я знаю, что уже поздно, но напишу, как увижу:

CREATE TABLE Users
(
    AttendeeID CHAR(30) NOT NULL,
    FRAG ENUM('n', 'y') NOT NULL DEFAULT 'n',
    FirstName CHAR(50) NULL,
    LastName CHAR(50) NULL,
    BadgeName CHAR(100) NOT NULL,
    BadgeNumber CHAR(30) NOT NULL,
    DateOfBirth DATE NULL,
    EmailAddress CHAR(250) NOT NULL,
    Password CHAR(64) NOT NULL,
    PrivacyPolicy ENUM('n', 'y') NOT NULL DEFAULT 'n',
    TermsConditions ENUM('n', 'y') NOT NULL DEFAULT 'n',
    PRIMARY KEY (`AttendeeID`),
    UNIQUE KEY `Users_EmailAddress_uindex` (`EmailAddress`),
    UNIQUE KEY `Users_BadgeNumber_uindex` (`BadgeNumber`)
);

Я использую CHAR вместо VARCHAR для повышения производительности, потому что в этом случае поиск данных может быть математически простым для механизма БД, поскольку строки будут иметь фиксированный размер.

Я использую ENUM для удобочитаемости. В будущем вы также можете добавить not sure в качестве третьего варианта.
О размере: TINYINT(1) и хранится как один байт данных, а ENUM('n','y') также хранится как 1 байт данных.

BadgeNumber равно CHAR, так как может возникнуть ситуация, когда числа могут начинаться с 0 нуля. Например: 0000001023423 или может быть бизнес-задача перечислить гостей типа: G00001 - так что для меня лучше использовать CHAR для номера бейджа.

Также у вас может быть таблица UserBadges и связать ее с таблицей Users - что, если у какого-то пользователя может быть много значков, например, если он потерял старый или просто для истории. У вас будет значок для A case значок для B case.

По идее User и значок разные сущности. Так что это тоже надо уточнять.

Я уверен, что такие вопросы могут заставить людей сделать проект более гибким с самого начала.

person num8er    schedule 17.12.2018
comment
Спасибо за информацию. Информация действительно информативна и полезна. Что касается BadgeNumber, насколько я знаю из номеров значков, которые я видел для этого проекта, все они начинаются с 1 или выше. Я не знал этой информации, и она мне нравится. - person Samantha Tigerlily; 18.12.2018
comment
@SamanthaTigerlily это как предвидеть, что может быть возможно, конечно, вы должны спросить об этом продакт-менеджера или технического руководителя. Они могут знать лучше. - person num8er; 18.12.2018