-- 对数据库 --
SHOW DATABASES;-- 查询数据库
SELECT DATABASE();-- 查当前数据库
SHOW CREATE DATABASE test01;-- 查指定数据库
CREATE DATABASE test01 CHARACTER SET utf8;-- 增数据库
DROP DATABASE test;-- 删除数据库
USE test01;-- 使用数据库
-- 对数据库 --
-- 对表 --
CREATE TABLE t01(id INT,姓名 VARCHAR(32));-- 增表创建表
DROP TABLE t01;-- 删除表
RENAME TABLE t01 TO t;-- 改表名
SHOW DATABASES;-- 查所有表
SELECT * FROM t01 AS 表01;-- 查表用别名
DESC t01; -- 查表结构
ALTER TABLE t01 ADD 性别 VARCHAR(32) ;-- 增列-- 修改表结构 --
ALTER TABLE t01 MODIFY 性别 CHAR(1);-- 改列的类型
ALTER TABLE t01 CHANGE 性别 sex CHAR(1);-- 改列名和类型
ALTER TABLE t01 CHARACTER SET utf8;-- 改列编码
ALTER TABLE t01 DROP sex;-- 删列
SELECT id FROM t01;-- 查列-- 修改表结构 --
-- 对表 --
-- 对数据 --
INSERT INTO t01(id,姓名)VALUES(1,'张三丰'),(2,'张无忌');-- 增数据
INSERT INTO t01 VALUES(3,'火云邪神');-- 增数据
UPDATE t01 SET 姓名='黄蓉' WHERE id=1;-- 改数据
DELETE FROM t01 WHERE 姓名='黄蓉';-- 删数据不清空自动增长
TRUNCATE TABLE t01;-- 重置清空自动增长
SELECT * FROM t01;-- 查表中所有数据
SELECT * FROM t01 WHERE 姓名 LIKE '张%';-- 查姓张的模糊
SELECT DISTINCT FROM id,姓名 FROM t;-- 查去重
SELECT id AS 学号 FROM t01;-- 查列别名
SELECT id FROM t01 WHERE id=1;-- 查询条件
SELECT id,姓名 FROM t ORDER BY id DESC;-- 查询降序
SELECT id,姓名 FROM t GROUP BY id;-- 查询分组
MySQl的服务启动/关闭
1 手动 任务管理器 服务 找到MySql
2 cmd--> services.msc 打开服务的窗口
3 用管理员打开cmd
启动服务 net start mysql
停止服务 net stop mysql
查看状态
1 win+R services.msc
2 netstart -ano查看本机配置
3 netstart -ano | findStr"3306"找到PID然后去任务管理器结束进程
开启服务
net start mysql
关闭服务
1 net stop mysql 正常关闭
2 管理员运行cmd taskkill /F /PID 6979 通过任务管理器PID强制关闭
exit
通过IP地址访问
mysql -h127.0.0.1 -uroot -p (quit/exit退出2方式)
mysql --host=IP --user=root --password==链接目标的密码
MySql目录结构
1 MySql安装目录
bin二进制可执行文件 data数据目录 数据文件 日志文件 include C语言的信息 lib目录 /shareMySql错误目录
my.ini核心配置文件
2 MySql数据目录
C盘 隐藏文件夹 data 下 数据库文件夹 下 表
几个概念
数据库:文件夹
表:文件
数据:
SQL操作 SQL是一种规则
1 什么是SQL?
翻译过来是:架构化查询语言!
其实就是定义了操作所有关系型数据库的规则,
SQL是一种规则,只要是关系型数据库都能用SQL操作,
每一种数据库操作的方式存在不一样的方式,称之为“方言”
2 基本通用语法
1* SQL语句可以单行或多行书写,以分号结尾,遇到分号才会结束。
2 可以用空格和缩进增强语句的可读性show databases;
3* MySql数据库的SQL语句不区分大小写 关键字建议区分大小写 最好大写
4* 3种注释
单行注释 show databases;-- 查询所有语句名称 必须加空格 常用这种
#查询所有语句名称 #可以不加空格
多行注释 show databases;/*查询所有语句名称*/
3* SQL分类(面试)4大类
1 DDL 客户端访问 操作数据库和表的 对数据库和表的增删改查
**对数据库CRUD增删改查
1 C(Create):创建数据库的3方式
创建数据库:
create database 数据库名;-- 创建新的数据库
创建数据库判断不存在在创建:
create database if not exists 数据库名;-- 判断如果不存在就创建
创建数据库并指定字符集
create database 名 character set utf8;-- 创建库设置字符集
2 R(Retrieve):查询数据库
查询所有数据库的名称
show databases;-- 查看所有数据库
infofmation_schena
mysql核心数据库很多表
performance_schena性能
test空的数据库
show create database (mysql数据库的名称);-- 查看对应的数据库的字符集
3 U(Update):修改数据库
修改数据库的字符集
alter database 数据库名 chatacter set 字符集;
4 D(Delete):删除数据库
删除数据库
database 数据库名称;
判断数据库是否存在,存在在删除
drop database if exists 数据库名;
5 使用数据库
查询当前正在使用的数据库名称
select database();
使用数据库
use 数据库名称;
**对表的操作
查询表的操作
1 C(Create):创建表
1 基本语法:create table 表名(列名和列对应的类型);
create table 表名(
列名1 数据类型1,
列名1 数据类型1,
列名1 数据类型1
);
最后一列不要加逗号(,)
数据类型
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个字符
char(11)和varchar(11)区别
存入长度不能超出指定长度
char长度会把长度固定 长度不足的用空格自动补满
varchar不超范围根据文本类容改变
test 超大文本/文本文件的保存
复制表create table stu like student;
2 R(Retrieve):查询表
查询某个数据库中所有的表名称
show tables;
查询表结构
desc 表名;看表结构的类型的
show create table 表名;命令行下
3 U(Update):修改表
1 修改表名
rename table 表名 to 新的表名;
alter table 表名 to 新的表名;
2 修改表的字符集
alter table 表名 character set 字符集名称;
3 添加一列
alter table 表名 add 列明 数据类型 约束;
4 修改列的名称和类型
改类型和名字alter table 表名 change 列名 新列名 新数据类型;
只改类型 alter table 表名 modify 列名 新数据类型;
5 删除列
alter table 表名 drop 列名;
4 D(Delete):删除表
drop table 表名 ;不确定直接写这个
drop table if exists 表名 ;
2* DML 客户端访问 删改表中的数据 *常用
客户端图形化工具SQLyog
1 增 添加数据
语法:
1 insert into 表名(列名1 数据类型,列名2 数据类型,列名n 数据类型) values(1,“张无忌”,18);
2 INSERT INTO 表名 VALUES(值1,值2,...,值N);
注意事项
1 列名和值要一一对应
2 如果表名后不定义列名,则默认给所有列添加值
3 除了数字类型,其他类型需要引号(单双都可以)引起来
2 删 删除数据**
语法格式
1 删除部分数据
DELETE FROM 表名 WHERE 条件;
当WHERE的条件满足就从表里删除数据
2 删除表内所有数据
--DELETE是一条条删除,不会清空AUTO_INCREMENT
DELETE FROM 表名;
--直接将表删除,重建,AUTO_INCREMENT重置为0
TRUNCATE TABLE 表名;
注意
1 如果不加条件,则删除表中所有记录
2 truncate table 表名:-- 删除表,然后再创建一个一模一样的空表
delete from 表名 where 条件;-- 不推荐使用 ,有多少记录就会执行多少次删除操作
-->dml可以还原 因为id不会被覆盖 (可以通过事务进行还原
truncate table 表名; 推荐使用,效率高,先删除表在创建一模一样
-->ddl不可以还原 id被彻底删了 (不可以通过事务还原
3 改 修改数据
语法格式
update 表名 set 列名1 = 值1,列名2 = 值2 [where 条件];
UPDATE 表名 SET 列名1=值1,列名2=值2,...,列名n=值n WHERE 条件;
例子:UPDATE stu SET age = 117 WHERE id = 3;
注意
如果不加任何条件,则会将表中所有记录修改,字符串的值加引号
3* DQL 客户端访问 查询表中的数据 *常用
查询表中的记录-->select * from 表名;
* select * from 表名;
(单表)基本 条件 去重 去重 分组 排序 分页 模糊
select where distinct having order by [asc/desc] limit like%/_
1.语法:
select字段列表
from表名列表
where条件列表
group by+列名 分组查询 割肉破 败
having分组之后的条件
order by+列名+[asc/desc]排序 奥德 败 写在代数第二 倒数第一是注释
limit分页限定
注释
2.基础查询
1.多个字段的查询
select 字段名 FROM 表名;
* 注意
* 如果查询所有字段,则可以使用*来替代字段列表。
2.去除重复 distinct 带思停克特
* 写在列名前面,列名都重复才会去重
3.计算列
* 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
* ifnull(表达式1,表达式2);
*表达式1:哪个字段需要判断是否为null
*如果该字段为mull后的替换之
4.起别名
预防直接中文乱码 as成中文 在查询 也可以用空格代替
*as:as也可以省略
3.条件查询
1.where子句后跟条件
2.运算符
* <>是不等于 =是等于
* AND/OR
* between...and... 区间范围 WHERE后写
* between...or... 没交集 在什么或者什么
* is null/ is not null 是否为null/是否不为null
* in(集合)匹配指定元素
* like '%张%'模糊查询
%代表0或者多个字符 张XX '张%' X德X '%德%'
_代表单个字符 张X '_化%'
where 列名 LIKE '张%' AND ...;
4 DCL 客户端访问 授权的 用于权限和安全访问的操作 (开发没关系 是运维用的
查询语句
1排序查询
* 语法:order by 子句
* order by 排序字段1 排序方式1,...
SELECT * FROM 表 ORDER BY 列 -- 排列方式;
* 排序方式:
* ASC:升序,默认的。
SELECT * FROM 表 ORDER BY 列1 ASC,列2 ASC;
* DESC:降序。
SELECT * FROM 表 ORDER BY 列 DESC;
* 注意:
* 如果有多个排序条件,则当前面的条件值一样时,才会判断第二条件
2聚合函数--通常配合分组进行操作,将一列数据作为一个整体,进行整体排序
* 语法:
1 count计算个数
格式:SELECT COUNT(列) FROM 表;
主键 id
count
2 max计算最大值
3 min计算最小值
4 sum计算和
5 avg计算平均值
* 注意:聚合函数的计算会排除null
解决方案:
1 选择不包含非空的列计算(主键)
2 IFNULL函数
3分组查询 GROUP BY
1 语法:
格式:SELECT (分组/聚合) FROM 表 GROUP BY 列;
2 注意:
分组之后查询的字段:分组字段、聚合函数
where和having区别
where在分组之前进行筛选限定,如果不满足条件,不参与分组
having在分组之后进行二次筛选,如果不满足结果,则不会被查询出来
where后不能跟聚合函数/having可以进行聚合函数的判断
4分页查询
1 语法:limit 开始的索引,每页查询的条数;
SELECT * FROM 表 LIMIT 0,3;-- 第1页从0开始查到3
SELECT * FROM 表 LIMIT 3,3;-- 第2页开始索引是3查寻3条
2 公式;开始的索引 = (当前页码 -1) * 每页显示的条数
3 limit是一个MySql‘方言’