Mysql知识点
一、数据库的描述
数据库:是指长期保存在计算机中,按照一定规则组织起来的,可以被各种用户或应用共享的数据集合,简而言之,数据库
就是存储数据的容器
数据库管理系统:是指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库的,对数据库进行统一管理和控制的
,以保证数据库的安全性和完整性,用户通过数据库管理系统访问数据库中的数据。简单来说说,数据库
管理系统就是用来操作数据库的。
二、SQL的概述
1、SQL:就是以一种数据结构化查询语言
2、数据库记录跟java对象的关系
数据库中的一行记录相当于java中的一个对象,
数据库中的一张表相当于java中的一个类
三、SQL的分类
1、DDL:数据定义语言,关键字为:create、alter、drop,其作用是对数据库、表、列的创建、删除、修改
2、DML: 数据库操作语言,关键字为:insert、update、delete,其作用是对数据库中表的插入、更新、删除
3、DQL:数据库查询语言,关键字为:select,用于对数据库中记录的查询
4、DCL:数据库控制语言,用于定义访问安全权限和安全级别的
四、DDL 操作数据库、表、列
关键字:CREATE、ALTER、DROP
1、操作数据库
1.1 创建数据库
create database mydb2;
1.1.1 创建数据库并修改它的字符集
create database mydb2 character set utf8;
1.2 查询所有的数据库
show databases;
1.3 查询数据库的创建信息
show create database mydb2;
1.4 查询当前使用数据库
select database();
1.5 修改数据库的字符集
alter database mydb2 character set utf8;
1.6 切换数据库
use mydb1;
1.7删除数据库
drop database mydb2;
2、操作表
2.1 创建数据库: create table 表名(字段名1 数据类型,字段名2 数据类型,…);
create table stu(id int,name varchar(20));
数据表以;结尾。
2.2 数据类型
int:整型
double:浮点类型,double(5,2)表示最多五位数,其中有两位是小数;
char:固定长度类型
varchar:可变字符串类型,就是会根据输入的的长度确定,不会有空格
text:字符串类型,用于存储大文本
blob:字节类型
date:日期类型,格式为:yyyy-MM-dd
time:时间类型,格式为:HH:mm:ss
datestamp:时间戳类型,yyyy-MM-dd hh:MM:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:MM:ss
2.3 简单操作
2.3.1 查询数据库中所有的表
show tables;
2.3.2 查询数据表的字段名信息
desc stu;
2.3.3 给表中添加字段
alter table stu add sex varchar(3);
2.3.4 给指定字段修改数据类型
alter table stu modify sex char(3);
2.3.5 给指定的表修改名称
rename table stu to student;
2.3.6 删除某一个字段
alter table student drop sex;
2.3.7 给某一个字段重新命名
alter table student change name sname char(10);
(重命名也可以更改类型)
2.3.8 查看创建表的细节
show create table student;
2.3.9 删除表
drop table student;
五、DML对数据表的插入、更新、删除
关键字为:insert、update、delete
在mysql中日期类型和字符串类型都要用单引号扩起来
5.1 插入操作(insert)
语法:INSERT INTO 表名 (列名1,列名2…) values(列值1,列值2,…);
(1)列名与列值的类型、个数、顺序都要一一对应
(2)可以把列名当做java中的形参,把列值当做实参;
(3)值不要超过定义长度
(4)如果是空值,直接使用null
(5) 如果插入是日期或者是字符串,都要单引号扩起来
5.1.1 在表中插入值
如:(1)在student表中添加id为1,姓名为xiaoming,性别为male;
insert into student(id,name,sex) values(1,‘xiaoming’,‘male’);
要插入全部字段值,可以省略字段名
(2)在student表中添加id为1,姓名为xiaoming,
insert into student values(1,‘xiaoming’,null)
(3)批量插入数值
insert into student(id,name,sex) values(1,‘xiaoming’,‘male’),(2,‘xiaoming’,‘male’);
5.2 更新操作(update)
基本格式:update 表名 set 列名=列值
5.2.1将员工的工资设置为5000
update emp set salary=5000;
5.2.2 将姓名为”zhangsan“的工资设为7000
update emp set salary=7000 where name=‘zhangsan’
5.2.3 将每一员工的工资在原来的基础上加200
update emp set salary=salary+200;
5.2.4 将姓名为lisi的员工工资设置为6000,且年龄为33;
update emp set salary=6000,age=33 where name=‘lisi’
5.3 删除操作(detele)
基本格式为 DELETE FROM 表名 [where 列名=列值]
5.3.1 删除名字为lisi的记录
delete from emp where name=‘lisi’;
5.3.2 删除表的所有记录
delete from emp;(删除整个表的记录,但是表还存在)
六、DQL(查询表中的记录,关键字:select)
DQL语句不会对数据进行改变,而是把结果返还给客户端,查询返回的一张虚拟的表
基本格式: select 列名 from 表名 [where,group by,having,order by]
6.1 简单查询
6.1.1查询表中的所有记录
例:select * from emp;
6.1.2 查询某一列的记录
select ename from emp;
6.2 条件查询
条件查询就是查询的时候给where字句,在where语句中可以使用一下的运算符以及关键字
(1)>,<,=,<=,>=,<>,!=
(2) BETWEEN … AND…
(3)IN(SET)
(4) IS NULL、 IS NOT NULL
(5)AND
(6)OR
(7)NOT
6.2.1 查询工资在3000~7000的记录
(1)select * from emp where sal between 3000 and 7000;
(2)select * from emp where sal>=3000 and sal<=7000;
6.2.2 查询编号为s0001,s002,s003的记录
select * from stu where sno in(s0001,s002,s003);
6.2.3查询编号不为s0001,s002,s003的记录
select * from stu where sno not in(s0001,s002,s003);
6.2.4 查询奖金为空的记录
select * from emp where comm is null;
6.2.5 查询奖金不为空的记录
select * from emp where comm is not null;
6.3 模糊查询(like)
模糊查询中的通配符
_:任意一个字符
%:任意0~n个字符
6.3.1 查询姓名有5个字母构成的学生记录
select * from stu where name like '_____';
6.3.2 查询姓名第5个字母以i组成的学生记录
select * from stu where name like '____i';
6.3.3 查询姓名以”z“开头的学生姓名和年龄
select name, age from stu where name like 'z%';
6.3.4 查询姓名中第2个字母为“i”的学生姓名和性别。
select name,sex from stu where name like '_i%';
6.3.5 查询姓名中包含"a"字母的学生记录。
select * from stu where name like '%a%';
6.4 字段控制查询
关键字:distinct
解释:去除重复记录(两行或者两行以上记录中系列的上数据都相同),就是将出现重复的记录,进行删除
6.4.1 将emp表中的重复记录进行删除
select distinct from emp;
6.5 ifnull
当工资列salary和奖金列comm数据类型都一样的时候,就可以进行相加。如果奖金列中有为空的数据null,
这个时候两列相加就会出现错误,所以这个时候就用到IFNULL。
6.5.1
select * salary+ifnull(comm,0) as ‘总金额’ from emp;
6.6 排序 (order by)
基本格式:ORDER BY 列名 asc(默认) desc
6.6.1 查询所有学生记录,并按照年龄进行升序排序
select * from stu order by age asc; (asc是默认的,可以省略)
6.6.2 查询所有学生记录,并按照年龄进行降序排序
select * from stu order by age desc;
6.6.3 查询所有雇员,按照月薪的降序排序,如果月薪相同时,按照编号进行排序。
select * from emp order by sal desc,empno asc;
6.7 聚合函数
关键字:sum, avg,max,min,count
1.聚合函数使用来做纵向运算的函数:
count():统计指定列不为null的记录行数。
max():计算指定列的最大值,如果指定列是字符串类型,那么就会使用字符串排序运算。
min():计算指定列的最小值,如果指定列是字符串类型,那么就会使用字符串排序运算。
sum():计算指定列的数值和,如果指定列的类型不是数值类型,那么计算结果为0;
avg():计算指定列的平均值,如果指定列的类型不是数值类型,那么计算结果为0;
2.count:当需要纵向统计的时候可以使用count()。
6.7.1 查询emp中的记录数
select count() from emp;
6.7.2 查询emp表中月薪大于2500的人数
select count() from emp where sal>2500;
3.SUM和AVG
sum是用于求取纵向列的总和,avg是用于求取平均值的
6.7.3 查询所有员工的月薪之和
select sum(sal) from emp ;
6.7.4 统计所有员工的平均工资
select avg(sal) from emp;
4. max和min
查询最大值和查询最小值
6.7.5 查询最高工资和最低工资
select max(sal), min(sal) from emp;
5. 分组查询
关键字:group by
解释:当要进行分组时,需要使用group by
注意事项:凡是和聚合函数同时出现的列名,一定要写在group by之后
6.7.6 查询每个部门的部门编号和每个部门的工资和
select deptno,sum(sal) from emp group by deptno;
6.7.7 查询每个部门的部门编号以及每个部门工资大于1500的人数
select deptno,count(*) from emp where sal>1500 group by deptno;
6.having
查询工资总和大于9000的部门编号以及工资和。
select deptno,sum(sal) from emp group by deptno having sun(sal)>9000;
注意:having与where的区别:
1.having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
2.having后面可以使用聚合函数
where后面不可以使用聚合函数
where是对分组前记录的条件,如何某行记录没有满足where子句的条件,那么这行记录将不会参加分组。而
having是对分组后数据的约束。
查询中各个关键字的先后顺序:
select–>from–>where–>group by–>having–>order by
6. limit方言
limit是用来限定查询结果的起始行,以及总行数
6.7.8 查询5行记录,起始行从0开
select * from limit 0,5;(从0开始,即就是从第一条记录开始。读五条记录)
分页查询:
如果一页记录为10条,希望查看第三页记录应该怎么查看?
第一页记录起始行为0,一共查询为10行。
第二页记录起始行为0+10,一共查询为10行。
第三页记录起始行为0+10+10,一共查询为10行。
查询总结:
查询语句的书写顺序:select-from-where-group by-having-order by-limit;
查询语句的执行顺序:from-where-group by-having-select-order by-limit;
7 DCL 操作数据库用户
7.1创建用户
指定ip地址创建用户 create user 用户名@IP地址 identified by ‘密码’;
用户可以在任意的IP地址上登录 create user 用户名@’%’ identified by ‘密码’;
7.2用户授权
grant create,alter,drop,delete,insert,update,select on 数据库名.* to 用户名@IP地址
select * from emp limit 2,10;
grant ALL on 数据库名.* to 用户名@IP地址
7.3撤销用户权限
revoke create on 数据库名.* from 用户名@IP地址
7.4查看权限
show grants for 用户名@IP地址
7.5删除用户
drop user 用户名@ip地址
7.6查看所有用户
select user from mysql.user;
查看当前用户 select user();
7.7给用户修改密码
set password for ‘用户名’ @ ‘IP’ = password(‘密码’)
推荐阅读
-
oracle知识点
-
ofbiz 知识点
-
MySQL MHA /usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln301] install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted
-
Mysql知识点
-
请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间【转】
-
OpemMP知识点
-
PHP的学习--连接MySQL的两种方式,mysql两种方式_PHP教程
-
Linux环境下安装配置Mysql
-
基于Php mysql存储过程的详解_MySQL
-
MySQL HA 的選擇…