mysql function select 赋值_MySql 进阶
生活随笔
收集整理的這篇文章主要介紹了
mysql function select 赋值_MySql 进阶
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多表查詢
修改表poetry_item,增加 user_id字段
mysql> ALTER table `poetry_item` ADD `user_id` varchar(30) COLLATE utf8_bin DEFAULT NULL COMMENT '用戶id' after `type`;mysql> INSERT INTO user_info (user_id, username, phone, gender, avatar, email, address, description) VALUES(9000, '李白', '16969819999', 1, 'https://default.png', 'libai@126.com', 'changan', '君不見黃河之水天上來,奔流到海不復回。...');...mysql> UPDATE `poetry_item` SET `user_id`=9000 WHERE poetry_author='李白';...Note 由于前期導入的數據都沒有 user_id 字段,可能通過腳本的方式把 poetry_item 表有多少 poetry_author 作者,全部需要添加到 user_info 表中;
使用 node.js 去批量處理數據
const mysql = require("mysql");const Mock = require("mockjs");const pinyin = require("pinyin");const fs = require("fs");// node.js msyql 連接const connection = mysql.createConnection({ ?host: "localhost", ?port: 3306, ?user: "root", ?password: "123456", ?database: "shicimingju",});connection.connect();connection.query( ?"SELECT DISTINCT poetry_author FROM poetry_item WHERE user_id IS NULL;", ?function (error, results, fields) { ? ?if (error) throw error; ? ?for (let index = 0; index < results.length; index++) { ? ? ?// 使用 Mockjs,模擬 phone 字段 ? ? ?// `npm install mockjs` ? ? ?let phone = Mock.mock(/^1[385][1-9]\d{8}/); ? ? ?let userId = 9000 + index; ? ? ?let poetryNameCn = results[index].poetry_author; ? ? ?let pinyinNames = pinyin(poetryNameCn, { ? ? ? ?style: pinyin.STYLE_NORMAL, ? ? }); ? ? ?let poetryNamePy = pinyinNames.join().replace(",", ""); ? ? ?connection.query( ? ? ? ?`SELECT poetry_name FROM poetry_item WHERE poetry_author='${poetryNameCn}' LIMIT 0, 1;`, ? ? ? ?function (error, results, fields) { ? ? ? ? ?console.log(error, results, fields); ? ? ? ? ?let poetryName = results[0].poetry_name; ? ? ? ? ?// 插入Sql ? ? ? ? ?// let insertSql = `INSERT INTO user_info (user_id, username, phone, gender, avatar, email, address, description) VALUES(${userId}, '${poetryNameCn}', '${phone}', 1, 'https://default.png', '${poetryNamePy}@gmail.com', '', '${poetryName}');\n`; ? ? ? ? ?// fs.appendFileSync("./batch_insert.sql", insertSql); ? ? ? ? ?// 更新Sql ? ? ? ? ?// let updateSql = `UPDATE poetry_item SET user_id=${userId} WHERE poetry_author='${poetryNameCn}';\n`; ? ? ? ? ?// fs.appendFileSync("./batch_update.sql", updateSql); ? ? ? ? ?// 直接使用 mysql 連接更新 ? ? ? ? ?let insertSql = `INSERT INTO user_info (user_id, username, phone, gender, avatar, email, address, description) VALUES(${userId}, '${poetryNameCn}', '${phone}', 1, 'https://default.png', '${poetryNamePy}@gmail.com', '', '${poetryName}');`; ? ? ? ? ?connection.query(insertSql); ? ? ? ? ?let updateSql = `UPDATE poetry_item SET user_id=? WHERE poetry_author=?;`; ? ? ? ? ?connection.query(updateSql, [userId, poetryNameCn]); ? ? ? } ? ? ); ? } });// connection.end();# 中間出現錯誤,清空表,再次重試mysql> truncate table <table_name>mysql> delete FROM <table_name>上手操作
去重
# 當查詢表中有很多字段重復了,可以使用 DISTINCT 去除重復值mysql> SELECT DISTINCT poetry_author FROM poetry_item WHERE user_id is null;別名
# 不使用別名mysql> SELECT t1., t1., t2.FROM t1, t2 WHERE t1.=<value> AND t1.=<value># AS u 把 user_info 取別名mysql> SELECT * FROM user_info AS u WHERE username='李白';# 不用 AS 直接用空格隔開mysql> SELECT * FROM user_info u WHERE username='李白';# 只查詢 username user_id phone 三個字段mysql> SELECT u.username, u.user_id, u.phone FROM user_info AS u WHERE username='李白';username user_id phone ? ? ? ?-------- ------- -------------李白 ? ? ? ?9006 ? ? 18663786831IN
# IN (...) ()可以有多個值,用逗號隔開mysql> SELECT * FROM user_info WHERE user_id IN (9026, 9036)BETWEEN ... AND
# SELECT FROM WHERE BETWEEN value1 AND value2mysql> SELECT * FROM user_info WHERE user_id BETWEEN 9000 AND 9002;排序 ORDER BY
# ORDER BY 排序關鍵字# ASC 升序 DESC 降序mysql> SELECT * FROM poetry_item WHERE poetry_author="李白" ORDER BY poetry_num ASC;連表 JOIN
mysql> SELECT p.poetry_name, p.user_id, u.username FROM poetry_item p, user_info u WHERE u.user_id = p.user_id LIMIT 0, 2; poetry_name ? ? ? ? ? user_id username ?-------------------- ------- ----------《關雎》 ? ? ? ? ? ? ? ? ?9000 ? ? 詩經 ? ?《蒹葭》 ? ? ? ? ? ? ? ? ?9000 ? ? 詩經內連接(INNER JOIN)
# 語法 SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name# INNER JOIN 與 JOIN 是相同的mysql> SELECT * FROM poetry_item p INNER JOIN user_info u ON p.user_id=u.user_id AND poetry_author='江景' ORDER BY id DESC LIMIT 0, 10;左連接(LEFT JOIN )
# 語法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name# LEFT JOIN 從左表 (table_name1) 返回所有的行,即使在右表 (table_name2) 中沒有匹配的行mysql> SELECT * FROM poetry_item p LEFT JOIN user_info u ON p.user_id=u.user_id AND poetry_author='江景' ORDER BY id DESC LIMIT 0, 10;右連接(RIGHT JOIN )
# 語法 SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name# RIGHT JOIN 從右表 (table_name2) 返回所有的行,即使在左表 (table_name1) 中沒有匹配的行mysql> SELECT * FROM poetry_item p RIGHT JOIN user_info u ON p.user_id=u.user_id AND poetry_author='江景' ORDER BY id DESC LIMIT 0, 10;全連接(FULL JOIN)
# 語法 SELECT column_name(s) FROM table_name2 FULL JOIN table_name1 ON table_name2.column_name=table_name1.column_name# FULL JOIN 關鍵字會從左表 (table_name1) 和右表 (table_name2)返回所有的行。如果 "table_name1" 中的行在表 "table_name2" 中沒有匹配,或者如果 "table_name2" 中的行在表 "table_name1" 中沒有匹配,這些行同樣會被查詢出mysql> SELECT * FROM poetry_item p FULL JOIN user_info u ON p.user_id=u.user_id AND poetry_author='江景' LIMIT 0, 10; # 不支持 FULL JOIN, 可以使用 UNION ALLmysql> SELECT * FROM poetry_item ? ? LEFT JOIN user_info ? ? ON poetry_item.user_id = user_info.user_idUNION ALL ? ? SELECT * ? ? FROM user_info ? ? RIGHT JOIN poetry_item ? ? ON user_info.user_id = poetry_item.user_id多對多
多對多查詢需要創建中間表進行關聯
mysql> CREATE TABLE `role`( `role_id` int primary key not null auto_increment comment '角色ID', ?`role_name` varchar(20) not null COMMENT '角色名字', ?`role_desc` varchar(500) not null COMMENT '角色描述') ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT '角色表';mysql> insert into `role` (`role_name`, `role_desc`) values("詩人","詩人,就一般意義來講,通常是指寫詩的人,但從文學概念上講,則應是在詩歌(詩詞)創作上有一定成就的寫詩的人和詩作家。");mysql> insert into `role` (`role_name`, `role_desc`) values("詞人","詞,是中國古代詩歌的一種,始于梁代,形成于唐代而極盛于宋代,故名“宋詞”。宋詞是中國古代文學皇冠上光輝奪目的巨鉆,歷來與唐詩并稱 “雙絕”。");mysql> insert into `role` (`role_name`, `role_desc`) values("劍客","精于劍術的人;劍俠。");mysql> CREATE TABLE `user_role_rela` ( ?`urr_id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '用戶角色關聯ID', ?`user_id` INT NOT NULL COMMENT '用戶ID', ?`role_id` INT NOT NULL COMMENT '角色ID') ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用戶角色關聯表';mysql> INSERT INTO `user_role_rela` (`user_id`, `role_id`) VALUES(9006, 1);mysql> INSERT INTO `user_role_rela` (`user_id`, `role_id`) VALUES(9006, 3);mysql> SELECT u.`username`, r.`role_name`, r.`role_desc` FROM user_info u, role r, user_role_rela urr WHERE u.`username`="李白" AND u.user_id=urr.`user_id` AND r.`role_id` = urr.`role_id`;總結
以上是生活随笔為你收集整理的mysql function select 赋值_MySql 进阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何挑选手机耳机
- 下一篇: camfrog连接错误,无法连接怎么办?