0

ビデオとテキストに従って、mysqlのコースを実行しようとしています。と思っていたところ、完璧にフォローしていたのですが、テーブルにデータを挿入しようとするとエラーが多発してしまいます。

これが私のコードです:

-- MyExercises

CREATE DATABASE MyExercises;

USE MyExercises;

CREATE TABLE Categories 
        (CategoryID INT NOT NULL, 
        CategoryName VARCHAR(20) NOT NULL,
        Description TEXT NULL,
PRIMARY KEY (CategoryID))
ENGINE = InnoDB;

SHOW COLUMNS FROM Categories;   
DESC Categories;   

CREATE TABLE Suppliers 
        (City VARCHAR(20) NULL, 
        CompanyName VARCHAR(30) NOT NULL,
        SupplierID INT NOT NULL,
PRIMARY KEY (SupplierID))
ENGINE = InnoDB;

    CREATE TABLE Products 
        (ProductID INT NOT NULL, 
        ProductName VARCHAR(40) NOT NULL,
        CategoryID INT NULL,
        SupplierID INT NULL,
        UnitPrice DECIMAL(5,2) NULL,
        UnitsInStock SMALLINT NULL,
PRIMARY KEY (ProductID),
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)) 
ENGINE = INNODB;

INSERT INTO Categories (CategoryID, CategoryName, Description)
VALUES (1, 'Beverages', 'Soft drinks, coffees, teas, beers, and ales');

INSERT INTO Categories (CategoryID, CategoryName, Description)
VALUES (2, 'Condiments', 'Sweet and savory sauces');

INSERT INTO Categories (CategoryID, CategoryName, Description)
VALUES (3, 'Confections', 'Desserts, candies, and sweet breads');

INSERT INTO Categories (CategoryID, CategoryName, Description)
VALUES (4, 'Dairy Products', 'Cheese, Milk, Cream');

INSERT INTO Suppliers (SupplierID, CompanyName, City)
VALUES (1, 'Exotic Liquids', 'London');

INSERT INTO Suppliers (SupplierID, CompanyName)
VALUES (2, 'New Orleans Cajun Delights');

INSERT INTO Suppliers (SupplierID, CompanyName, City)
VALUES (3, 'Grandma Kelly''s Homestead', 'Adelaide');

INSERT INTO Suppliers (SupplierID, CompanyName)
VALUES (4, 'Tokyo Traders');

INSERT INTO Products (ProductID, ProductName, SupplierID, CategoryID, UnitPrice, UnitsInStock)
VALUES (1, 'Chai', 1, 1, 18, 39);

INSERT INTO Products (ProductID, ProductName, SupplierID, UnitPrice, UnitsInStock)
VALUES (2, 'Chang', 1, 19, 17);

INSERT INTO Products (ProductID, ProductName, CategoryID, UnitPrice, UnitsInStock)
VALUES (3, 'Ani Seed Syrup', 2, 10, 13);

INSERT INTO Products (ProductID, ProductName, SupplierID, CategoryID, UnitPrice)
VALUES (4, 'Chef Anton''s Cajun Seasoning', 2, 2, 22);

INSERT INTO Products (ProductID, ProductName, SupplierID, CategoryID, UnitsInStock)
VALUES (5, 'Chef Anton''s Gumbo Mix', 2, 2, 0);

INSERT INTO Products (ProductID, ProductName, SupplierID, CategoryID)
VALUES (6, 'Grandma''s Boysenberry Spread', 3, 2);

INSERT INTO Products (ProductID, ProductName, SupplierID, CategoryID, UnitPrice, UnitsInStock)
VALUES (7, 'Uncle Bob''s Organic Dried Pears', 5, 4, 30, 15);

INSERT INTO Products (ProductID, ProductName, SupplierID, CategoryID, UnitPrice, UnitsInStock)
VALUES (8, 'Northwood''s Cranberry Sauce', 4, 5, 40, 6);

データの挿入からエラーが発生する理由について、非常に明白な点はありますか?

具体的にエラーが発生する場所は次のとおりです。

ここに画像の説明を入力 多くのエラーは、複製のエラー コード 1062とエラー コード 1452と言うものです。

4

1 に答える 1

1

一度に 1 つずつクエリを発行する必要があります。このようにして、エラーが表示される場所を確認できます。

エラー #1062 は、主キーの一意性が原因である可能性があります。挿入しようとしている ID を持つ値は、テーブルに既に存在します。テーブル全体を切り捨てて、スクリプトをもう一度実行してみてください。

テーブルに挿入しようとすると、エラー #1452 が表示される可能性がありProductsます。これは、外部キー制約があり、Categoriesテーブルに対して発行された以前の挿入ステートメントが失敗したためです。

注: すべての行に対して挿入ステートメントを発行する必要はありません。代わりに、次のようにグループ化できます。

INSERT INTO Categories (CategoryID, CategoryName, Description)
  VALUES 
    (1, 'Beverages', 'Soft drinks, coffees, teas, beers, and ales'),
    (2, 'Condiments', 'Sweet and savory sauces'),
    (3, 'Confections', 'Desserts, candies, and sweet breads'),
    (4, 'Dairy Products', 'Cheese, Milk, Cream');

Suppliers(SupplierID)また、テーブルの作成中に外部キー制約が欠落していますProducts。これは存在するはずです。

AUTO_INCREMENT値を生成する主キーに使用することをお勧めします。テーマの詳細については、こちらをご覧ください。これには、挿入ステートメントから主キー列と値を削除する必要があるため、それらが短くなり、手動で毎回インクリメントすることを心配する必要がなくなります。

于 2016-08-27T03:21:08.967 に答える