MySQL学习笔记1
文章目录
MySQL软件
MySQL服务启动
1.手动打开任务管理器进行启动和关闭
2.cmd --> services.msc 打开服务窗口
3.使用管理员打开cmd
-
net start mysql 启动mysql服务
-
net stop mysql 关闭mysql服务
mysql登录以及退出
-
mysql登录命令:
-
msql -u (账户:)root -p (密码)
-
mysql -h (ip地址)127.0.0.1 -u (连接的账户)root -p (连接账户的密码)
-
mysql --host = 127.0.0.1 --user = (账户)root – password=(密码)
-
-
mysql退出命令:
- exit
- quit
- \q
MySQL目录结构
- MySQL安装目录 :basedir=“D:/mysql/MySQL/”(例如我的)
- 配置文件 my.ini
- MySQL数据目录 :datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/”
- 几个概念
- 数据库 :文件夹
- 表 :文件
- 数据
- 几个概念
SQL
-
什么是 SQL?
SQL 是一种结构化查询语言,其实就是定义了操作所有关系型数据库的***规则***。
每一种数据库的操作方式存在不一样的地方,称为“方言”。
-
SQL 通用语法
- SQL 语句可以单行或者多行书写,以分号结尾。
- 使用空格和缩进来增强语句的可读性。
- MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
- 3种注释
- 单行注释:-- 注释内容(-- 后面有一个空格***,很关键*!) 或者 #注释内容(#号后面不需用加空格)
- 多行注释:/* 注释 */ (和java语言中的很像)
-
SQL分类
-
DDL(Data Definition Language) 数据定义语言
用来定义数据库对象:数据库、表、列等。 关键字:create,drop,alter 等
-
DML(Data Mainpulation Language) 数据操作语言
用来对数据库种表的数据进行增删改。 关键字:insert,delete,update等
-
DQL(Data Query Language) 数据查询语言
用来查询数据库中表的记录。 关键字:select,where等
-
DCL(Data Control Language) 数据控制语言
-
DDL:操作数据库,表
操作 数据库 : CRUD
-
C (Create) : 创建
-
创建数据库
- create database (数据库名称: )db1;
-
创建数据库,判断不存在,再创建
- create database if not exists (数据库名称: )db2;
-
创建数据库,并指定字符集
- create database (数据库名称: )db3 character set (字符集:例如utf8,gbk);
-
创建一个数据库,判断是否存在,并指定字符集
- create database if not exists (数据库名称: )db4 character set (字符集:例如utf8,gbk);
-
-
R (Retriteve) : 查询
- 查询所有数据库的名称
- show databases;
- 查询某个数据库的字符集:查询某个数据库的创建语句
- show create database 数据库名称;
- 查询所有数据库的名称
-
U (Update) : 修改
- 修改数据库的字符集
- alter database 数据库名称 character set 字符集名称;
- 修改数据库的字符集
-
D (Delate) : 删除
- 删除数据库
- drop database 数据库名称;
- 判断数据库存在,如果存在再删除
- drop database if exists 数据库名称;
- 删除数据库
-
使用数据库
- 查询当前正在使用的数据库名称
- select database();
- 使用数据库
- use 数据库名称;
- 查询当前正在使用的数据库名称
操作 表
-
C (Create) : 创建
语法:
-
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…
列名n 数据类型n
);
- 注意:最后一列不要写逗号 ( , )
- 数据库类型:(举其中一个例子来描述)
- int : 整数类型
- age int ,
- double : 小数类型
- score double(5,2) (第一个参数代表几位小数,第二个参数代表保留几位)
- date : 日期,只包含年,月,日,yyyy-MM-dd
- datetime : 日期,包含年,月,日,时,分,秒,yyyy-MM-dd HH:mm:ss
- timestamp : 时间戳类型 包含年,月,日,时,分,秒,yyyy-MM-dd HH:mm:ss
- 如果将来不给这个字段赋值,或者赋值为null。则默认使用当前的系统时间,来自动赋值
- varchar : 字符串类型
- name varchar(20); 参数20表示姓名最大为20个字符
- 例如:zhangsan 8个字符 ; 张三 2个字符
- name varchar(20); 参数20表示姓名最大为20个字符
- int : 整数类型
-
复制表:
- create table 表名 like 被复制的表名 ;
-
-
R (Retriteve) : 查询
- 查询某个数据库中所有的表名称
- show tables;
- 查询表结构
- desc 表名;
- 查询某个数据库中所有的表名称
-
U (Update) : 修改
- 修改表名
- alter table 表名 rename to 新的表名 ;
- 修改表的字符集
- alter table 表名 character set 字符集名称;
- 添加列
- alter table 表名 add 列名 数据类型;
- 修改列名称,类型
- alter table 表名 change 列名 新列名 新数据类型 ;
- alter table 表名 modify 列名 新数据类型 ;
- 删除列
- alter table 表名 drop 列名 ;
- 修改表名
-
D (Delate) : 删除
-
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
分页限定
基础查询 :
1. 多个字段的查询 :
* select 字段名1, 字段名2, ... from 表名 ;
* 注意 : 如果查询所有字段,则可以使用 * 来替代字段列表
2. 去除重复 :
* distinct 关键字
3. 计算列 :
* 一般可以使用四则运算计算一些列的值。 (一般只会进行数值型的计算)
* 例如:select 字段名1, 字段名2, ... 字段名n 字段名1+字段名2+ ... 字段名n from 表名 ;
* ifnull(表达式1, 表达式2) : `(null参与的计算,计算结果都为null)`
* 表达式1 : 哪个字段需要判断是否为null
* 表达式2 : 如果该字段为null后的替换值
4. 起别名 :
* as 关键字 `as也可以省略`
条件查询 :
-
where字句后跟条件
-
运算符 :
-
比较运算符
-
<、>、<=、>=、=、<>
<>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
-
BETWEEN…AND
在一个范围之内
- SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2 ;
-
IN(集合)
集合表示多个值,使用逗号分隔
- SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2…);
-
LIKE
模糊查询
- 通配符 :
- _
单个任意字符
- %
多个任意字符
- _
- SELECT * FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’;
- 通配符 :
-
IS NULL
查询某一列为 NULL 的值,注:不能写 = (!=) NULL
-
-
逻辑运算符
-
and 或 &&
与,SQL 中建议使用前者,后者并不通用。
-
or 或 ||
或
-
not 或 !
非
-
-
排序查询 :
- 语法 : order by 子句
- order by 排序字段1 排序方式1 , 排序字段2 排序方式2, …… ;
- 排序方式 :
- ASC : 升序,默认的
- DESC : 降序
- 注意 :
- 如果有多个排序条件,则当前面的条件之一样时,才会判断第二条件
聚合函数 :
聚合函数:将一列数据作为一个整体,进行纵向的计算。
1. count : 计算个数
1. 一般选择非空的列:主键
2. count(*)
2. max : 计算最大值
3. min : 计算最小值
4. sum : 计算和
5. avg : 计算平均值
- 注意:聚合函数的计算,排除null值
- 解决方案:
- 选择不包含null值的列进行计算
- IFNULL函数
- 解决方案:
分组查询 :
-
语法:
group by 分组字段;
-
注意:
- 分组之后查询的字段:分组字段、聚合函数
- where和having的区别?
- where在分组之前进行限定,如果不满足条件,则不参与分组;having在分组之后进行限定,如果不满足结果,则不会被查询出来。
- where后不可以跟聚合函数,having可以进行聚合函数的判断。
分页查询 :
-
语法:
limit 开始的索引 , 每页查询的条数 ;
-
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
SELECT * FROM 表名 LIMIT 0,3; -- 第一页 SELECT * FROM 表名 LIMIT 3,3; -- 第二页 SELECT * FROM 表名 LIMIT 6,3; -- 第三页
-
LIMIT 是一个MySQL数据库“方言”
DCL : 管理用户,授权
1. 管理用户
-
添加用户:
-- 创建用户 CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-
删除用户:
-- 删除用户 DROP USER '用户名'@'主机名';
-
修改用户密码:
-- 两种方式 UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名'; SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
- MySQL中忘记了root用户的密码?
- 管理员身份运行 cmd – > net stop mysql – 停止MySQL服务
- 使用无验证方式启动启动MySQL服务: mysqld --skip-grant-tables
- 打开新的cmd窗口,直接输入 mysql 命名,敲回车。就可以登录成功
- use mysql;
- update user set password = password(‘新密码’) where user = ‘root’;
- 关闭两个窗口
- 打开任务管理器,手动结束 mysqld.exe 进程
- 管理员身份运行 cmd输入net start mysql 启动MySQL服务
- 使用新密码登录
- MySQL中忘记了root用户的密码?
-
查询用户:
-- 1. 切换到MySQL数据库 USE mysql; -- 2. 查询user表 SELECT * FROM USER;
- 通配符:% 表示可以在任意主机使用用户登录数据库
2. 权限管理:
-
查询权限:
-- 查询权限 SHOW GRANTS FOR '用户名'@'主机名';
-
授予权限:
-- 授予权限 GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
-
撤销权限:
-- 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';