当前位置: 首页 > news >正文

MySQL 基础学习总结(一)

MySQL是啥?数据库又是啥?

MySQL:

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

数据库:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。

我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。

所以,我们使用关系型数据库管理系统一般是用来存储和管理大数据量。

关系型数据库(SQL):关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。

非关系型数据库(NOSQL):非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

MySQL安装及配置

  1. 首先先下载到一个文件夹中

  2. 下载后在环境变量中Path路径 添加MySQL的bin目录的路径

  3. 在 mysql-5.7.19-winx64 文件夹中 创建一个 my.ini 文件,内容为:

    [client]
    port=3306
    default-character-set=utf8
    [mysqld]
    #设置为自己MYSQL的安装目录
    basedir=D:\hspmysql\mysql-5.7.19-winx64\
    #设置为MYSQL的数据目录
    datadir=E:\mysql-5.7.19-winx64\data\
    port=3306
    character_set_server=utf8
    ##跳过安全检查,注销后,需要输入正确的用户名和密码才能启动
    skip-grant-tables
  4. 使用管理员的身份打开cmd,并切换到安装的MySQL的bin目录底下,执行 mysqld-install

  5. 初始化数据库:mysqld --initialize-insecure --user=mysql 此句执行后就会生成一个 data 目录

  6. 启动服务 net start mysql (要看MySQL服务是否启动可以去任务管理器的服务栏看)

  7. 关闭服务 net stop mysql

  8. 进入MySQL管理终端 mysql -u root -p

  9. 使用mysql数据库 :use mysql; 然后 UPDATE user SET authentication_string = PASSWORD('新的密码') WHERE user = 'dbadmin' AND host = 'localhost'; FLUSH PRIVILEGES; 这句表示刷新一下权限

  10. quit 指退出管理终端

如果真在 5-10步骤中哪里出了非错,可删除MySQL后重新配置服务 (sc delete mysql 改语句工作时一定要慎用!!)

4~7步一定要以管理员身份运行控制台才行

MySQL的服务,默认是“启动”的状态,只有启动了mysql才能用。 默认情况下是“自动”启动,自动启动表示下一次重启操作系统的时候自动启动该服务。

可以在服务上点击右键: 启动 重启服务 停止服务 ...

还可以改变服务的默认配置: 服务上点击右键,属性,然后可以选择启动方式: 自动(延迟启动) 自动 手动 禁用

在windows操作系统当中,怎么使用命令来启动和关闭mysql服务呢? 语法: net stop 服务名称; net start 服务名称;

其它服务的启停都可以采用以上的命令。

使用命令行窗口连接MySQL数据库:

首先,MySQL是一种服务(可在任务管理器服务栏中查看到MySQL),而只要是一个服务都会监听一个端口

mysql -h 主机IP -P 端口 -u 用户名 -p密码 (p和密码间不要有空格,如果-p后面没有写密码,回车后会要求输入密码)

如果不写 -h 主机IP,默认就是连接到本地

如果不写-P 端口,默认就是3306

在实际工作中往往会修改端口号而不是使用此默认端口号,此处为了方便就不做改动了

MySQL数据库的三层结构

 

数据在数据库中的存储形式

以表格的形式存储数据

任何一张表都有行和列:

行(row):被称为数据/记录。 ​ 列(column):被称为字段。

每一个字段都有:字段名、数据类型、约束等属性。 字段名可以理解是一个普通的名字,见名知意就行。 数据类型:字符串,数字,日期等。

什么是SQL语句?

SQL:结构化查询语言 程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL 语句,最终来完成数据库中数据的增删改查操作。

 

SQL语句分类

DQL:数据查询语言[select…… ]

DML:数据操作语言[增加insert ,修改update,删除delete] 操作的是表中的数据

DDL:数据定义语言[create、drop、alter] 操作的是表的结构

DCL:数据控制语言[管理数据库,比如:授权grant、撤销权限revoke.... ]

TCL:事务控制语言 [如:事务提交:commit; 事务回滚:rollback;]

数据库、数据库管理系统、SQL之间的关系

三者之间的关系? DBMS通过执行SQL来操作DB

先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS 对SQL语句进行执行,最终来完成数据库的数据管理。

常用命令

注意:这些命令不区分大小写都行。

注意:mysql是不见“;”不执行,“;”表示结束!

退出exit; 或者 quit;

查看mysql数据库的版本号: select version();

查看mysql中有哪些数据库? show databases; 注意:以分号结尾,分号是英文的分号。

mysql默认自带了4个数据库。

怎么选择使用某个数据库呢? mysql> use test; 表示使用一个名字叫做test的数据库。

查看当前使用的是哪个数据库? mysql> select database();

导入一下提前准备好的数据: bjpowernode.sql 是提前为练习准备的数据库表。 怎么将sql文件中的数据导入呢?(可以将文件拖入source空格 后) 要在使用某个数据库后才能使用该语句 mysql> source D:\course\03-MySQL\document\bjpowernode.sql

注意:路径中不要有中文!!!!

不看表中的数据,只看表的结构,有一个命令: desc 表名;

简单查询

查询一个字段?

select 字段名 from 表名;

查询两个字段,或者多个字段怎么办? 使用逗号隔开“,”

查询所有字段?

使用:select * from 表名;

别把把这种写法写到 Java 程序中,因为到时还要把 * 先转换成字段

缺点:①效率低 ②可读性差。

在实际开发中不建议,可以自己玩没问题。 你可以在DOS命令窗口中想快速的看一看全表数据可以采用这种方式。

给查询的列起别名?

使用 as 关键字,可以省略 select deptno,dname as deptname from dept;

假设起别名的时候,别名里面有空格,怎么办? mysql> select deptno,dname dept name from dept; DBMS看到这样的语句,进行SQL语句的编译,不符合语法,编译报错。 怎么解决? select deptno,dname 'dept name' from dept; //加单引号 select deptno,dname "dept name" from dept; //加双引号

注意:在所有的数据库当中,字符串统一使用单引号括起来, 单引号是标准,双引号在oracle数据库中用不了。但是在mysql 中可以使用。

再次强调:数据库中的字符串都是采用单引号括起来。这是标准的。 双引号不标准。

字段可以使用数学表达式

select ename,sal*12 from emp;

显示时字段名是 sal*12 这样时一般取个别名 select ename,sal*12 year_sal from emp;

条件查询

什么是条件查询?

查询出来符合条件的 ​ 语法格式: ​ select ​ 字段1,字段2,字段3.... ​ from ​ 表名 ​ where ​ 条件;

都有哪些条件?

= 等于 查询薪资等于800的员工姓名和编号? select empno,ename from emp where sal = 800;

<> 或 != 不等于 查询薪资不等于800的员工姓名和编号? select empno,ename from emp where sal != 800;

同理还有:<=,<,>=,>

between … and …. 两个值之间, 等同于 >= and <=

查询薪资在2450和3000之间的员工信息?包括2450和3000?

注意: 使用between and的时候,必须遵循左小右大。 between and是闭区间,包括两端的值。

is null 表示为 null(is not null 不为空)

查询哪些员工的津贴/补助为null? select empno,ename,sal,comm from emp where comm = null;(像这样用=是查不到的) Empty set (0.00 sec)

注意:在数据库当中null不能使用等号进行衡量。需要使用is null 因为数据库中的null代表什么也没有,它不是一个值,所以不能使用 等号衡量。

正确的:select empno,ename,sal,comm from emp where comm is null;

and 并且 查询工作岗位是MANAGER并且工资大于2500的员工信息?

select empno,ename,job,sal from emp where job = 'MANAGER' and sal > 2500;

or 或者

查询工作岗位是MANAGER或SALESMAN的员工?

select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';

and和or同时出现的话,有优先级问题吗?(开发中如不记得优先级,加小括号) 查询工资大于2500,并且部门编号为10或20部门的员工? select * from emp where sal > 2500 and deptno = 10 or deptno = 20; 分析以上语句的问题? and优先级比or高。 以上语句会先执行and,然后执行or。 以上这个语句表示什么含义? 找出工资大于2500并且部门编号为10的员工,或者20部门所有员工找出来。 正确做法:select * from emp where sal > 2500 and (deptno = 10 or deptno = 20);

in 包含,相当于多个 or (not in 不在这个范围中) 查询工作岗位是MANAGER和SALESMAN的员工? select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');

注意:in不是一个区间。in后面跟的是具体的值。

查询薪资是800和5000的员工信息? select ename,sal from emp where sal = 800 or sal = 5000; select ename,sal from emp where sal in(800, 5000); //这个不是表示800到5000都找出来。

not in 表示不在这几个值当中的数据。 select ename,sal from emp where sal not in(800, 5000, 3000);

not 可以取非,主要用在 is 或 in 中 is null is not null in not in

like 称为模糊查询,支持%或下划线匹配 %匹配任意多个字符 下划线:任意一个字符。 (%是一个特殊的符号,_ 也是一个特殊符号)

找出名字中含有O的? mysql> select ename from emp where ename like '%O%';

找出名字以T结尾的? select ename from emp where ename like '%T';

找出名字以K开始的? select ename from emp where ename like 'K%';

找出第二个字每是A的? select ename from emp where ename like '_A%';

找出第三个字母是R的? select ename from emp where ename like '__R%';

找出名字中有“_”的? select name from t_student where name like '%_%'; //这样不行。

正确: select name from t_student where name like '%\_%'; // \转义字符。

对查询结果排序

排序 order by( 默认是升序!!!)

查询所有员工薪资,排序? select ename,sal from emp order by sal;

怎么降序(后面加上desc)?

指定降序: select ename,sal from emp order by sal desc;

可以两个字段排序吗?或者说按照多个字段排序? 查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话, 再按照名字升序排列。 select ename,sal from emp order by sal desc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

了解内容:根据字段的位置也可以排序 select ename,sal from emp order by 2; // 2表示第二列。第二列是sal 按照查询结果的第2列sal排序。

了解一下,不建议在开发中这样写,因为不健壮。 因为列的顺序很容易发生改变,列顺序修改之后,2就废了

综合一点的案例: 找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。 select ename,sal from emp where sal between 1250 and 3000 order by sal desc;

以上语句的执行顺序必须掌握: 第一步:from 第二步:where 第三步:select 第四步:order by

相关文章:

  • 【操作系统】I/O 管理(一)—— I/O 管理概述
  • 使用对比学习处理大规模多模态单细胞数据
  • JAVA基础——day07
  • 【JavaWeb】一篇文章掌握Servlet
  • APP开发的方式
  • 【面试题】这道 JS 经典面试题不要背!今天帮你彻底搞懂它
  • 神经网络(深度学习)----MLPClassifier库的初尝试
  • MindSpore Serving模型部署,如何提升吞吐量,降低推理时延
  • TCP/IP协议专栏——静态路由互导 详解——网络入门和工程维护必看
  • 你知道嵌入式开发主要做什么吗?
  • 树莓派电脑虚拟机3设备连接
  • 【软件测试】男生vs女生,谁更加适合?没有你发现不了的bug......
  • csv文件的读取和写入
  • mongoose之bulkWrite
  • 常用的设计模式
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Android系统模拟器绘制实现概述
  • CentOS7 安装JDK
  • Java精华积累:初学者都应该搞懂的问题
  • js ES6 求数组的交集,并集,还有差集
  • JWT究竟是什么呢?
  • Making An Indicator With Pure CSS
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • python大佬养成计划----difflib模块
  • React系列之 Redux 架构模式
  • Sass Day-01
  • Shell编程
  • spring-boot List转Page
  • TypeScript实现数据结构(一)栈,队列,链表
  • 从零开始学习部署
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 回顾 Swift 多平台移植进度 #2
  • 利用jquery编写加法运算验证码
  • 盘点那些不知名却常用的 Git 操作
  • 前端js -- this指向总结。
  • 什么软件可以剪辑音乐?
  • 听说你叫Java(二)–Servlet请求
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 正则表达式-基础知识Review
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​secrets --- 生成管理密码的安全随机数​
  • ​批处理文件中的errorlevel用法
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #NOIP 2014#Day.2 T3 解方程
  • $GOPATH/go.mod exists but should not goland
  • $L^p$ 调和函数恒为零
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)Java算法:二分查找
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 系統分析和系統設計有什麼差別? (OO)