我有一个数据库,它有一个名为notifications
的JSON列,其中包含一个包含电子邮件地址的对象。由于某种原因,在某些情况下,输入数据时转义了引号,而在另一些情况下,没有转义引号。当字符串被转义时,MySql将其解释为字符串。未转义时,它是一个对象
mysql> select notifications,json_type(notifications) from table group by notifications;
+--------------------------------------------------------------------------+
| notifications | json_type(notifications) |
+-----------------------------------------------+--------------------------+
| {"any": ["aaa@yyy.org", "bbb@yyy.org"]} | OBJECT |
| NULL | NULL |
| "{\"XFR\":[\"aaa@zzz.com\",\"bbb@zzz.com\"]}" | STRING |
| "{\"XFR\":[\"aaa@ccc.org\",\"bbb@ccc.org\"]}" | STRING |
+-----------------------------------------------+--------------------------+
有没有办法在MySql上放一个约束,将列限制为JSON对象,而不是字符串或数组?
如果您将一个MySQL列定义为json
类型,那么MySQL将自动验证您试图在该列中插入或更新的每个值。例如,以下代码段将失败,因为JSON的格式不正确(在对象的末尾缺少一个结尾}
):
sql prettyprint-override">DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"');
实际上,依靠数据库级的失败来验证JSON内容可能不是最好的方法。在MySQL表中进行插入/更新之前,最好先在应用程序层验证JSON。
主要内容:在创建表时设置非空约束,在修改表时添加非空约束,删除非空约束MySQL非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。 比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约
主要内容:选取设置检查约束的字段,在创建表时设置检查约束,在修改表时添加检查约束,删除检查约束MySQL检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 在《MySQL默认值》和《MySQL非空约束》中讲解的默认值约束和非空约束也可看作是特殊的检查约束。 选取设置检查约束的字段 检查约束使用 CHECK 关键字,具体的语法格式如下: C
主要内容:在创建表时设置唯一约束,在修改表时添加唯一约束,删除唯一约束MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。 唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但
主要内容:在创建表时设置外键约束,在修改表时添加外键约束,删除外键约束MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西
在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。 例如,在数据表中存放年龄的值时,如果存入 200、300 这些无效的值就毫无意义了。因此,使用约束来限定表中的数据范围是很有必要的。 在 MySQL 中,主要支持以下 6 种约束: 1)主键约束 主键约束是使用最频繁的约束。在设计数据表时,一般情况下,都会要求表中设置
问题内容: 在MySQL中创建非NULL约束以使fieldA和fieldB不能都为NULL的最佳方法是什么。我不在乎任何一个本身是否为NULL,只要另一个字段具有非NULL值即可。而且,如果它们都具有非NULL值,那就更好了。 问题答案: MySQL 5.5引入了SIGNAL,因此我们不再需要Bill Karwin的答案中的额外列。Bill指出您还需要一个更新触发器,因此我也将其包括在内。