MySQL
本文关于MySQL的操作是在Windows环境下进行的。
1. 数据库概述
1.1 SQL概述
SQL,一般发音为sequel,SQL的全称Structured Query Language),SQL用来和数据库打交道,完成和数据库的通信,SQL是一套标准。但是每一个数据库都有自己的特性别的数据库没有,当使用这个数据库特性相关的功能,这时SQL语句可能就不是标准了.(90%以上的SQL都是通用的)。
1.2 数据库的概念
数据库,通常是一个或一组文件,保存了一些符合特定规格的数据,数据库对应的英语单词是DataBase,简称:DB,数据库软件称为数据库管理系统(DBMS),全称为DataBase Management System,如:Oracle、SQL Server、MySql、Sybase、informix、DB2、interbase、PostgreSql 。
1.3 MySQL概述
(1)MySQL最初是由“MySQL AB”公司开发的一套关系型数据库管理系统(RDBMS-Relational Database Mangerment System)。
(2)MySQL不仅是最流行的开源数据库,而且是业界成长最快的数据库,每天有超过7万次的下载量,其应用范围从大型企业到专有的嵌入应用系统。
MySQL AB是由两个瑞典人和一个芬兰人:David Axmark、Allan Larsson和Michael “Monty” Widenius在瑞典创办的。
(3)在2008年初,Sun Microsystems收购了MySQL AB公司。在2009年,Oracle收购了Sun公司,使MySQL并入Oracle的数据库产品线。
2. MySQL基本操作
2.1 通过cmd命令行登录
按下win + R后,输入cmd,进入命令行提示符界面,输入以下命令回车,可以登录MySQL。
mysql -uroot -p(password) # 该方法直接在-p后面跟密码,密码可以被看到。
如果密码不想被别人看到,可以输出以下命令后回车,再输入密码回车登录MySQL,这种方法类似于Linux系统命令行的操作。
2.2 sql、DB、DBMS分别是什么,他们之间的关系
(1)DB:
DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)。
(2)DBMS:
DataBase Management System(数据库管理系统,常见的有:MySQL Oracle DB2 Sybase SqlServer…)。
(3)SQL:
(3.1)结构化查询语言,是一门标准通用的语言。标准的sql适合于所有的数据库产品。
(3.2)SQL属于高级语言。只要能看懂英语单词的,写出来的sql语句,可以读懂什么意思。
(3.3)SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(sql语句的编译由DBMS完成。)
总结:DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。
DBMS -(执行)-> SQL -(操作)-> DB
2.3 表的概念
(1)概念:table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
(2)一个表包括行和列:
行:被称为数据/记录(data)
列:被称为字段(column)
学号(int) | 姓名(varchar ) | 年龄(int) |
---|---|---|
110 | 张三 | 20 |
120 | 李四 | 21 |
每一个字段应该包括的属性:字段名、数据类型、相关的约束。
2.4 SQL语句的分类
语句 | 解释 |
---|---|
DQL(数据查询语言) | 查询语句,凡是select语句都是DQL。 |
DML(数据操作语言) | insert delete update,对表当中的数据进行增删改。 |
DDL(数据定义语言) | create drop alter,对表结构的增删改。 |
TCL(事务控制语言) | commit提交事务,rollback回滚事务。(TCL中的T是Transaction) |
DCL(数据控制语言) | grant授权、revoke撤销权限等。 |
2.5 数据库初始化
第一步:登录mysql数据库管理系统
dos命令窗口:
mysql -uroot -p333
第二步:查看有哪些数据库
show databases; (这个不是SQL语句,属于MySQL的命令。)
注意该语句以分号结尾,不能丢。
第三步:创建属于我们自己的数据库
create database bjpowernode; (这个不是SQL语句,属于MySQL的命令。)
第四步:使用bjpowernode数据
use bjpowernode; (这个不是SQL语句,属于MySQL的命令。)
第五步:查看当前使用的数据库中有哪些表?
show tables; (这个不是SQL语句,属于MySQL的命令。)
第六步:初始化数据
mysql> source D:\course\05-MySQL\resources\bjpowernode.sql
注意:数据初始化完成之后,有三张表
2.6 SQL脚本
(1)概念 :当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称这样的文件为sql脚本。
(2)注意:直接使用source命令可以执行sql脚本。
sql脚本中的数据量太大的时候,无法打开,请使用source命令完成初始化。
记事本打开sql文件后的内容就是一些sql语句:
2.7 删除数据库
drop database bjpowernode;
2.8 查看表结构
操作:
desc table; # desc 加 “表名”
2.9 查看表中数据
操作:
select * from table; # 查看表中所有数据,这是sql语句
2.10 常用命令
(1)查看MySQL版本
mysql -version
或
mysql -V
(2)创建数据库
create database 数据库名称;
eg: create database bjpowernode;
(3)查看当前使用的是哪个数据库
select database();
(4)使用某个数据库
use 数据库名;
(5)查询数据库版本
select version();
(6)结束一条语句
\c
(7)退出数据库
(1)\q
(2)quit
(3)exit
(4)Ctrl + c
3. 查看演示数据的表结构
(1)查看和指定现有的数据库
show database;
(2)指定当前缺省数据库
use 数据库名;
(3)查看当前使用的数据库
select database();
(4)查看当前数据库中的表
show tables;
(5)查看其他数据库中的表
show tables from 数据库名;
(6)查看表的结构
desc 表名;
(7)查看表的创建语句
show create table 表名;
4. 简单查询语句(DQL)
(1)语法格式:
select 字段1,字段2,... from 表名;
(2)提示:
(2.1)任何一条sql语句以分号“;”结尾。
(2.2)sql语句不区分大小写。
4.1 查询若干个字段
4.2 查询所有字段
4.3 字段参与数学运算
查询员工的年薪
给查询结果重命名
4.4 查询结果以中文重命名
注意:
(1)标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用。
(2)可以采用as关键字重命名表字段,其实as也可以省略,如:
select empno "员工编号", ename "员工姓名", sal*12 "年薪" from emp;
(3)查询所有字段:
select * from emp; // 实际开发中不建议使用*,效率较低。
5.条件查询
(1)语法格式:
select
字段,字段...
from
表名
where
条件;
(2)执行顺序:
先from,然后where,最后select。
(3)支持的运算符:
运算符 | 说明 |
---|---|
= | 等于 |
<>或!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between … and …. | 两个值之间,等同于 >= and <= |
is null | 为null(is not null 不为空) |
and | 并且 |
or | 或者 |
in | 包含,相当于多个or(not in不在这个范围中) |
not | not可以取非,主要用在is 或in中 |
like | like称为模糊查询,支持%或下划线匹配%匹配任意个字符下划线,一个下划线只匹配一个字符 |
(4)实例:
(1)查询工资等于5000的员工姓名?
(2)查询SMITH的工资?
(3)找出工资高于3000的员工?
select ename,sal from emp where sal > 3000;
select ename,sal from emp where sal >= 3000;
select ename,sal from emp where sal < 3000;
select ename,sal from emp where sal <= 3000;
(4)找出工资不等于3000的?
select ename,sal from emp where sal <> 3000;
select ename,sal from emp where sal != 3000;
(5)找出工资在1100和3000之间的员工,包括1100和3000?
select ename,sal from emp where sal >= 1100 and sal <= 3000;
select ename,sal from emp where sal between 1100 and 3000;
# between...and...是闭区间 [1100 ~ 3000]
select ename,sal from emp where sal between 3000 and 1100;
# 查询不到任何数据
between and在使用的时候必须左小右大。
between and除了可以使用在数字方面之外,还可以使用在字符串方面。
select ename from emp where ename between 'A' and 'C';
select ename from emp where ename between 'A' and 'D';
# 左闭右开。
(6)null的使用
(6.1)找出哪些人津贴为NULL?
在数据库当中NULL不是一个值,代表什么也没有,为空。
空不是一个值,不能用等号衡量。
必须使用 is null或者is not null
select ename,sal,comm from emp where comm is null;
(6.2)找出哪些人津贴不为NULL?
select ename,sal,comm from emp where comm is not null;
(6.3)找出哪些人没有津贴?
select ename,sal,comm from emp where comm is null or comm = 0;
(7)and和or的用法
(7.1)找出工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
(7.2)and和or联合起来用:找出薪资大于1000的并且部门编号是20或30部门的员工。
select ename,sal,deptno from emp where sal > 1000 and deptno = 20 or deptno = 30; // 错误的
select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); // 正确的。
注意:and的优先级高于or,当运算符的优先级不确定的时候加小括号。
(8)in的用法
(8.1)in等同于or:找出工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';
select ename,job from emp where job in('SALESMAN', 'MANAGER');
select ename,job from emp where sal in(800, 5000); // in后面的值不是区间,是具体的值。
(8.2)not in: 不在这几个值当中。
select ename,job from emp where sal not in(800, 5000);
(9)模糊查询like
在模糊查询当中,必须掌握两个特殊的符号,一个是%,
一个是_,%代表任意多个字符,_代表任意1个字符。
(9.1)找出名字当中含有O的?
select ename from emp where ename like '%O%';
(9.2)找出名字中第二个字母是A的?
select ename from emp where ename like '_A%';
(9.3)找出名字中有下划线的?
select name from t_user where name like '%\_%';
(9.4)找出名字中最后一个字母是T的?
select ename from emp where ename like '%T';