MySQL 本身并不直接支持存储数组,但可以通过以下几种方式来模拟数组的存储:
原因:每次查询都需要对序列化的字符串进行反序列化操作,导致性能下降。
解决方法:
原因:关联表需要额外的表和外键,增加了数据库设计的复杂性。
解决方法:
-- 创建表
CREATE TABLE example (
id INT PRIMARY KEY AUTO_INCREMENT,
data JSON
);
-- 插入数据
INSERT INTO example (data) VALUES ('["apple", "banana", "orange"]');
-- 查询数据
SELECT JSON_EXTRACT(data, '$[1]') AS fruit FROM example WHERE id = 1;
-- 创建主表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
);
-- 创建关联表
CREATE TABLE user_roles (
user_id INT,
role_id INT,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 插入数据
INSERT INTO users (name) VALUES ('Alice');
INSERT INTO user_roles (user_id, role_id) VALUES (1, 1), (1, 2);
-- 查询数据
SELECT u.name, ur.role_id FROM users u JOIN user_roles ur ON u.id = ur.user_id WHERE u.name = 'Alice';
希望以上信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云