2017-10-16 80 views
0

我有一個mySql查詢來爲類寫入,但我得到錯誤1146,客戶表不存在,我的客戶表。我修復了所有其他問題,但無法看到客戶表的問題。這裏是我的代碼:MySql查詢創建的所有表,但有一個錯誤1146

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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; 

同樣,除非我沒有看到的東西,似乎所有表和刀片是設置類似,但客戶卻似乎不存在。爲什麼它不創建表或存在?任何幫助是極大的讚賞。

回答

0

您試圖在創建Location表之前在Customer中創建引用Location表的外鍵。

語句SET FOREIGN_KEY_CHECKS=0爲您提供了一些靈活性,例如您可以加載所引用父表的數據值尚未具有相同值的數據值。這允許用循環引用加載數據。

但是它不允許您在FK約束中引用表,如果該表尚不存在。

將FK約束的所有定義推遲到腳本末尾是正常的。在創建完所有表後,使用ALTER TABLE將FK約束添加到表中。

0

用不存在的東西創建鏈接。那是位置表...

+0

這並沒有解決這個錯誤。拋出同樣的錯誤。 –