SQL介绍
1.SQL的概念
SQL(Structured Query Language):结构化查询语言,其实就是定义了操作所有关系数据库的规则。每一种数据库的操作方式处在不一样的地方称为“方言”。
2.SQL语言的书写格式
(1).SQL语言可以单行或多行书写,以分号结尾。
(2).可以通过空格或者缩进来增强语句的可读性。
(3).MYSQL数据库的SQL语句不区分大小写,关键字建议使用大写。
(4).三种注释
*单行注释;--(一个空格) 注释内容 或者 #注释
*多行注释:/* 注释 */
3.SQL分类
1.DDL——操作数据库和表的
2.DML——增删改表中的数据
3.DQL——查询表中的数据
4.DCL——用户授权
DDL:操作数据库和表
操作数据库:CRUD
1.C(create):创建数据库
*创建某个数据库:1.Create Database 数据库名称 2.create database if not exists data01;(先判断是否存在数据库,没有就创建) 3.create database if not exists 数据库名称 character set 字符集(自定义字符集创建方式)
2.R(retrieve):查询
*查询所有数据库的名称:Show Databases;
*查看某个数据库的字符集(查看某个数据个的创建语句):Show Create Database 数据库名
3.U(update):修改
*修改数据库的字符集:alter database 数据库名称 character set 字符集名称
4.D(delete):删除
*删除数据库 drop database if exists 数据库名称//判断并删除
5.使用数据库
*查询正在使用的数据库名称:select database();
*使用数据库:use 数据库名称
操作表:CRUD
1.C(create):创建
*creat table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n);
注意:最后一个列名不用加逗号。
create table student(
id int,
name varchar(50),
age int,
score double(4,1),
birthday date,
insert_time timestamp);
*表中的数据类型
*int 整数类型
*double 小数类型:double(5,2)数字最多5位,小数类型占两位,最大值999.99
*date 日期类型,只包含年月日,yyyy-MM-dd
*datetime 日期类型,包含年月日时分秒:yyyy-MM-dd HH:mm:ss
*timestamp:时间类型 包含年月日时分秒:yyyy-MM-dd HH:mm:ss//如果不给timestamp类型赋值或赋值为null,会自动添加系统时间。
*varchar:字符串类型:name varchar(20),名字最大长度20
*复制表create table 表名 like 表名
2.R(retrieve):查询
*查询某个数据库所有表的名称:show tables
*查询表结构:desc 表名
3.U(update):修改
*修改表名
alter table 表名 rename to 新的表名;
*修改表的字符集
alter table 表名 character to 字符集名称
*添加一列
alter table 表名 add 列名 数据类型
*修改列名称,类型
alter table 表名 change 原列名 修改的列名 修改的类型
alter table 表名 modify 列名 新的数据类型
*删除列
alter table drop 列名
4.D(delete):删除
*drop table 表名
*drop table if exists 表名称
DML:增删改查数据
1.添加数据
语法
insert into 表名(列名1,列名2,...,列名n) values(值1,值2,...,值n);
insert into 表名values(值1,值2,...,值n);简化形式,全添加
除了数字类型,其他类型需要引号,单引号双引号都行,日期也是
2.删除数据
语法
delete from 表名 where 条件 注意:如果不加条件就会删除所有表中所有信息
truncate table 表名 //删除表,然后创建一个一摸一样格式的表
3.修改数据
语法
update 表名 set 列名1=值1,列名2=值2...where 条件 注意:如果不加条件会将表内记录全部修改
DQL:查询表内的数据
1.语法:
select 需要的字段
from 表名
where 条件列表(可以写多个条件)
group by 分组字段
having 分组之后的限定
order by 排序
limit 分页的限定
2.基础的查询
1.多个字段的查询
select 字段1,字段2...form 表名 where 条件
2.去除重复查询
select distinct 列名 FROM 表名;
3.计算列
一般可以使用四则运算计算一些列的运算
ifcull(表达式1,表达式2):如果null参与运算,计算结果都会为null,所以ifnull是判断表达式1是否为null,如果是则用表达式2代替
SELECT NAME,math,English,math+IFNULL(English,0)FROM student;//这里如果英语列为NULL,这该值设为0再相加
4.起别名
1.SELECT NAME,math AS 数学,English AS 英语,math+IFNULL(English,0)AS 总分FROM student;
12.SELECT NAME,math 数学,English 英语,math+IFNULL(English,0) 总分FROM student;
3.条件查询
1.where字句后加条件
2.运算符
*>,<,>=,<=,=, <>,!=,后两个都是不等于
*between...and
*in
*like
占位字符:_(下划线)单个占位符,%多个占位符
*is null
*and 或 &&
*or 或 ||
*not 或 !
注意在查找为空值时不能用 =null ,而是用 is null 或 is not null
4.排序查询
语法:order by 字句
*order by 排序字段1 排序方式1,排序字段2 排序方式2...
排序方式:1.ASC 升序(默认的,如果不指定排序方式的话)。 2.desc(降序)
如果有多个排序,先按照第一个进行排序,当前面的条件值相同时再安装第二个排序
5.聚合函数:
将一列数据作为一个整体,进行纵向的计算。(例如算平均分)
1.count:计算个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.ayg:计算平均值
注意:聚合函数的计算会排除null值,所以要计算null值可以用count(ifcull(表达式1,表达式2))或者count(*)后者不推荐使用
6.分组查询
语法:group by 分组字段
注意:
1.分组之后查询的字段只能是分组字段跟聚合字段,不能是其他字段
2.where和having的区别:1.where再分组之前进行限定,如果不满足条件这不参与分组;having在分组之后限定,如果不满足条件则不显示该分组 2.where后不可以跟聚合函数,having可以进行聚合函数的判断
7.分页查询
1.语法:limit 开始的索引,每页查询的条数;
2.公式:开始的索引=(当前的页码-1)*每页显示的条数
3.limit的语法是个方言,只能在MySQL进行使用。
DCL:用户授权
.管理用户
1.添加用户
-- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
2.删除用户
-- 删除用户
DROP USER '用户名'@'主机名'
3.修改用户密码
1.UPDATE USER SET PASSWORD=PASSWORD('新密码')WHERE USER='用户名';
2.set password for '用户名' @'主机名' =password('新密码');
*在MySQL中忘记root用户密码该怎么办?
1.cmd-->net stop mysql 停止mysql服务 需要管理员去运行cmd
2.使用无验证方式启动mysql服务:mysql --skip-grant-tables
3.打开新的cmd窗口,直接输入mysql,敲回车。就可以直接登录
4.输入:use mysql;(打开mysql数据库)
5.输入:update user set password=password('你的密码') where user='root'
6.关闭两个窗口.
7.打开任务管理器,手动结束mysql.exe的进程。
8.启动mysql服务
9.用新密码登录。
4.查询用户
-- 查询用户
-- 1.切换到mysql用户
USE mysql;
-- 2.查询用户
SELECT* FROM USER;
授权管理
1.查询权限
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
2.授予权限
--授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
--授予所有权限
grant all on *.* to '用户名'@'主机名';
3.撤销权限
--撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';