MySql查询创建所有表,但是一个表有错误1146

时间:2017-10-16 22:55:13

标签: mysql create-table

我有一个mySql查询要为类编写,但我收到错误1146,Customer表不存在,对于我的Customer表。我修复了所有其他问题,但无法查看Customer表的问题所在。这是我的代码:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
DROP SCHEMA IF EXISTS PiqueExpenses;
CREATE SCHEMA IF NOT EXISTS PiqueExpenses DEFAULT CHARACTER SET utf8 ;

DROP DATABASE IF EXISTS PiqueExpenses;
CREATE DATABASE IF NOT EXISTS PiqueExpenses DEFAULT CHARACTER SET utf8 ;

USE PiqueExpenses;
CREATE TABLE IF NOT EXISTS JobPay (
    pay_rate DOUBLE NOT NULL AUTO_INCREMENT,
    j_id INT NULL,
    pay_hrs_worked DOUBLE NULL,
    job_mileage DOUBLE NULL,    
    pay_per_mile DOUBLE NULL,   
  PRIMARY KEY (pay_rate),
  INDEX fk_JobPay_Jobs_idx (j_id ASC),
  CONSTRAINT fk_JobPay_Jobs
    FOREIGN KEY (j_id)
    REFERENCES Jobs (job_id)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


USE PiqueExpenses;
CREATE TABLE IF NOT EXISTS Jobs (
    job_id INT NOT NULL AUTO_INCREMENT,
    em_id INT NULL,
    cus_id INT NULL,
    job_name VARCHAR(45) NULL,
    job_type VARCHAR(45) NULL,
  PRIMARY KEY (job_id),
  INDEX fk_Jobs_Employee_idx (em_id ASC),
  CONSTRAINT fk_Jobs_Employee
    FOREIGN KEY (em_id)
    REFERENCES Employee (emp_id),
  INDEX fk_Jobs_Customer_idx (cus_id ASC),
  CONSTRAINT fk_Jobs_Customer
    FOREIGN KEY (cus_id)
    REFERENCES Customer (cust_id)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


USE PiqueExpenses;
CREATE TABLE IF NOT EXISTS Employee (
    emp_id INT NOT NULL AUTO_INCREMENT,
    emp_lname VARCHAR(45) NULL,
    emp_initial VARCHAR(45) NULL,
    emp_fname VARCHAR(45) NULL,
    l_id INT NULL,
  PRIMARY KEY (emp_id),
  INDEX fk_Employee_Location_idx (l_id ASC),
  CONSTRAINT fk_Employee_Location
    FOREIGN KEY (l_id)
    REFERENCES Customer (loc_id)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE PiqueExpenses;
CREATE TABLE IF NOT EXISTS Customer (
    cust_id INT NOT NULL AUTO_INCREMENT,
    cust_fname VARCHAR(45) NULL,
    cust_initial VARCHAR(45) NULL,
    cust_lname VARCHAR(45) NULL,
    lo_id INT NULL,
  PRIMARY KEY (cust_id),
  INDEX fk_Customer_Location_idx (lo_id ASC),
  CONSTRAINT fk_Customer_Location
    FOREIGN KEY (lo_id)
    REFERENCES Location (loc_id)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE PiqueExpenses;
CREATE TABLE IF NOT EXISTS Location (
    loc_id INT NOT NULL AUTO_INCREMENT,
    loc_address VARCHAR(45) NULL,
    loc_city VARCHAR(45) NULL,
    loc_state VARCHAR(45) NULL,
    loc_zip VARCHAR(45) NULL,
    loc_phone_num VARCHAR(45) NULL,
  PRIMARY KEY (loc_id))
ENGINE = InnoDB;

START TRANSACTION;
USE PiqueExpenses;
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (32.00, 0001, 4, 48.0, .53);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (29.50, 0002, 3.8, 35.0, .44);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (38.75, 0003, 7.6, 49.0, .48);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (42.00, 0004, 8.9, 21.0, .25);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (31.42, 0005, 3.5, 64.0, .58);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (42.25, 0006, 5.6, 82.0, .57);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (38.95, 0007, 6.7, 57.0, .57);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (31.52, 0008, 4.8, 66.0, .61);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (29.60, 0009, 4.4, 52.0, .49);
INSERT INTO PiqueExpenses.JobPay (pay_rate, j_id, pay_hrs_worked, 
job_mileage, pay_per_mile) VALUES (32.50, 0010, 6.4, 70.0, .50);

COMMIT;

START TRANSACTION;
USE PiqueExpenses;
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0001, 44201, 22001, 'CCTV', 'Install');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0002, 44202, 22002, 'Network','Install');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0003, 44203, 22003, 'Alarm', 'Time&Mater');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0004, 44204, 22004, 'DigitalMenuBoard', 'Install');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0005, 44205, 22005, 'Telecom', 'Troubleshoot');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0006, 44206, 22006, 'DigitalMenuBoard', 'Install');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0007, 44207, 22007, 'Alarm', 'Troubleshoot');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0008, 44208, 22008, 'Telecom', 'Troubleshoot');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0009, 44209, 22009, 'Network', 'Troubleshoot');
INSERT INTO PiqueExpenses.Jobs (job_id, em_id, cus_id, job_name, job_type) 
VALUES (0010, 44210, 22010, 'CCTV', 'Install');

COMMIT;

START TRANSACTION;
USE PiqueExpenses;
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44201, 'Tom', 'I', 'Butler', 33401);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44202, 'Marty', 'M', 'Tucker', 33402);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44203, 'Tammy', 'T', 'Rivera', 33403);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44204, 'Alicia', 'L', 'Robinson', 33404);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44205, 'Mary', 'J', 'Watson', 33405);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44206, 'Rachel', 'J', 'Owens', 33406);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44207, 'Barb', 'L', 'Wright', 33407);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44208, 'Peter', 'F', 'Parker', 33408);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44209, 'Kathy', 'W', 'Alvarez', 33409);
INSERT INTO PiqueExpenses.Employee (emp_id, emp_fname, emp_initial, 
emp_lname, l_id) VALUES (44210, 'Frank', 'M', 'Morris', 33410);

COMMIT;

START TRANSACTION;
USE PiqueExpenses;
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22001, 'Fred', 'F', 'Flinstone', 33411);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22002, 'Buford', 'L', 'Tannen', 33412);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22003, 'Yosimite', 'P', 'Sam', 33413);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22004, 'John', 'A', 'Wayne', 33414);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22005, 'James', 'K', 'Hetfield', 33415);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22006, 'Lars', 'P', 'Ulrich', 33416);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22007, 'Kirk', 'Q', 'Hammet', 33417);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22008, 'Robert', 'F', 'Trajillo', 33418);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22009, 'Alfred', 'P', 'Yankovich', 33419);
INSERT INTO PiqueExpenses.Customer (cust_id, cust_fname, cust_initial, 
cust_lname, lo_id) VALUES (22010, 'Odell', 'X', 'Beckham', 33420);

COMMIT;

START TRANSACTION;
USE PiqueExpenses;
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33401, '7613 Bellflower', 
'Mentor', 'OH', '44060', '1-(440)654-7744');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33402, '2346 15th', 'Akron', 
'OH', '44314', '1-(330)848-9413');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33403, '6915 Giddings', 
'Atwater', 'OH', '44201', '1-(330)358-2026');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33404, '11241 Mahoning', 'North 
Jackson', 'OH', '44451', '1-(330)666-9283');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33405, '685 Deercrest', 
'Wadsworth', 'OH', '44281', '1-(330)954-2209');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33406, '675 Wolf Ledges', 
'Akron', 'OH', '44309', '1-(330)996-9756');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33407, '111 Center', 'Medina', 
'OH', '44256', '1-(330)335-1803');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33408, '222 State', 'Cuyahoga 
Falls', 'OH', '44223', '1-(330)388-6354');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33409, '489 Bridge', 'Brimfield', 
'OH', '44240', '1-(330)321-6223');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33410, '44 Chitauqua', 
'Cleveland', 'OH', '44134', '1-(678)980-0852');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33411, '4123 Anniversary Road', 
'Nashville', 'TN', '37215', '1-(615)995-7744');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33412, '9807 Ruskin Crossing', 
'Bellevue', 'WA', '98008', '1-(425)975-9413');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33413, '39 Montana Parkway', 
'Saint Paul', 'MN', '55166', '1-(651)866-2047');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33414, '3 Westridge Street', 
'Stamford', 'CT', '06905', '1-(203)677-2492');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33415, '659 Homewood Junction', 
'Gary', 'IN', '46406', '1-(219)971-2522');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33416, '86460 Kensington Place', 
'Columbus', 'OH', '43240', '1-(614)282-8239');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33417, '4360 Bluestem Pass', 
'Bradenton', 'FL', '34205', '1-(941)335-5180');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33418, '0178 Hallows Pass', 'San 
Antonio', 'TX', '78265', '1-(210)523-6354');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33419, '1816 Trailsway Alley', 
'Sacramento', 'CA', '94245', '1-(916)618-3467');
INSERT INTO PiqueExpenses.Location (loc_id, loc_address, loc_city, 
loc_state, loc_zip, loc_phone_num) VALUES (33420, '72464 Armistice Drive', 
'San Jose', 'CA', '95133', '1-(408)405-1270');

COMMIT;

SELECT  * 
FROM    JobPay, 
        Jobs,
        Employee,
        Customer,
        Location;

SELECT  * 
FROM    Employee 
WHERE   emp_initial = 'J';

SELECT  * 
FROM    Jobs 
WHERE   job_type = 'Install';

SELECT *
FROM JobPay
LEFT OUTER JOIN Jobs ON JobPay.j_id = Jobs.job_id

UNION

SELECT *
FROM JobPay
RIGHT OUTER JOIN Jobs ON JobPay.j_id = Jobs.job_id;

SELECT *
FROM Customer
LEFT OUTER JOIN Location ON Customer.lo_id = Location.loc_id

UNION

SELECT *
FROM Customer
RIGHT OUTER JOIN Location ON Customer.lo_id = Location.loc_id;

同样,除非我没有看到某些内容,否则似乎所有表格和插入内容都设置相似,但客户似乎并不存在。为什么不创建表或存在?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您尝试在Customer中创建一个在创建Location表之前引用Location表的外键。

语句SET FOREIGN_KEY_CHECKS=0为您提供了一些灵活性,就像您可以加载引用的父表尚未具有相同值的数据值一样。这允许使用循环引用加载数据。

但如果该表尚不存在,它不允许您引用FK约束中的表。

将FK约束的所有定义推迟到脚本末尾是正常的。在创建所有表后,使用ALTER TABLE将FK约束添加到表中。

答案 1 :(得分:0)

使用尚不存在的内容创建链接。多数民众赞成位置表...