gpt4 book ai didi

java - 在mysql数据库中创建表

转载 作者:行者123 更新时间:2023-11-29 13:41:31 27 4
gpt4 key购买 nike

我正在尝试通过代码在mysql数据库中创建两个表

这是我的创作脚本

CREATE DATABASE if not exists feedback;

CREATE TABLE IF NOT EXISTS Authorizations(
authDesc CHAR(50),
id MEDIUMINT NOT NULL AUTO_INCREMENT,
authLevel INT NOT NULL DEFAULT 0,

PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS Users(
lastName CHAR(50) NOT NULL,
userID MEDIUMINT NOT NULL,
phone CHAR(15),
email CHAR(50),
address CHAR(100),
authLevel INT NOT NULL DEFAULT 0,

FOREIGN KEY(authLevel) REFERENCES Authorizations (authLevel),
login CHAR(30) NOT NULL,
firstName CHAR(50) NOT NULL,

PRIMARY KEY (login),password CHAR(30) NOT NULL
);

我在尝试执行该操作时收到此错误

java.sql.SQLException: Can't create table 'feedback.users' (errno: 150)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725)
at com.database.Database.createDatabase(Database.java:45)
at com.database.Main.main(Main.java:6)

第 45 行在我的代码中有 create table users 行

我的数据库引擎是InnoDB,通过mysql

我做错了什么?

最佳答案

你的问题

代码方面

您只能通过引用唯一标识目标表中一行的一列或一组列来创建 FOREIGN KEY 约束。

这意味着 @Ulrich 是对的,您需要一个索引,但不需要任何需要 UNIQUE KEY 约束的索引。

逻辑

您需要阅读一些内容。像“在此处添加索引”这样的直接解决方案可能会消除错误,但它也可能会限制您对这些故事的操作(由于唯一性约束)。

您的表结构可能是问题所在,您可能需要完全理解 UNIQUE KEY 和 FOREIGN KEY,然后才能对表结构采取新方法。

有关键和索引的 MySQL 背景信息

索引

创建索引列时,MySQL 服务器会存储一些有关该列内容的数据,这使得服务器更容易找到使用该列过滤/排序的记录。所以索引代表了MySQL单独存储的一种数据结构,以便于阅读。

如果您知道您的应用程序将尝试按特定列(例如:标题、名称、created_at 等)搜索记录,您可能需要声明一个简单的 INDEX KEY 指定您想要轻松查找这些列。直接选择会更快,加入会更快等等。

该表还将使用更多内存,因为一些额外的数据存储在与这些列相关的某处。

此外,您可能需要声明一个多列 INDEX 以覆盖 ex。博客文章的标题和内容。 INDEXES 对它们可以使用的数据量(字符串长度)有限制,因此有时您必须声明一个仅使用前 512(或某个数字)的 INDEX ) 列的字符。

约束

创建约束(PRIMARY KEYUNIQUE KEYFOREIGN KEY)时,约束需要在表以强制执行规则(唯一性或可引用性等)。

因此,这些约束也需要一个 INDEX。每次将列声明为 PRIMARY KEYUNIQUE KEY 时,也会创建一个 INDEX,因此您不必自己创建它.

声明FOREIGN KEY时,需要创建的索引应该位于引用的表中,而不是当前表中。因此,您必须自己创建它。

关于java - 在mysql数据库中创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18019604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com