前言
mySQL (关系型数据库管理系统)
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
提示:以下是本篇文章正文内容,下面案例可供参考
MySQL服务启动
1.手动。
2.cmd–>services.msc打开服务的窗口
3.使用管理员打开cmd
net start mysql
:启动mysql的服务
net stop mysql
:关闭mysql的服务
MySQL登录
1.mysql-uroot-p密码
2.mysql-hip-uroot-p连接目标的密码
3.mysql--host=ip--user=root--password=连接目标的密码
MySQL退出
1.exit
2. quit
MySQL目录结构
1.MySQL安装目录:basedir=“D:/develop/MySQL/”
配置文件my.ini
2.MySQL数据目录:datadir=“C:/ProgramData/MySQL/MySQL Server
5.5/Data/”
几个概念
数据库:文件夹
表:文件
数据:数据
SQL
1.什么是SQL?
structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样
的地方,称为“方言”
2.SQL通用语法
1.SQL语句可以单行或多行书写,以分号结尾。
2.可使用空格和缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4.3种注释
单行注释:-- 注释内容或 # 注释内容(mysql特有)(注意–后面有一个空格)
多行注释:/*注释*/
3.SQL分类
1)DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter
等
2)DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert,delete,update
等
3)DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select,where
等
4)DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE
等
DDL:操作数据库、表
1、操作数据库:CRUD
C(Create):创建
创建数据库
Create database 数据库名称:
创建数据库,判断不存在,在创建
Create database if not exists 数据库名称;
创建数据库,并指定字符集
Create database 数据库名称 character set 字符集名;
创建数据,判断是否存在,并指定字符集为GBK
Create database if not exists 数据库名 character set gbk;
R(Retrieve):查询
查询所有数据库的名称
Show databases;
查看某个数据库的字符集:查询某个数据库的创建空间
show create database 数据库名称;
U(Update):修改
修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
D(Delete):删除
删除数据库
drop database 数据库名称;
判断数据库存在,存在在删除
drop database if exists 数据库名称;
使用数据库
查询当前正在使用的数据库名称
select database();
使用数据库
use 数据库名称;
操作表
C(Create):创建
语法
create table 表名
(
列名1 数据类型1,
列名2 数据类型2,
……
列名n 数据类型n
);
注意:最后一列,不需要加逗号(,)
数据库类型
数据库类型:
1.int
:整数类型
age int,
2.double
:小数类型
score double(5,2)
3.date
:日期,只包含年月日,yyyy-MM-dd
4.datetime
:日期,包含年月日时分秒yyyy-MM-dd HH:mm:ss
5.timestamp
:时间戳类型包含年月日时分秒yyyy-MM-dd HH:mm:SS
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6.varchar
:字符串
name varchar(20)
:姓名最大20个字符
创建表
Create table student
(
Id int,
Name varchar(32),
Age int,
Score double(4,1),
Birthday date,
Insert_time timestamp
);
R(Retrieve):查询
查询某个数据库中所有的表名称;
Show tables;
查询表结构
desc 表名;
复制表:
create table 表名 like 被复制的表名;
U(Update):修改
修改表名
alter table 表名 rename to 新的表名;
修改表的字符集
alter table 表名 character set 新的字符集名称;
添加一列
alter table 表名 add 列名数据类型;
修改列名称类型
alter table 表名 change 列名新列名新数据类型;
alter table 表名 modify 列名新数据类型;
删除列
alter table 表名 drop 列名;
D(Delete):删除
drop table 表名;
drop table if exists 表名;
DML:增删改表中数据
添加数据:
语法:
insert into 表名(列名1,列名2,….列名n) values (值1,值2,….值n);
注意:
列名和值一一对应。
如果表名后,不定义列名,则默认给所有列添加值
Insert into 表名 values(值1,值2,……值n);
除了数字类型其他类型都要用引号(单双都可以)引起来
删除数据:
语法:
Delete from 表名 [where 条件]
注意
如果不加条件,则删除表中所有记录。
如果要删除所有记录
Delete from 表名;--不推荐使用,有多少条记录就会执行多少次删除操作。
TRUNCATE TABLE 表名;--先删除表,然后再创建一张一样的表。推荐使用效率最高。
修改数据:
语法
update 表名 set 列名1 = 值1, 列名2 = 值2 ,……[where 条件];
注意
如果不加任何条件,则会将表中所有记录全部修改。
DQL:查询表中的记录
Select * from 表名;
语法:
Select
字段列表
From
表名列表
Where
条件列表
Group by
分组字段
Having
分组之后的条件
Order by
排序
Limit
分页限定
基础查询:
多个字段的查询
Select 字段名1,字段名2…from 表名;
注意:
如果查询所有字段,则可以用*来代替字段列表
去重
distinct
计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
Ifnull(表达式1,表达式2)/null参与的运算,计算结果都为null
表达式1:那个字段需要判断是否为null
如果该字段为null后的替换值
起别名
as
:as也可以省略
条件查询
where
字句后跟条件
运算符
>、<、<=、>=、=、<>
BETWEEN...AND
IN(集合)
LIKE:模糊查询
占位符
_:单个任意字符
%:多个任意字符
IS NULL
and 或 &&
or 或||
not 或!
例子
//查询年龄不能于20岁
SELECT * FROM student3 WHERE age<>20;
//查询年龄在20到30之间的
SELECT * FROM student3 WHERE age>=20 and age<=30
//查询年龄在20到30之间的
SELECT * FROM student3 WHERE age BETWEEN 20 AND 30
//查询年龄在22岁18岁25岁的
SELECT id ,`NAME` AS 姓名,age AS 年龄 ,sex as 性别,address as 地址,math as 数学成绩,english as 英语成绩 FROM student3 WHERE age =22 OR age=18 OR age =25
//查询年龄在22岁18岁25岁的
SELECT id ,`NAME` as 姓名 ,age as 年龄, sex as 性别,address as 地址, math as 数学成绩,english as 英语成绩 FROM student3 WHERE age IN(22,18,25)
//查询英语成绩为空的
SELECT * FROM student3 WHERE english IS NULL;
//查询英语成绩不为空的
SELECT * FROM student3 WHERE english IS NOT NULL;
//查询名称姓马的
SELECT * FROM student3 WHERE `Name` LIKE'马%'
//查询名称中第二位有化的
SELECT * FROM student3 WHERE `NAME` LIKE'_化%'
//查询名称是三位字的
SELECT * FROM student3 WHERE `NAME` LIKE'___';
//查询姓名中有德的
SELECT * FROM student3 WHERE `NAME` LIKE '%德%'
排序查询
语法: order by
字句
Order by 排序字段1 排序方式1,排序字段2 排序方式2…
排序方式:
Asc
:升序默认的
desc
:降序
注意
如果有多个排序条件,则当前的条件值一样时,才会判断第二条件。
聚合函数
将一列数据作为一个整体,进行纵向计算。
count:计算个数
一般选择非空的列,主键
Count(*)
max:计算最大值
min:计算最小值
sum:计算和
avg:计算平均值
注意
聚合函数的计算,会排除null值
解决方案
选择不包含非空的列进行机选
Ifnull函数
分组查询
语法:group by 分组字段
注意:
分组之后查询的字段:分组字段,聚合函数
在where 和having 区别
where 在分组前进行限定,如果不满足条件则不参与分组
having在分组之后进行限定,如果不满足结果,则不会被查询出来。
where后不可以跟聚合函数,having可以进行聚合函数的判断
分页查询
语法:limit 开始的索引,每页查询的个数
公式:
开始的索引=(当前页码-1)*每页显示的条数
SELECT * FROM student3 LIMIT 0,3 --第一页
SELECT * FROM student3 LIMIT 3,3 --第一页
limit
是一个MySQL的“方言”
DCL
DCL:管理用户,授权
管理用户
增
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';-- 创建用户
删
DROP USER '用户名'@'主机名';-- 删除用户
改
GRANT 权限 1, 权限 2... ON 数据库名.表名 TO '用户名'@'主机名';-- 给用户授权
REVOKE 权限 1, 权限 2... ON 数据库.表名 revoke all on test.* from 'user1'@'localhost'; '用户名'@'主机 名'; -- 撤销授权
mysqladmin -uroot -p password 新密码 -- 修改管理员密码
set password for '用户名'@'主机名' = password('新密码'); -- 修改普通用户密码
查
SHOW GRANTS FOR '用户名'@'主机名';-- 查看权限