Mysql入门
- 什么是数据库?什么是数据库操作系统?什么是SQL?他们之间的关系是什么?
数据库:
英文单词DataBase, 简称DB, 按照一定的格式存储数据的一些文件的组合.
顾名思义: 存储数据的仓库,实际上就是一堆文件.这些文件中存储了具有特定格式的数据
数据库管理系统:
DataBaseManagement,简称DBMS。
数据库管理系统是专门用来管理数据库中的数据,数据库管理系统可以对数据库当中的数据进行增删改查
常见的数据库操作系统有: Mysql、Oracle、Ms SqlServer、DB2、sybase等。。。
SQL: 结构化查询语言
程序员需要学习SQL语句,通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作
SQL是一套标准,程序员煮药学习的就是SQL语句,这个SQL在Mysql中可以使用的同时也可在Oracle中也可以使用,在DB2中也可以使用
三者之间的关系?
DBMS—执行—>SQL—操作àDB
安装数据库操作系统,然后学习sql,通过编写Sql语句对数据库中的数据进行增删改查的处理
- 启动停止Mysql
启动: net stop 服务名
停止: net start 服务名
其他启停服务同理
- Mysql常用命令:
Exit =>>>> 退出
mysql –u用户名 –p密码 显示密码形式
mysql –u用户名 –p 回车 隐藏密码形式
show databases;(注意以分号结尾,mysql默认自带4个数据库) 查看所有数据库
use 数据库名 表示进入使用当前数据库
create database 表名 创建数据库
show tables 显示数据库所以表名
select * from 表名 查询表名所有数据
desc 表名 只看表结构
select version(); 查看数据库版本
select database(); 查看当前使用哪个数据库
不慎回车 可\C 终止执行sql语句
Select 字段名 from 表名 单独查询一个字段数据
Select 字段名,字段名,字段名 from 表名 查询多个字段数据
- 数据库当中最基础的单元是表:table
任何一张表都有行和列
行(row):被称为数据/记录
列(column):被称为字段
每一个字段都有字段名、数据类型、约束等属性。
数据类型:字符串、数字、日期。。。。。
约束其中一个:唯一性、限制数字、格式、字符串
- 关于SQL语句的分类
SQL语句有很多,最好进行分门别类,这样更容易记忆
分为
DQL:
数据查询语句(凡是带有select关键字的都是查询语句)
Select …
DML:
数据操作语言(凡是对表当中的数据进行增删改查的都是DML)
Insert delete update
Insert 增
Delete 删
Update 改
DDL:
数据定义语言
凡是带有create、drop/alter的都是DDL
DDL主要操作的是表的结构。不是表中的数据
Create 新建
Drop 删除
Alter 修改
这个增删改和DML不同,这个主要是针对表结构进行操作
TCL:
事务控制语言
包括:
事务提交: commit
事务回滚: rollback
DCL:
数据控制语言
例如: 授权grant、撤销权限revoke
- 数据库命令优缺点
Select * from 表名 查询表数据效率低下 因*需转换为字段名称
- 给查询的列起别名:
Select 字段名 as 别名 from 表名
利用as关键字起别名
As关键字也可省略 select 字段名 别名 from 表名 同上
注意:
Select语句是只起暂时作用无法用于修改
- Select 字段名*12(可以使用数学表达式) from 表名
- Select 条件查询:
Select
字段1,字段2
From
表名
Where
条件
<> 不等于
!= 不等于
两个值之间
Select
字段1,字段2
From
表名
Where
条件 and 条件
或
字段(需要比对的字段)between 比对值 and 比对值
数据库当中不能用=去查询null 要用is null不等于是is not null
And比Or优先级更高 想要有限执行or只需加()先让()里的条件执行即可
In(‘字段名’, ‘字段名’)如果存在即返回(不是区间值,是括号内指定值)
Not in(‘字段名’, ‘字段名’)即in取反
Like 模糊查询 %需要模糊查询的字符%
Like ‘%a%’ 找出字符中带有a的数据
Like ‘k%’找出字符k开头的数据
Like ‘_A%’ 找出第二个字母为A的数据
Like ‘__R%’ 找出第三个字母为R的数据
注意: 特殊字符需要转义 \如(‘%\_%’)模糊查询带有_字符需反斜杠转义
Select 字段 from 表 order by 字段(按照这个字段进行排序) 默认是升序
Select 字段 from 表 order by 字段 desc 降序
Select 字段 from 表 order by 字段 asc 升序
语句执行顺序
Select
…
From
…
Where
…
Oder by
…
- Mysql函数处理公式:
Ifnull 可以将null转换为一个具体值
Case 字段 when 需匹配的条件 then 做什么事 when 需匹配的条件 then 做什么事 else 其他情况 end(结束)
例子如下:
Select
ename, job, sal, (case job when ‘MANAGER’then sal*1.1 when ‘SALESMAN’ then sal*1.5 else end) as ‘newsal’ from emp;
组合函数:(只有分组之后才能使用)
max(字段) 最大值
min(字段) 最小值
avg(字段) 平均值
sum(字段) 总和
count(字段) 总计数
group by 条件 条件求和
select
。。。
From
。。。
Where
。。。
Group by
。。。
Order by
。。。
Sql语句的执行顺序:
From =>> where =>> group by =>> having =>> select =>> order by =>> limit
作业:
找出每个部门最高薪资, 要求显示最高薪资大于3000
(having可在分组后重新进行筛选)
Select deptno, max(sal), ename from emp group by deptno having sal > 3000
Select deptno, max(sal), ename from emp where sal > 3000 group by deptno
Select distinct job from emp;
Distinct 字段 去重
- 连接查询
根据表连接的方式分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
From子句中的子查询
注意:from后面的子查询,可以将子查询的查询结果当做一张临时表(技巧)
子查询的数据要匹配的上,不然会报错
- Union合并查询结果集
Select ename, job from emp where job = ‘MANAGER’
Union
Select ename, job from emp where job = ‘SAKESNAN’
注意:union的效率高,对于表连接来说,每次连接一次新表,则匹配的次数满足笛卡尔积,成倍翻的遍历条件
但union可以减少匹配次数,还可以完成两个数据集合拼接
- Limit是将查询结果集的一部分取出来,通常使用在分页查询当中
完整用法(起始下标为0)
Limit startIndex,length
StartIndex是起始下标, length是取多少条
缺省用法
Limit 5 取前5条数据
Mysql当中在limit在oder by 之后执行
Select ename, sal from emp oderby sal desc limit 2,3;
动态数据limit (pageNo -1) * pageSize, pageSize
- 删除表
Drop table 表名
Drop table if exists 表名; 如果存在就删除
- 建表
无指定默认值
create table t_student(
no int,
name varchar(32),
sex char(1),
age int(3),
email varchar(255)
)
指定默认值
Create table t_student(no int, name varchar(32), sex char(1) default ‘m’, age int(3), email varchar(255))
- insert语句
insert into 表名(字段名1, 字段名2,字段名3。。。。) values(值1, 值2, 值3.。。。);
insert into t_student(no, name, sex, age, email) values(1, “zhangsan”, “m”,20, “lisi@11.com”);
注意: 如果省略字段,values需按顺序写上插入值
Inset into t_student values(值1, 值2.。。。)
将字符串类型转换为日期类型
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
Str_to_date(‘字符串日期’, ‘日期格式’)
Insert into u_student(id, name, birth) values(1, ‘张三’, str_to_date(’01-09-1995’, ‘%d-%m-%Y’))
如何格式为%Y-%m-%d 则不需要使用str_to_date进行转换
Date_format函数使用:
Date_format(日期类型数据,‘日期格式’)
获取当前系统时间now()函数是datetime的类型
- 修改update()DML类型语句
语法格式:
Update 表名set 字段名=‘某值’, 字段名1=‘某值’where 条件
注意:没有条件限制会把表中所有数据全部更新
- Delete删除数据(dml)
语法格式:
Delete from 表名 where 条件
注意:没有调教限制会把表中所有数据删除,效率低下、可恢复
Delete from t_user where id = 1
- Truncate table 表名删除数据
优点:删除干净,彻底删除不占资源,效率高
缺点:不可回滚
- 约束包括有哪些
非空约束: not null
没有表级约束
Create table t_student(id int, id varchar(32)not null)
唯一性约束: unique
联合唯一性,需完全相同才不允许插入条件是(id,name)这两个值完全相同
约束如果没有添加在列后面,这种约束称为表级约束
Create table t_vip (id int, name varchar(32) unique(id, name));
Insert into t_vip(id, name) values(1, ‘zs’)
主键约束: primary key (简称PK)
外健约束: foreign key (简称fk)
检查约束: check (mysql不支持,oracle支持)
- 存储引擎
存储引擎是Mysql中特有的一个术语, 其他数据库没有