نوع داده ای json در mysql
در این مقاله قصد داریم نوع داده ای json که اخیرا به mysql اضافه گردیده است را معرفی و کاربرد آن را بررسی نماییم.
همانگونه که می دانید نوع داده ای json یک نوع داده ای می باشد که در جاوا اسکریپت به منظور نگه داری مجموعهای از مقادیر استفاده می کنیم و هم اکنون بیشتر برنامه ها و زبانهای برنامه نویسی دنیا این نوع داده ای را به صورت کامل پشتیبانی می کنند.
نکته:پیشنهاد می شود برای خواندن این مقاله به دستورات sql و ساختار JSON به طور کامل آشنا باشید.
فرض کنید شما تمایل به نگه داری چندین اطلاعات دریک فیلد اطلاعاتی دارید .به طور مثال فیلدی به نام پروفایل که کلیه اطلاعات شخصی فرد را نگه دارد این اطلاعات در ساختار جی سان همانند ساختار زیر می باشد:
{'name':'pirooz','lastName':'jenabi','age':'25','sex':'M','picture':'pic1234123.jpg'}
به طور خلاصه می توان گفت هر خانه ای از داده های json به خودی خود یک بانک اطلاعاتی می باشد بدون هیچ گونه محدودیتی.
ساخت نوع داده ای json
به منظور ساخت نوع دادهای جی سان طبق زیر عمل می کنیم
CREATE TABLE `book` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL, `tags` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
فقط کافی است نوع داده ای خود را برروی json قرار دهید.
کار نوع داده ای json
برای کار با نوع داده ای جی سان می توان همانند نوع معمولی varchar عمل کرد ولی بهتر است از توابع پیشفرض این نوع دادهای استفاده نمایید:
اقزودن اطلاعات
نحوه افزودن یا ویرایش دقیقا همانند قبل است:
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
اما چیزی که جی سان را قوی می کند و ما مجبور به استفاده از آن می کند توابعی است که mysql در اختیار ما قرار می دهد تا نوع داده ای جی سان را مدیریت نماییم.
برخی از توایع کاربردی json
در توابع زیر شما می توانید مقدار json مورد نظر را بسته به نیازتان استخراج نمایید:
-- returns {"a": 1, "b": 2} SELECT JSON_OBJECT('a', 1, 'b', 2);
-- returns ["a", 1, {"key": "value"}]: SELECT JSON_MERGE('["a", 1]', '{"key": "value"}');
تا الان بخوبی توانستیم با نوع داده ای جی سان در mysql آشنا شویم ولی کاربرد این نوع داده ای هنگام استخراج آن می باشد که طبق دو نمونه زیر می توانیم این نوع داده های را به صورت مستقیم استخراج نماییم:
-- all books with the 'JavaScript' tag: SELECT * FROM `book` WHERE JSON_CONTAINS(tags, '["JavaScript"]'); -- all books with tags starting 'Java': SELECT * FROM `book` WHERE JSON_SEARCH(tags, 'one', 'Java%') IS NOT NULL
به منظور دسترسی به داده های جی سان مستقیم نیز به صورت زیر عمل می کنیم
-- returns "SitePoint": SELECT JSON_EXTRACT( '{"id": 1, "website": "SitePoint"}', '$.website' );