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/

Postgres 的 Array 类型的更多相关文章

  1. JS高程5.引用类型(2)Array类型

    Array类型: ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的. 创建数组的基本方式: (1)使用Array构造函数 var color=new Array(); ...

  2. 5.2 Array类型介绍

    Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...

  3. JavaScript中Array类型方法总结

    Array类型是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类型的数据.这里总结了数组类型的 ...

  4. Object类型与Array类型

    总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...

  5. oracle Array类型作为参数传入函数(存储过程) 大字符串参数解决方案

    1. 创建自定义的类型.由于Oracle没有提供现成的array类型,这里用table类型来模拟. CREATE OR REPLACE TYPE varchar_array is Table OF v ...

  6. mongo中查询Array类型的字段中元素个数

    I have a MongoDB collection with documents in the following format: { "_id" : ObjectId(&qu ...

  7. 引用类型之Array类型

    Array类型 ECMAScript数组与其它语言数组一样,都是数据的有序列表.但是ECMAScript数组的每一项可以保存任何类型的数据.而且,ECMAScript数组是可以动态调整的. 1.创建和 ...

  8. JavaScript引用类型之Array类型一

    一.简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: 1.相同点: (1)他们都是数据的有序列 ...

  9. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

随机推荐

  1. Element ui 使用 Tree 树形控件

    使用树形控件需要映入 jsx才能运行链接:https://github.com/vuejs/babel-plugin-transform-vue-jsx#usage npm install\ babe ...

  2. IDEA将项目导出war包方法(详细)

    右上角点击进入配置页面(如图)选择Artifcts 点击绿色的那个+号,选择Web Application:Archive; 设置名称,选择输出路径 下面开始打war包在Build下面选择Build ...

  3. openstack的Host Aggregates和Availability Zones

    1.关系 Availability Zones 通常是对 computes 节点上的资源在小的区域内进行逻辑上的分组和隔离.例如在同一个数据中心,我们可以将 Availability Zones 规划 ...

  4. openstack查看命令的restful调用形式

    [root@cc10 fast-pulsar2]# [root@cc10 fast-pulsar2]# cinder --debug type-create hzb DEBUG:keystonecli ...

  5. Tomcat入门

    1.JavaWeb概念 Java web,是用java技术来解决相关web互联网领域的技术的总称.web包括:web服务器和web客户端两部分.java在最早web客户端的应用有java applet ...

  6. int -2147483648 ----- 2147483647

    int最大值+1为什么是-2147483648最小值-1为什么是2147483647   今天一个新手学编程就问到这个问题,很多人第一次学编程肯定会遇到这个问题,大部分都知道是溢出之类的,用源码和补码 ...

  7. 使用 WLST 和节点管理器来管理服务器

    使用节点管理器启动计算机上的服务器 WLST 可以连接至在任何计算机上运行的节点管理器,并能够在此计算机上启动一个或多个 WebLogic Server 实例.要通过此技术使用 WLST 和节点管理器 ...

  8. 1045 Favorite Color Stripe 动态规划

    1045 Favorite Color Stripe 1045. Favorite Color Stripe (30)Eva is trying to make her own color strip ...

  9. Ng第七课:正则化与过拟合问题 Regularization/The Problem of Overfitting

    7.1  过拟合的问题 7.2  代价函数 7.3  正则化线性回归 7.4  正则化的逻辑回归模型 7.1  过拟合的问题 如果我们有非常多的特征,我们通过学习得到的假设预测可能能够非常好地适应训练 ...

  10. CentOS 5.5 防火墙开启、关闭以及开放指定端口

    之前有讲过公司新买的服务器使用的是CentOS5.5, 部署好Tomcat之后却发现输入114.80.*.*:8080(即ip:8080)却无法显示Tomcat默认的首页. 因为以前部署在Win Se ...