[42000][1064]sql错误:无法在datagrip中执行新表

nx7onnlm  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(722)
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用于我的dbms,但当我尝试执行此操作时,收到如下错误:
[42000][1064]您的sql语法有错误;请查看与您的mysql服务器版本对应的手册,以了解第3行中使用“not null,frag boolean null,firstname string null,lastname string null,ba”附近的正确语法。
最初代码读取为not null,因此我将其更改为null,因为不了解问题所在。我在前面的问题中没有找到答案,任何帮助都会很好。谢谢。

q1qsirdb

q1qsirdb1#

我知道已经很晚了,但我看到了就写:

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 为了提高性能,这种情况的原因对于db引擎来说,查找数据在数学上很容易,因为行的大小是固定的。
我用 ENUM 为了便于阅读,您还可以在将来添加 not sure 作为第三选择。
关于尺寸: TINYINT(1) 存储为一个字节的数据 ENUM('n','y') 也存储为1字节的数据。 BadgeNumberCHAR 因为可能会有这样的情况 0 零。比如: 0000001023423 或者可能有业务任务来列举客人,比如: G00001 -所以对我来说最好用 CHAR 徽章号码。
你也可能有 UserBadges 表并将其与 Users 表-如果某个用户可能有很多徽章,比如他丢失了一个旧徽章,或者只是为了历史,你会有徽章吗 A case 徽章 B case .
按想法 User 徽章是不同的实体。所以也要澄清。
我相信这样的问题可能会迫使人们从一开始就让项目变得更加灵活。

nhn9ugyo

nhn9ugyo2#

varchar 需要指定长度,如 varchar(30) 30个字符。 string 不是类型,使用 varchar(LENGTH) . password 不是类型,使用 varbinary(LENGTH) 我认为你做的是对的,用的是咸土豆。

相关问题