MySQL数据库:
数据库:
存放数据的仓库,用来按照特定的结构去组织和管理我们的数据,有数据库就可以更加方便的储存数据;
数据库只是存储数据的一种手段,最终数据是存放在硬盘中的,只是存放的格式不同于文本文件。
我们选择MySQL,MySQL只是数据库中的一种;一个Excel表格就可以看做一个数据库。
下载MySQL:
在开发领域我们存储数据一般使用专门的数据库服务器提供的数据服务,如果要让自己的电脑可
以提供数据库服务,那么就需要安装特定的服务器软件,如:Oracle 、MySQL 、SQL Server,这里采用MySQL数据库,下载地址:https://dev.mysql.com/downloads/mysql/;将下载地址复制到浏览器回车选择对应版本的MySQL安装包,如:
点击download后会跳出一个登陆选项,此时仅仅点击如图所示即可:
安装MySQL流程:
将MySQL安装包下载并放到C盘中T文件夹(这里建议放到C盘,否则配置可能会有点麻烦),解压之后按照下面步骤依次进行:
1.以管理员权限运行cmd,如下图:
2.cd定位到当前MYSQL文件的bin目录下:
3.紧接着在命令窗口键入:mysqld --install ,命令安装MySQL(如果这里提示:找不到vcruntime140_1.dll,那么你需要安装 微软常用运行库合集,不知道的可以百度,或联系笔者找资源),如:
4.初始化数据库:紧接着在命令窗口键入:mysqld --initialize --console 命令,此时会得到一个随机密码Akrw#Jbve1(f,记住这个密码供修改密码时使用,如:(初始化成功后mysql文件夹中会多个data文件夹)
5.启动MySQL服务:在左下角搜索 服务应用 后找到MySQL启动,或者在命令窗口继续输入:net start MySQL 回车,如:
6.登陆MySQL服务:继续在命令窗口键入:mysql -u root -p 回车后输入临时密码再回车,root为数据库名,如:
输入临时密码后如图所示则表示登陆成功,若提示:Access denied for user ‘root’@‘localhost’ (using password: YES)则一般为密码输入错误:
7.修改临时密码:由于临时密码不便于记忆,因此一般会将数据库的密码修改为自己熟记的,其方法是进入数据库后键入:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘自己的密码’; 注意:这个修改数据库密码的语句是SQL语句,后面记得加封号,否则修改失败,之后使用SQL语句exit退出MySQL用新密码登陆,如:
8.使用SQL语句操作数据库中的数据:下面会详细介绍SQL语句,这里只需要知道exit表示退出数据库即可。
9.关闭MySQL服务:在命令行使用exit退出SQL环境后键入:net stop mysql命令,如:
10.卸载MySQL服务:停止mysql服务后,在命令行键入:sc delete mysql 回车删除MySQL服务,之后再删除安装包。
MySQL的REPL环境对数据库的基本操作:
List of all MySQL commands:Note that all text commands must be first on line and end with ';'? (\?) Synonym for `help'.clear (\c) Clear the current input statement.connect (\r) Reconnect to the server. Optional arguments are db and host.delimiter (\d) Set statement delimiter.ego (\G) Send command to mysql server, display result vertically.exit (\q) Exit mysql. Same as quit.go (\g) Send command to mysql server.help (\h) Display this help.notee (\t) Don't write into outfile.print (\p) Print current command.prompt (\R) Change your mysql prompt.quit (\q) Quit mysql.rehash (\#) Rebuild completion hash.source (\.) Execute an SQL script file. Takes a file name as an argument.status (\s) Get status information from the server.system (\!) Execute a system shell command.tee (\T) Set outfile [to_outfile]. Append everything into given outfile.use (\u) Use another database. Takes database name as argument.charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.warnings (\W) Show warnings after every statement.nowarning (\w) Don't show warnings after every statement.resetconnection(\x) Clean session context.For server side help, type 'help contents'
MySQL数据可视化工具:
为了方便管理数据库中的数据,我们一般选择数据库的可视化工具来管理数据。常见的数据库可视化工具有:Navicat Premium,它是一个付费软件,可免费使用几天,下载地址为:http://www.navicat.com.cn/download/navicat-premium, 使用方法建议阅读官方文档:http://www.navicat.com.cn/products/navicat-premium,实际开发中推荐使用;
若只是简单管理一下数据库,那么推荐使用免费的:SQLyog,若想要使用请阅读官方文档:https://sqlyog.en.softonic.com/
提示:使用sqlyog链接数据库时常常会出现链接失败,这里有两个原因,1.服务器端口号没有开通(到服务器控制台开通3306端口号即可);2.新版mysql中加密规则不一致,会报错:plugin 'caching_sha2_password,如果是加密规则错误,需要修改加密规则,具体如下步骤:
1.cmd输入密码进入mysql后,继续键入命令:use mysql;
命令连接权限数据库
2.继续键入命令:select user,host,plugin from user;
查看user对应的host及加密规则
3.继续键入命令:
SQL语句:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123123123fgv';
修改加密规则,注意@前后用户名和主机应该是上面查询到的表中一一对应的,否则更改失败且报错,123123123fgv为自己的密码
4.继续键入命令:flush privileges;
刷新权限,看到ok则更新成功,退出数据库即可。
.5执行完上面步骤后,如果还是不能成功,如果确保端口号开通成功的情况下,继续执行命令:update user set host = '%' where user = ‘root’;
后再次flush privileges;
刷新权限即可。
数据库的基本概念:数据库服务软件和数据的仓库。
sql语句中的注释是:-- ,特别提醒:查询语句返回的是第一个结果集,而增删改语句返回的是一个受影响的行数。
SQL语句中的增删改查:
基本查询数据语句:select * from users;---不知道表里有什么数据的时候使用*通配符,不建议使用通配符,因为会全表扫描降低效率select id from users;select id, title, name from `users`;select `id`,`title`,`name` from `users`;---为了区分关键字使用反引号把要查询的名字引起来。select `foo` from users;---查询表中没有的字面量,返回所查询的字面量新增数据语句:insert into users values (null,`esd`,`码子`,`14`,`0`);---这里写null的原因是为了撑开某项(id项)insert into users value (null,`esd`,`码子`,`14`,`0`);insert into users (title,name,age,gender) value ('CEO','麦子',18,50);---如果不想撑开id这个项,而且不报错的情况下可以用前后括号一一对应。 子语句:意思是不能单独执行,必须配合 删除 修改 查询语句。例如:删除语句:delete from users;---删除表中的所有数据。delete from users where title = 'ufo';--where语句可以配合and或者是or使用。delete from users where title = 'ufo' and id = 2;delete from users where title = 'ufo' or id = 3;delete from users where title = 'cyh' and id > 1;delete from users where id in (1, 2, 3, 4);---指定id在1,2,3,4中。delete from users where id = 1 or 1 = 1;//需要注意:这里id条件表示1或者1=1,此时where条件失效,会删除掉所有的users数据,这种现象叫SQL注入,实际开发中应该避免这种情况的出现,其解决方法介绍一种:在客户端要求只输入数字类型或者服务端如php中使用(int)转整数,不允许输入字符串型,单纯的数字是无法进行SQL注入的。修改语句:update users set title ='CEO';---修改所有数据的title为CEO。update users set title ='CEO' where id in (1, 2, 3, 4);update users set title ='CEO',`name`='张三',`age`='18' where id = 2;---更新多个数据时,用逗号隔开。 常见的查询函数:count()函数:select count(id) from users;select count(具体的值) from users;---count()函数一般时查询具体的值select count(1) as count from users;---使用as使得列的名字更加明确,这里列的名字是count。select max(id) from users;---查询id的最大值;select min(id) from users;---查询id的最小值;select avg(id) from users;---求id的平均值;分页查询语句:select * from users limit 2;---limit这个函数只传一个参数时,是限制的取几条数据,默认取前面的几条数据。select * from users limit 3,2;---limit函数传两个参数时,第一个参数表示越过前(3)几条数据取(2)几条数据。分页查询规律:skip = (page-1)*length----越过的数据条数limit <skip> , <length> 分页查询常和order by 搭配使用,表示以什么字节排序,语句后面什么也不写表示默认升序asc,降序desc,如:order by time desc;//表示以time字节降序排序。查询一个表中关联另一个表中某字节的所有数据:inner join 表示关联,on 后面跟上关联表相互之间的关系select *from usersinner join student on users.id = student.id;//查询users表中users的id和student表中id相同的所有数据。查询一个表中关联另一个表中某字节的一些数据:表名后面跟 点和字节名 表示某表的具体字节select users.id,users.name,student.agefrom usersinner join student on users.id = student.idinner join person on person.id = users.id;//查询users表中id和student表及person表中id相同的users中的id、name、age //根据某个字段分组且根据另一个字段的最大值显示每一组某系字段的数据:
SELECT id,pid,D1,D2,`subTime` FROM `data` WHERE `subTime` IN ( SELECT MAX(`subTime`) FROM `data` GROUP BY pid) AND pid IN (60,61) 特别注意:下面只能查到两个字段的值:
SELECT pid,MAX(D1) FROM `data` WHERE pid IN (60,61) GROUP BY pid; // 分表查询:第一个from()小括号中应该是一个变量,根据数据库中有几个对应的表再生成查询的语句,多个表用union all或union连接,中间as 名称不能丢,这样可以查询多个相同类型的表中的所有数据:
SELECT * FROM ((SELECT * FROM test1) UNION ALL (SELECT * FROM test2)) AS result WHERE timer > '2020-01-12' AND timer < '2022-9-23' ORDER BY timer DESC; // 查同一张表中第一条数据和最后一条数据:常用于计算一段时间区间数据的递增值(提示:SQL Serve不支持此语句,SQL server可以将两条语句写为同一个,中间用空格连接,此时会有两条影响结果,拿到影响结果即可,其中limit在某些数据库中不支持)
SELECT * FROM (SELECT * FROM `cumulative_62` WHERE pid=62 ORDER BY id ASC LIMIT 0,1) AS `a` UNION SELECT * FROM (SELECT * FROM `cumulative_62` WHERE pid=62 ORDER BY id DESC LIMIT 0,1) AS `b`
通过php操作数据库:
实际开发中是通过后端语言对数据库进行操作的,这里使用php操作MySQL的基本流程如下:
//1.建议php与MySQL的连接桥梁:mysqli_connect(数据库ip地址,用户名,密码,数据库名称),如:$connection = mysqli_connect('127.0.0.1','root','kuhai123','test');//2.设置字符编码:查询中文时会遇到编码问题,因此在查询之前需要使用:mysqli_set_charset(连接对象,编码格式)设置,如:mysqli_set_charset($connection,'utf8');// 开发中通常会判断是否连接数据库成功,若果在确保连接成功的情况下可以省略此判断,如:if(!$connection){exit('连接数据库失败');}else{exit('连接数据库成功');};//3.操作数据库://mysqli_query(连接地址,'查询语句')得到的是一个对象,这个对象可以被一行一行的拿数据,如:$query=mysqli_query($connection,'select id from users;');//因为$query中的数据是以对象的方式一条一条的储存的,要想拿到一条数据,就要使用mysqli_fetch_assoc(查询返回的对象)对$query进行操作,默认只会拿到第一条数据,想要拿到多条就的执行多次此语句,通常使用遍历,如:$row=mysqli_fetch_assoc($query);var_dump($row);$row=mysqli_fetch_assoc($query);var_dump($row);//受影响行数:当需要知道查询是否成功时,可以使用mysqli_affected_rows(连接桥梁对象)返回桥梁上受影响的函数,如:$nth = mysqli_affected_rows($connection);var_dump($nth);//4.释放查询数据集:当对一个数据操作完后,应该使用:mysqli_free_result(数据集对象)释放空间,如:mysqli_free_result($query);//5.拆桥:在3操作数据库中可能会同时查询多个数据,当所有数据查询完毕后需要将这个桥梁关闭,如:mysqli_close($connection);
提示:实际开发中可能会遇到各种错误,此时需要根据实际情况作出处理;当数据库的信息错误时会提示错误信息,如果不想让这个提示信息出现在客户端,可以修改php配置文件php.ini中的display_errors=‘off’;或者在mysqli_connect前面加@符号,如:@mysqli_connect();
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海