#php #mysql #sql
#php #mysql #sql
Вопрос:
Я работаю в MySQL 5.5.
У меня есть таблица контактов, подобная этой
CREATE TABLE Contacts
и таблицы инвентаризации, подобные этой
(
ID INTEGER NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
Institution VARCHAR(255),
Address VARCHAR(255),
Email VARCHAR(255) NOT NULL UNIQUE,
Phone VARCHAR(10)
);
CREATE TABLE Inventories
В моей веб-форме контакты загружают инвентаризацию. Вот поведение, которое я хочу: — Когда новый контакт загружает инвентарь, сделайте вставку с их новой информацией — Когда существующий контакт (определяемый по адресу электронной почты) загружает другой инвентарь, обновите их информацию И сохраните ссылочную целостность с помощью таблицы инвентаризации
(
ID INTEGER NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
InventoryParametersID INTEGER NOT NULL UNIQUE,
ContactID INTEGER NOT NULL,
LocationID INTEGER NOT NULL,
Year INTEGER,
DateUploaded TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
Comments VARCHAR(255),
FOREIGN KEY (ContactID) REFERENCES Contacts(ID)
);
Как мне это сделать?
Вот что я пробовал:
СЛУЧАЙ
FOREIGN KEY (ContactID) REFERENCES Contacts(ID)
REPLACE INTO Contacts (`Name`, `Institution`, `Address`, `Email`, `Phone`) VALUES (?, ?, ?, ?, ?);
Результат
No change
СЛУЧАЙ
FOREIGN KEY (ContactID) REFERENCES Contacts(ID)
ON UPDATE CASCADE
REPLACE INTO Contacts (`Name`, `Institution`, `Address`, `Email`, `Phone`) VALUES (?, ?, ?, ?, ?);
Результат
No change
Комментарии:
1. ЗАМЕНА удаляет строку поиска и добавляет новую. Таким образом, ваш КАСКАД ОБНОВЛЕНИЯ не работает. Почему вы не используете INSERT … ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА?
2. Это то, над чем я сейчас работаю, но у меня возникли проблемы с пониманием синтаксиса. У вас есть ссылка на хороший пример, отличный от документов MySQL?
3. ВСТАВИТЬ В контакты (
Name
,Institution
,Address
,Phone
) ЗНАЧЕНИЯ (?, ?, ?, ?, ?) ПРИ ДУБЛИРОВАНИИ КЛЮЧА ОБНОВИТЕ Name = VALUES(ИМЯ), Institution = VALUES(Учреждение) … MySQL-DOC4. Я понял: ВСТАВИТЬ В ЗНАЧЕНИЯ Contacts (
Name
,Institution
,Address
,Phone
) (?, ?, ?, ?, ?) ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧАName
=?,Institution
=?,Address
=?,Phone
=?;5. Вы можете использовать VALUES(
columnname
) в своих обновлениях, тогда вы не установили значения, если используете подготовленный оператор.
Ответ №1:
ЗАМЕНА удаляет строку поиска и добавляет новую. Таким образом, ваш КАСКАД ОБНОВЛЕНИЯ не работает. Почему вы не используете INSERT … ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА?
INSERT INTO Contacts (Name, Institution, Address, Email, Phone)
VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE
Name = VALUES(NAME),
Institution = VALUES(Institution) ...