私はトリガーで入力データを検証するデータベースを作成しています。正常に追加しましたが、細かいデータを入力しようとするとエラーが発生します。エラーコード:1109.フィールドリストに不明なテーブル 'new'があります
デシベル、テーブルを作成し、私は
INSERT INTO Ludzie VALUES ('7810396705', 'Anders', 'Kennedy','1958-08-20', 1.70, 88.6, 43)
によって入力されたデータにしようとすると私はすでにオンとオフのMySQLサーバを回してみました
Error Code: 1109. Unknown table 'new' in field list
を取得
CREATE DATABASE IF NOT EXISTS DBWorkers;
CREATE TABLE IF NOT EXISTS Ludzie(
PESEL char(11) NOT NULL,
imie varchar(30) NOT NULL,
nazwisko varchar(30) NOT NULL,
data_urodzenia date NOT NULL,
wzrost float NOT NULL,
waga float NOT NULL,
rozmiar_buta int NOT NULL,
PRIMARY KEY(PESEL));
DELIMITER $$
CREATE FUNCTION check_pesel(PESEL char(11)) RETURNS bool
BEGIN
IF(
CHAR_LENGTH(NEW.PESEL) <> 11 AND
CONVERT(PESEL, SIGNED INT) > 0 AND
CONVERT(LEFT(PESEL,2), SIGNED INT) BETWEEN 0 AND 99 AND
CONVERT(SUBSTRING(PESEL,3,2), SIGNED INT) BETWEEN 1 AND 12 AND
CONVERT(SUBSTRING(PESEL,3,2), SIGNED INT) BETWEEN 1 AND DAY(LAST_DAY(CONCAT('19',LEFT(PESEL,2),'-',SUBSTRING(PESEL,3,2),'-01')))
)
THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END $$
CREATE TRIGGER `ludzie_data_check_before_insert` BEFORE INSERT ON `Ludzie`
FOR EACH ROW
BEGIN
IF NOT(
check_pesel(NEW.PESEL) AND
NEW.WZROST > 0.0 AND
NEW.WAGA > 0.0 AND
NEW.ROZMIAR_BUTA > 0
)
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'check on Ludzie failed during insert';
END IF;
END $$
DELIMITER ;
トリガし、私が正しいデータベースに行っているかどうかを確認します。すべてがうまく見えるように見えるが、そうではありません:NEW.PESELとPESELの一貫性のない使用がある
CHAR_LENGTH(NEW.PESEL) <> 11 AND
CONVERT(PESEL, SIGNED INT) > 0 AND
は、あなたがキーワードnewを使用すべきではありません:/
必ずしも重要ではありませんが、その場合は、あなたの実行しているMySQLのバージョンは? –
5.7.20-0ubuntu0.16.04.1 – Arryyyy