mysql 不支持 Array 類型
一、Postgres 原生SQL
適用場景:可以用於實現貼標簽
功能
1、定義
CREATE TABLE "Students"
(
name VARCHAR(255),
interest VARCHAR(255)[]
)
2、插入
(1) 方法一
INSERT INTO "Students"
VALUES
('colin',
'{"音樂", "電影", "讀書"}'
)
注意1:雙引號單引號這里不能混用:
'{"音樂", "電影", "讀書"}'
注意2:插入后在數據庫查看是
{音樂,電影,讀書}
,而不是{'音樂','電影','讀書'}
(2) 方法二 —— 數組構造函數
INSERT INTO "Students"
VALUES
('colin',
ARRAY['音樂', '電影', '讀書']
)
注意:這里只能用單引號:
ARRAY['音樂', '電影', '讀書']
3、訪問
(1) 取一個
select interest[1] from "Students" where id = 1
注意:這里
interest[1]
不能用引號
return:
'音樂'
注:這里的數組索引值不是從 0 開始的
(2) 取多個
select interest[1:2] from "Students" where id = 1
return:
{音樂,電影}
(3) 取所有
select "interest" from "Students" where id = 1
return:
{音樂,電影,讀書}
[拓展]
Postgres 引號 使用規律的總結:
不用引號
:內置函數、當鍵名是數組而取索引值時
單引號
:值、當鍵名是數組而取索引值時、json字段取value值("edu_experience"->'name')
雙引號
:表名、鍵名、值里面嵌套的值
4、修改
update "Students" set interest[2] = '睡覺' where id = 1;
{音樂,睡覺,讀書} => {音樂,睡覺,讀書}
5、搜索
ANY()
select "interest" from "Students" where '睡覺' = ANY("interest");
return:
{音樂,睡覺,讀書}
6、展開數組
unnest()
select unnest("interest") from "Students" where '睡覺' = ANY("interest");
return:
音樂
睡覺
讀書
二、與 Sequelize 協作
Sequelize如何定義array類型?
interest: DataTypes.ARRAY(DataTypes.STRING),
原生的 Postgres 有兩點:
1、數組的形式不是 [] 包裹而是 {}
2、數組的索引不是從 0 開始而是從 1 開始
3、[未知]用 navicat 查看 table design,本來 define 為 array 的 interest 字段顯示的確是 varchar 類型
而用 Sequelize 很好的把這些差異給抹平了,你可以直接采用數組的方式去與數據庫做交互操作
參考資料
1.[Postgres 指南-數組] http://postgresguide.com/cool/arrays.html
2.[PostgreSQL Array] http://www.postgresqltutorial.com/postgresql-array/