-- 创建一个用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
age INT,
CHECK (age >= 18 AND age <= 100),
CHECK (email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$')
);
-- 导入数据前进行清洗
INSERT INTO users (name, email, age)
SELECT TRIM(name), LOWER(email), age
FROM importdata
WHERE email REGEXP '^[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}$';
使用示例
基本用法
在导入数据时,最常见的验证和清洗方法是使用SQL的CHECK约束和简单的数据转换函数。以下是一个基本的示例:
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
-- 创建一个产品表
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2),
CHECK (price > 0)
);
-- 导入数据并进行简单清洗
INSERT INTO products (name, price)
SELECT TRIM(name), ROUND(price, 2)
FROM import_data
WHERE price > 0;
-- 创建一个订单表
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
order_date DATE,
total_amount DECIMAL(10, 2)
);
-- 创建一个触发器,用于在插入数据时进行验证和清洗
DELIMITER //
CREATE TRIGGER before_insert_order
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
-- 验证订单日期是否在合理范围内
IF NEW.order_date < '2000-01-01' OR NEW.order_date > CURDATE() THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid order date';
END IF;
-- 验证总金额是否大于0
IF NEW.total_amount <= 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid total amount';
END IF;
-- 清洗总金额,保留两位小数
SET NEW.total_amount = ROUND(NEW.total_amount, 2);