开始时间:2021-03-02
数据库作用
没有用数据库
通过序列化和反序列化实现文件和对象的读写
有了数据库就上数据库了
安装MySQL
直接看视频比较好
测试MySQL
装完之后测试MySQL
进入命令行
键入mysql
再加-uroot -p333
root是用户名 333是密码
改密码
SQL/DB/DBMS
DB:DataBase(数据库,在硬盘上以文件形式存在)
DBMS:DataBase Management System(数据库管理系统:MySQL Oracle…)
SQL:结构化查询语言。标准的SQL适用于所有的数据库产品
DBMS负责执行SQL语句,通过执行SQL语句来操作DB中的数据
表(Table)
表是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
行:数据/记录(data)
列:字段(column)
每一个字段的属性:
字段名、数据类型、相关的约束
SQL语句分类
增删改查
- DQL-Data Query Language(数据查询语言):查询语句,凡是select语句都是DQL。
- DML-Data Manipulation Language(数据操作语言): insert delete update,对表当中的数据进行增删改。
- DDL-Data Definition Language(数据定义语言): create drop alter,对表结构的增删改。
- TCL-Tool Command Language(事务控制语言): commit提交事务,rollback回滚事务。
- DCL-Dialog Control Language(数据控制语言) : grant授权、revoke撤销权限等。
导入初始化数据
第一步登录:
C:\Users\Administrator>mysql -uroot -p333
第二步查看有哪些数据库
记得加分号
mysql> show databases;
第三步:创建自己的数据库
mysql> create database MyDB;
第四步:使用MyDB的数据
mysql> use MyDB;
第五步:初始化数据
mysql> source F:\编程学习\MySQL_Course\bjpowernode\bjpowernode.sql;
这里是写 source 再把sql文件直接拖进来的
添加完后新表有了三个数据
source命令->批量执行sql语句
第六步:删库跑路
mysql> drop database jindaohei;
查看表的结构
mysql> desc dept;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| DEPTNO | int(2) | NO | PRI | NULL | |
| DNAME | varchar(14) | YES | | NULL | |
| LOC | varchar(13) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
常用的一些语句
查询当前使用的数据库
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
查看mysql版本号
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.58 |
+-----------+
结束一条语句
\c
退出mysql
exit
查看创建表的语句
mysql> show create table emp;
简单的查询语句
语法格式
select 字段名1,字段名2,字段名3…from 表名;
例如
mysql> desc emp;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| EMPNO | int(4) | NO | PRI | NULL | |
| ENAME | varchar(10) | YES | | NULL | |
| JOB | varchar(9) | YES | | NULL | |
| MGR | int(4) | YES | | NULL | |
| HIREDATE | date | YES | | NULL | |
| SAL | double(7,2) | YES | | NULL | |
| COMM | double(7,2) | YES | | NULL | |
| DEPTNO | int(2) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
先找到table中的emp
我们要查姓名和编号
那就查
mysql> select ENAME,EMPNO from emp;
+--------+-------+
| ENAME | EMPNO |
+--------+-------+
| SMITH | 7369 |
| ALLEN | 7499 |
| WARD | 7521 |
| JONES | 7566 |
| MARTIN | 7654 |
| BLAKE | 7698 |
| CLARK | 7782 |
| SCOTT | 7788 |
| KING | 7839 |
| TURNER | 7844 |
| ADAMS | 7876 |
| JAMES | 7900 |
| FORD | 7902 |
| MILLER | 7934 |
+--------+-------+
注意:sql语句不区分大小写
包括语句本身,包括字段名,都是大小写不敏感的
可以直接在查询中进行简单运算
mysql> select sal*12 from emp;
+----------+
| sal*12 |
+----------+
| 9600.00 |
| 19200.00 |
| 15000.00 |
| 35700.00 |
| 15000.00 |
| 34200.00 |
| 29400.00 |
| 36000.00 |
| 60000.00 |
| 18000.00 |
| 13200.00 |
| 11400.00 |
| 36000.00 |
| 15600.00 |
+----------+
也可以给新查询的数据用as(as可以省略)重命名,改成中文需要加单引号
mysql> select ename as '姓名',sal*12 as yearsal from emp;
+--------+----------+
| 姓名 | yearsal |
+--------+----------+
| SMITH | 9600.00 |
| ALLEN | 19200.00 |
| WARD | 15000.00 |
| JONES | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE | 34200.00 |
| CLARK | 29400.00 |
| SCOTT | 36000.00 |
| KING | 60000.00 |
| TURNER | 18000.00 |
| ADAMS | 13200.00 |
| JAMES | 11400.00 |
| FORD | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
查询所有字段
mysql> select * from emp;//实际不建议使用*号查询
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
条件查询
查询工资大于2500的员工姓名
mysql> select ENAME,SAL from emp where sal>2500;
+-------+---------+
| ENAME | SAL |
+-------+---------+
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| FORD | 3000.00 |
+-------+---------+
查询blake的工资
mysql> select ename,sal from emp where ename='blake';
+-------+---------+
| ename | sal |
+-------+---------+
| BLAKE | 2850.00 |
+-------+---------+
查询不等于的值
mysql> select ename,sal from emp where sal<>3000;//<> 和 != 都可以
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| KING | 5000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| MILLER | 1300.00 |
+--------+---------+
between…and…
找出工资介于1100到3000之间的
mysql> select ename,sal from emp where sal between 1100 and 3000;//这里取的是闭区间
//mysql> select ename,sal from emp where sal >= 1100 and <=3000;//两者等价
+--------+---------+
| ename | sal |
+--------+---------+
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
还可以写在字符之间
mysql> select ename,sal from emp where ename between 'a' and 'c';//比较首字母,这里是左闭右开
+-------+---------+
| ename | sal |
+-------+---------+
| ALLEN | 1600.00 |
| BLAKE | 2850.00 |
| ADAMS | 1100.00 |
+-------+---------+
null
津贴为空的情况
不用等号,用 is 或者 is not
null和0是不一样的
mysql> select ename,sal from emp where comm is null;
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
and和or
找出工资大于3000 且 部门编号是20或者30的
错误示范:
mysql> select ename,job ,mgr,deptno,sal from emp where sal>3000 and deptno=20 or deptno=30;
+--------+----------+------+--------+---------+
| ename | job | mgr | deptno | sal |
+--------+----------+------+--------+---------+
| ALLEN | SALESMAN | 7698 | 30 | 1600.00 |
| WARD | SALESMAN | 7698 | 30 | 1250.00 |
| MARTIN | SALESMAN | 7698 | 30 | 1250.00 |
| BLAKE | MANAGER | 7839 | 30 | 2850.00 |
| TURNER | SALESMAN | 7698 | 30 | 1500.00 |
| JAMES | CLERK | 7698 | 30 | 950.00 |
+--------+----------+------+--------+---------+
6 rows in set (0.00 sec)
正确示范:
mysql> select ename,job ,mgr,deptno,sal from emp where sal>3000 and( deptno=20 or deptno=30);
Empty set (0.00 sec)
注意优先级
条件查询in
和or的用法类似
mysql> select ename,job ,mgr,deptno,sal from emp where sal>1000 and deptno in (20,30);
//这里的in不是范围的开闭区间,仅仅是满足 deptno=20 或者 deptno=30
+--------+----------+------+--------+---------+
| ename | job | mgr | deptno | sal |
+--------+----------+------+--------+---------+
| ALLEN | SALESMAN | 7698 | 30 | 1600.00 |
| WARD | SALESMAN | 7698 | 30 | 1250.00 |
| JONES | MANAGER | 7839 | 20 | 2975.00 |
| MARTIN | SALESMAN | 7698 | 30 | 1250.00 |
| BLAKE | MANAGER | 7839 | 30 | 2850.00 |
| SCOTT | ANALYST | 7566 | 20 | 3000.00 |
| TURNER | SALESMAN | 7698 | 30 | 1500.00 |
| ADAMS | CLERK | 7788 | 20 | 1100.00 |
| FORD | ANALYST | 7566 | 20 | 3000.00 |
+--------+----------+------+--------+---------+
模糊查询like
%代表任意多个字符
_代表任意一个字符
说到这个我就觉得这个有些像正则表达式了
跳转一下看看正则表达式
找出第二个字母是A的
mysql> select ename from emp where ename like '_A%';
+--------+
| ename |
+--------+
| WARD |
| MARTIN |
| JAMES |
+--------+
mysql 的转义字符
反斜线\就行
临时表
每一个查询命令在执行时,实际上操作都是上一个查询命令生成的临时表
在当前查询命令执行完毕后,MySql服务器自动将上一个查询命令生成的临时表从内存中销毁。导致用户最终看到的临时表只能查询语句中,最后一个查询生成的临时表
七个查询命令与临时表之间关系:
1.七个查询命令中,只有FROM命令不需要操作临时表,FROM负责将硬盘上表文件加载到内存中生成第一个临时表,剩下的六个查询命令操作的都是上一个查询命令生成的临时表
2.七个查询命令中,只有GROUP BY命令在执行完毕后,才有机会在内存中生成多个临时表。其他五个查询命令在执行完毕后,只能在内存中生成一个临时表I
3.七个查询命令中,只有HAVING命令在执行完毕后,不会生成新临时表。负责将GROUP
BY生成的临时表中不满足条件的临时表从内存中进行删除处理
临时表是按语句执行的顺序,生成一个,再细化生成,再细化,最终到确定的结果
结束时间:2021-03-03