mysql与msql2数据驱动
短信预约 -IT技能 免费直播动态提醒
mysql基本使用
数据库操作(DDL)
-- 数据考操作-- 1.查询所有数据库SHOW DATABASES;-- 2.选择数据库USE learn_mysql;-- 3.当前正在使用的数据库SELECT DATABASE();-- 4.创建数据库CREATE DATABASE IF NOT EXISTS learn_mysql;-- 5.删除数据库DROP DATABASE IF EXISTS test_database;-- 6.修改数据库ALTER DATABASE test_database CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;
表结构操作(DDL)
-- 表操作-- 1.查询所有表SHOW TABLES;-- 2.查看表结构DESC `user`;-- 3.创建表CREATE TABLE IF NOT EXISTS `user` (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) UNIQUE NOT NULL,age INT DEFAULT 1);-- 4.删除表DROP TABLE IF EXISTS `user`;-- 5.修改表-- 5.1修改表名ALTER TABLE `t_user` RENAME TO `user`;-- 5.2增加表字段ALTER TABLE `user` ADD createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP;-- ALTER TABLE `user` ADD updateTime TIMESTAMP;-- 修改表格数据后,根据当前时间戳更新updateTimeALTER TABLE `user` ADD updateTime TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP-- 5.3修改表字段名及类型ALTER TABLE `user` CHANGE createTime createAt DATETIME;-- 5.4只修改表字段类型ALTER TABLE `user` MODIFY id BIGINT AUTO_INCREMENT;-- 5.5删除字段ALTER TABLE `user` DROP createAt;
表数据操作(DML)
-- 1.向表增加数据INSERT INTO `user` ( `name`, `age`) VALUES ('cjc', 100);INSERT INTO `user` ( `name`, `age`) VALUES ('ccc', 999);INSERT INTO `user` ( `name`, `age`) VALUES ('aaa', 111);-- 2.删除数据-- 删除所有数据DELETE FROM `user`DELETE FROM `user` WHERE `name` = 'aaa' -- 3.修改数据UPDATE `user` SET `name` = 'CJC',`age` = 10000 WHERE `name` = 'cjc'-- 修改数据时,手动加上时间的更新UPDATE `user` SET `name` = 'CCC',`age` = 99999,`updateTime` = CURRENT_TIMESTAMP WHERE `name` = 'ccc'-- 修改了数据,根据当前时间戳更新updateTimeALTER TABLE `user` ADD `updateTime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
表数据查询(DQL)
-- 1.条件查询SELECT * FROM `user`-- %任意字符0个或多个 _任意字符1个SELECT `name` AS `user_name` FROM `user` WHERE `name` LIKE 'C%' -- 第二个字符为cSELECT * FROM `user` WHERE `name` LIKE '_c%' -- 2.分页查询-- 偏移1条数据后,查询前20条数据SELECT * FROM `user` LIMIT 20 OFFSET 1
查询语句执行顺序
SELECT tagname as "tag1",tagname2 as "tag2",[聚合函数]...FROM table1[LEFT] JOIN table2on xxx[LEFT] JOIN table3on xxxWHERE 不含聚合函数的条件GROUP BY tag1,tag2...等所有非聚合函数字段HAVING 含聚合函数的条件ORDER BY tag1,tag2 DESCLIMIT [偏移量],显示的记录数; # LIMIT 显示的记录数 OFFSET 偏移量;
多表查询
多对多关系
-- 1.创建表-- 学生表CREATE TABLE IF NOT EXISTS `student` (id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(10) UNIQUE NOT NULL);-- 课程表CREATE TABLE IF NOT EXISTS `course` (id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(20) UNIQUE NOT NULL);-- 关系表-- 多对多,一个学生能选择多门课程,一门课程被多个学生选择CREATE TABLE IF NOT EXISTS `student_course` (id INT PRIMARY KEY AUTO_INCREMENT,-- 也可以使用联合主键-- student_course_pk PRIMARY KEY(userId,hobbyId),-- 外键约束,更新/删除时,相关联的表也同步更新/删除student_id INT NOT NULL,course_id INT NOT NULL,FOREIGN KEY (student_id) REFERENCES student(id) ON UPDATE CASCADE ON DELETE CASCADE,FOREIGN KEY (course_id) REFERENCES course(id) ON UPDATE CASCADE ON DELETE CASCADE, -- 记录创建时间及更新时间createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updateTime TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP);-- 2.插入数据INSERT INTO `student` ( `name`) VALUES ('a');INSERT INTO `student` ( `name`) VALUES ('b');INSERT INTO `student` ( `name`) VALUES ('c');INSERT INTO `student` ( `name`) VALUES ('d');INSERT INTO `course` ( `course_name`) VALUES ('计算机网络');INSERT INTO `course` ( `course_name`) VALUES ('数据结构');INSERT INTO `course` ( `course_name`) VALUES ('操作系统');INSERT INTO `course` ( `course_name`) VALUES ('计算机组成原理');INSERT INTO `course` ( `course_name`) VALUES ('没人选的课程');INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (1,1);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (2,1);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (2,2);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (3,1);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (3,2);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (3,3);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,1);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,2);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,3);INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,4);-- 3.多表查询-- 所有学生的选课情况SELECT student.`name`,course.course_name FROM `student`LEFT JOIN `student_course` ON student.id = student_course.student_idLEFT JOIN `course` ON course.id = student_course.course_idSELECT student.`name`,COUNT(*) '课程数量' FROM `student`LEFT JOIN `student_course` ON student.id = student_course.student_idLEFT JOIN `course` ON course.id = student_course.course_idGROUP BY student.`name`
将查询结果转化为JSON
将查询到的课程信息转化为json格式:
-- 使用聚合函数JSON_OBJECT([key, val[, key, val] ...])
将查询结果转化为数组
-- 使用聚合函数JSON_ARRAYAGG(col_or_expr)
mysql2数据库驱动
基本使用
const mysql = require('mysql2')// 1.创建一个连接const connect = mysql.createConnection({ host: 'localhost', port: 13306, user: 'root', password: 'root', database: 'learn_mysql'})// 2.定义sql语句const statement = 'SELECT * FROM `student`'// 3.执行sql语句connect.query(statement, (err, val, fields) => { if (err) { console.log(err); return } // 打印查询结果 console.log(val);})
预处理语句
提高性能
将语句模块发送给mysql编译、优化、转换,然后存储它但不执行。之后传入实参时,真正执行。多次执行,也只编译一次。
防止sql注入
const mysql = require('mysql2')// 1.创建连接池const connectionPool = mysql.createPool({ host: 'localhost', port: 13306, user: 'root', password: 'root', database: 'koa-apis', connectionLimit: 5})// 2.测试是否连接成功connectionPool.getConnection((err, connection) => { if (err) { console.log('数据库连接失败', err); return } connection.connect(err => { if (err) { console.log('和数据库交互成功', err); } else { console.log('和数据库交互成功'); } })})// 3.定义预处理语句// const statement = 'SELECT * FROM `student` WHERE id > 2 AND name LIKE "%c%"'const statement = 'SELECT * FROM `student` WHERE id > ? AND name LIKE ?'// 4.执行sql语句// 使用promise语法const connection = connectionPool.promise()connection.execute(statement, [2, '%c%']).then(res => { const [val, fields] = res console.log(val);}).catch(err => { console.log(err);})
来源地址:https://blog.csdn.net/qq_43551056/article/details/132571075
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341