赞
踩
SQL分类:
DDL:操作数据库和表
DML:增删改表中数据
DQL:查询表中数据
DCL:管理用户,授权
* DBA:数据库管理员
操作数据库:CRUD
C(Create):创建
创建数据库:
创建数据库,判断不存在,再创建:
创建数据库,并指定字符集
练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
R(Retrieve):查询
查询所有数据库的名称:
查询某个数据库的字符集:查询某个数据库的创建语句
U(Update):修改
修改数据库的字符集
D(Delete):删除
删除数据库
判断数据库存在,存在再删除
使用数据库
查询当前正在使用的数据库名称
使用数据库
操作表
C(Create):创建
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
注意:最后一列,不需要加逗号(,)
数据库类型:
int:整数类型
double:小数类型
date:日期,只包含年月日,yyyy-MM-dd
datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
varchar:字符串
name varchar(20):姓名最大20个字符
zhangsan 8个字符 张三 2个字符
创建表
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);
复制表:
R(Retrieve):查询
查询某个数据库中所有的表名称
查询表结构
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 表名 ;
添加数据:
语法:
注意:
列名和值要一一对应。
如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,…值n);
除了数字类型,其他类型需要使用引号(单双都可以)引起来
删除数据:
语法:
注意:
如果不加条件,则删除表中所有记录。
如果要删除所有记录
delete from 表名; – 不推荐使用。有多少条记录就会执行多少次删除操作
TRUNCATE TABLE 表名; – 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
修改数据:
语法:
注意:
语法:
select 字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
基础查询
多个字段的查询
select 字段名1,字段名2… from 表名;
注意:
去除重复:
计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值。
起别名:
条件查询
where子句后跟条件
运算符
、< 、<= 、>= 、= 、<>
BETWEEN…AND
IN( 集合)
LIKE:模糊查询
占位符:
_:单个任意字符
%:多个任意字符
IS NULL
and 或 &&
or 或 ||
not 或 !
排序查询
语法:order by 子句
排序方式:
ASC:升序,默认的。
DESC:降序。
注意:
聚合函数:将一列数据作为一个整体,进行纵向的计算。
count:计算个数
一般选择非空的列:主键
count(*)
max:计算最大值
min:计算最小值
sum:计算和
avg:计算平均值
注意:聚合函数的计算,排除null值。
解决方案:
选择不包含非空的列进行计算
IFNULL函数
分组查询:
语法:group by 分组字段;
注意:
分组之后查询的字段:分组字段、聚合函数
where 和 having 的区别?
where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
where 后不可以跟聚合函数,having可以进行聚合函数的判断。
– 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
– 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
– 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
– 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
分页查询
语法:limit 开始的索引,每页查询的条数;
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
– 每页显示3条记录
SELECT * FROM student LIMIT 0,3; – 第1页
SELECT * FROM student LIMIT 3,3; – 第2页
SELECT * FROM student LIMIT 6,3; – 第3页
limit 是一个MySQL"方言"
管理用户
添加用户:
删除用户:
修改用户密码:
UPDATE USER SET PASSWORD = PASSWORD(‘新密码’) WHERE USER = ‘用户名’;
UPDATE USER SET PASSWORD = PASSWORD(‘abc’) WHERE USER = ‘lisi’;
SET PASSWORD FOR ‘用户名’@‘主机名’ = PASSWORD(‘新密码’);
SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘123’);
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 的进程
启动mysql服务
使用新密码登录。
查询用户:
– 1. 切换到mysql数据库
USE myql;
– 2. 查询user表
SELECT * FROM USER;
权限管理:
查询权限:
– 查询权限
SHOW GRANTS FOR ‘用户名’@‘主机名’;
SHOW GRANTS FOR ‘lisi’@’%’;
授予权限:
– 授予权限
grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
– 给张三用户授予所有权限,在任意数据库任意表上
GRANT ALL ON . TO ‘zhangsan’@‘localhost’;
撤销权限:
– 撤销权限:
revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
REVOKE UPDATE ON db3.account
FROM ‘lisi’@’%’;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。