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. 844. Backspace String Compare

    class Solution { public: bool backspaceCompare(string S, string T) { int szs=S.size(); int szt=T.siz ...

  2. java.lang.NoClassDefFoundError: org/apache/solr/common/params/SolrParams

    启动tomcat服务,报错误java.lang.NoClassDefFoundError: org/apache/solr/common/params/SolrParams [2016-03-10 2 ...

  3. 2019.02.06 bzoj2187: fraction(类欧几里得)

    传送门 题意简述:多组询问,每次给出a,b,c,da,b,c,da,b,c,d,求满足ab<pq<cd\frac ab<\frac pq<\frac cdba​<qp​& ...

  4. Windows上使用Git管理文件

    今天在搜索ffmpeg相关资料时,需要通过.sh脚本文件下载git上的代码文件,最后通过在Windows上安装了git,并在git.bash中执行bash ffmpeg.sh解决了代码下载问题,顺便学 ...

  5. Java基础之多线程没那么复杂!

    多线程的引入 1.什么是多线程 线程是程序执行的一条路径,一个进程中可以包含多条线程;多线程并发执行可以提高程序的效率</br> 2.进程和线程之间的关系 操作系统可以同时执行多个任务,每 ...

  6. springboot深入学习(五)-----spring data、事务

    spring data项目是spring解决数据访问问题的一系列解决方案,包含了大量关系型数据库以及非关系型数据库的访问解决方案. 一.spring data jpa 1.简介 jpa是一套规范,不提 ...

  7. vip导致的serverConnection closed by foreign host问题

    问题描述: 应应用需求,设计搭建了一套带tokudb存储引擎的percona数据库,使用的是常见的双主架构.具体的架构如下图所示: 在172.20.32.x1上进行验证的时候出现了下面的问题: FHo ...

  8. C++ char, unsigned char, signed char

    C语言中的 char, unsigned char, signed char 一.他们是什么? signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8 ...

  9. xslt 简单的语法

    1. 循环 <xsl:for-each select="catalog/cd"> 1 </xsl:for-each> 2. 定义变量赋值使用 <xsl ...

  10. 用mysql workbench导出mysql数据库关系图

    用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create ...