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);

关于为什么我应该在插入数据时出现错误,有什么特别明显的吗?

这是我特别遇到错误的地方:

在此处输入图像描述 很多错误都是说Error Code 1062 for duplication 和Error Code 1452

4

1 回答 1

1

您应该一次发出一个查询 - 这样您将看到错误出现的位置。

错误 #1062 可能是由于您的主键的唯一性。您尝试插入的具有 ID 的值已存在于表中。尝试截断整个表并再次运行脚本。

尝试插入Products表时可能出现错误 #1452。这是因为您有外键约束,并且先前在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 回答