MySQL GROUP_CONCAT текстийн урт

GROUP_CONCAT гэж буянтай функц байдаг, их хэмжээний текст group-лэй залгах үед зарим текст таслагддаг, үүнийг дараахь коммандаар шийдлээ. Хэрэв байнга ашиглана гэвэл mysql-н тохиргоонд нь хийж өгөх хэрэгтэй байх.

SET SESSION group_concat_max_len = 1000000;

дараа нь

SELECT id, GROUP_CONCAT( `field`) SEPARATOR "; ") FROM table1 GROUP BY `id`

UPDATE JOIN бичих нь: MsSQL, MySQL, pgSQL

Хааяа UPDATE JOIN хийх хэрэгцээ гардаг. Заримдаа хэрхэн бичихээ мартчих юм. T-SQL-ийн хувьд хэд хэдэн арга бий, гэхдээ би доор бичсэн хувилбарыг ашиглаад сурчихсан.

T-SQL

UPDATE blog_tagging AS bt
	SET bt.tag = t.tag_name
	FROM tbl_tags AS t
	WHERE bt.tag_id = t.tag_id

MySQL

UPDATE blog_tagging AS bt
	LEFT JOIN tbl_tags AS t ON bt.tag_id = t.tag_id
	SET bt.tag = t.tag_name

pgSQL

UPDATE blog_tagging bt
	SET tag= t.tag_name
	FROM tbl_tags t
	WHERE bt.tag = t.tag_name

ЖИЧ: pgSQL UPDATE JOIN нэмэв.

Хэрэв NULL бол ISNULL, IFNULL, NVL

Датабаз дээр null утга бүхий талбар дээр хэрхэн ажиллах талаар тэмдэглээд авая.

Жишээгээр:

SELECT field_mungu + field_tatvar AS niit_mungun_dun FROM tbl_husnegt WHERE ... GROUP BY ... ORDER BY ....

field_mungu нь NULL эсвэл field_tatvar нь NULL утга бол niit_mungun_dun нь NULL гарна. Харин NULL-ийг 0, эсвэл өөр ямар нэгэн тоон /int, double, decimal/ утгаар сольвол эцсийн үр дүн NULL биш тоо гарна.

SELECT ISNULL(field_mungu,0) + ISNULL(field_tatvar,0) AS niit_mungun_dun FROM tbl_husnegt WHERE ... GROUP BY ... ORDER BY ....

Тоон утгууд дээр ажиллахаас гадна тэмдэгтэн /char, string, varchar, nvarchar, text/ утгууд дээр ч ажиллаж болно. Овгийн эхний үсгийг аваад цэг залгаад нэрийг залган /А. Бат/ хэрэглэх үед овог байхгүй бол NULL гарч ирээд байдаг.  Гэх мэтчилэн ямар ч зүйлд ашиглаж болно.

T-SQL буюу MS-SQL : ISNULL( талбарын_нэр, солих утга )

PL-SQL буюу Oracle: NVL( талбарын_нэр, солих утга )

MySQLIFNULL( талбарын_нэр, солих утга )

Датабаз дээр trigger бичих нь: MsSQL ба MySQL

MySQL, MSSQL датабазын хүснэгт дээр trigger бичих нь.

MSSQL / T-SQL

Insert Trigger

CREATE TRIGGER trigger_insert1
ON table1
FOR INSERT
AS
BEGIN
UPDATE table2
    SET field_total = field_total + inserted.field_name1
END

Update Trigger

CREATE TRIGGER trigger_update1
ON table1
INSTEAD OF UPDATE
AS
BEGIN
SELECT t1.*, i.* FROM table1 t1
    JOIN inserted i ON t1.field_id = i.field_id
END

Delete Trigger

CREATE TRIGGER trigger_delete1
ON table1
FOR DELETE
AS
BEGIN
INSERT INTO logTableName
    SELECT * FROM deleted
END

Trigger Event

deleted – DELETE trigger үед дата нь deleted гэсэн хүснэгт хэлбэрээр байна.
inserted – INSERT, UPDATE trigger үед дата нь inserted гэсэн хүснэгт хэлбэрээр байна.

Trigger Time

FOR DELETE – Устгахаас өмнө
FOR INSERT – Нэмэхээс өмнө
FOR UPDATE – Засахаас өмнө
FOR INSERT, UPDATE – Нэмж, Засахаас өмнө

AFTER DELETE – Устгасаны дараа
AFTER INSERT – Нэмсэний дараа
AFTER UPDATE – Зассаны дараа
AFTER INSERT, UPDATE – Нэмж, Зассаны дараа

INSTEAD OF DELETE – Устгахын оронд
INSTEAD OF INSERT – Нэмэхийн оронд
INSTEAD OF UPDATE – Засахын оронд
INSTEAD OF INSERT, UPDATE – Нэмж, Засахын оронд

MySQL

Insert Trigger

CREATE TRIGGER trigger_insert1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
UPDATE table2
    SET field_total = field_total + NEW.field_name1
END;

Update Trigger

CREATE TRIGGER trigger_update1
AFTER UPDATE
ON table1
FOR EACH ROW
BEGIN
UPDATE table2
    SET field_total = field_total + NEW.field_name1
END

Delete Trigger

CREATE TRIGGER trigger_delete1
AFTER DELETE
ON table1
FOR EACH ROW
BEGIN
	INSERT INTO log_table_1 (id, field1, field2, field_date)
		values( old.id, old.field1, old.field2, NOW() );
END;

Trigger Event

OLD – DELETE trigger үед дата нь OLD гэсэн хүснэгт хэлбэрээр байна.
NEW – INSERT, UPDATE trigger үед дата нь NEW гэсэн хүснэгт хэлбэрээр байна.

Trigger Time
BEFORE DELETE – Устгахаас өмнө
BEFORE INSERT – Нэмэхээс өмнө
BEFORE UPDATE – Засахаас өмнө

AFTER DELETE – Устгасаны дараа
AFTER INSERT – Нэмсэний дараа
AFTER UPDATE – Зассаны дараа

Дурын мөр SELECT хийх

MYSQL:

SELECT багана_нэр FROM хүснэгт_нэр ORDER BY RAND() LIMIT 10

Oracle:

SELECT багана_нэр FROM ( SELECT column FROM хүснэгт_нэр ORDER BY dbms_random.value ) WHERE rownum <= 10

PostgreSQL:

SELECT багана_нэр FROM хүснэгт_нэр ORDER BY RANDOM() LIMIT 10

MSSQL:

SELECT TOP 10 багана_нэр FROM хүснэгт_нэр ORDER BY NEWID()

Oracle жаахан тиймэрхүү, тэрнээс mysql, postgresql энэ тэр амархан байгааз, тэр mssql-н NEWID() функц нь 36-н урттай unique стринг generate хийдийн, ер нь бол стринг ID болгон хэрэглэдэг л дээ.

%d bloggers like this: