文章目录
MySQL基础
1、DDL:数据定义语言
2、DML:数据操纵语言
3、DQL:数据查询语言
4、DCL:管理用户、授权
一、DDL(数据定义语句)
1、创建数据库
create database 数据库名 charset utf8;(在java中写utf-8)
# 创建数据库 bilibili
create database bilibili charset utf8;
2、显示所有数据库
show databases;
3、使用数据库
use 数据库名;
4、创建表(表:储存数据的单位)
用户表:用户的ID,用户的年龄,用户名;
#创建表user
create table user(
id int,
age int,
username varchar(10)
);
5、显示所有的表
show tables;
6、查看表的字段
desc 表名;
7、给表添加字段:
alter table 表名 add 字段名 字段类型;
#在user表添加1个性别:
alter table user add sex varchar(1);
8、修改字段的类型
alter table 表名 modify 字段名 字段类型;
#将sex字段修改成int类型
alter table user modify sex int;
9、删除字段
alter table 表名 drop 字段名;
#将字段sex删除
alter table user drop sex;
10、修改表名
rename table 原表名 to 新表名;
#将数据库bilibili中user表的表名修改为student;
rename table user to stu;
11、查看建表细节
show create table 表名;
12、修改表的字符集
alter table 表名 character set 字符集名称;
#将student表的字符集修改为gbk(最好再改回utf8)
alter table stu character set gbk;
alter table stu character set utf8;
13、修改列(字段)的名称
alter table 表名 change 原始列名 新列名 字段类型;
#将字段 id 改为 sid
alter table stu change id sid int;
14、删除表
drop table 表名;
二、DML语句:数据操纵语言
1、查询所有数据
select * from 表名;
select * from 表名 \G;(大写的G)(一般不用)
2、插入数据
insert into 表名 (字段1,字段2,…) values(字段1的值,字段2的值);
#插入一条数据
insert into stu (sid,age,username) values(5,14,'小萝莉');
3、更新操作
update 表名 set 列名 = 新列值 where 列名=原列值;
#将 小萝莉 修改成 御姐
update stu set username = '御姐' where sid=5;
4、删除记录
delete from 表名; //删除表中所有的数据
delete from 表名 where 列名 = 新列值 ; //删除表中一条数据,但是可以找回
truncate table 表名; //删除整张表,再重新建立一个一样结构的表,数据不能找回
#把御姐删除了
delete from stu where username = '御姐';
三、DQL语句:数据查询语言
1、查询所有数据
select * from 表名;
2、查询指定数据
select 字段名1,字段2... from 表名;
3、条件查询
select * from 表名 where 条件;
#条件关键字、关键字符
等于 =
不等于 != or <>
小于等于 <=
大于等于 >=
between...and... 在 ## 和 ## 之间(前小后大)
#查询stu表中小于17岁的信息
select * from stu where age <=17;
#查询年龄在15到17之间的信息
select * from stu where age between 15 and 17;
and 和,并且
or 或,或者
is null 为空值
is not null 不为空值
#查询年龄为15或者17的成员信息
select * from stu where age = 15 or age =17;
4、模糊查询
模糊查询
like _单个字符
like %多个字符
#查询姓名是小字开头的
select * from stu where username like '小%';
5、排序
排序关键字 order by
升序 asc (默认)
降序 desc
#将stu表中的成员信息根据年龄降序排序
select * from stu order by age desc;
6、聚合函数
count(字段名) 统计该字段不为null的行数
max(字段名) 统计该字段中最大的值
min(字段名) 统计该字段中最小的值
sum(字段名) 统计该字段中所有的值的和
avg(字段名) 统计该字段中所有的值的平均值
7、分组函数
分组关键字: group by 字段名
将该字段中相同的值分为一组(例如每个单位,每个部门,每个班级...等)
分组之前可以用where关键字加条件
分组之后可以使用having添加条件
一个完整的select语句格式
一个完整的select语句格式如下:
select 字段
from 表名
where …….
group by ……..
having …….(就是为了过滤分组后的数据而存在的—不可以单独的出现)
order by ……..
limit...
以上语句的执行顺序:
1. 首先执行where语句过滤原始数据
2. 执行group by进行分组
3. 执行having对分组数据进行操作
4. 执行select选出数据
5. 执行order by排序
6. 执行limit
原则:能在where中过滤的数据,尽量在where中过滤,效率较高。
having的过滤是专门对分组之后的数据进行过滤的。
8、limit关键字的使用
limit用来获取一张表中的某部分数据。
limit只有在mysql中存在,不通用,是mysql数据库管理系统的特色。
limit的使用语法:
Limit 起始下标 , 长度
起始下标没有指定,默认从下标零开始。0表示表中第一条数据。
mysql中通用的sql语句只适用于:mysql数据库管理系统
例如:
每页显示3条记录:
第1页:0,3
第2页:3,3
第3页:6,3
第4页:9,3
……….
第pageNo页显示pageSize条记录
第pageNo页:(pageNo-1)*pageSize, pageSize
Select
t.*
From
t
Order by
xxx desc/asc
Limit
(pageNo - 1 )*pageSize,pageSize;
9、约束
primary key 主键(唯一,且不为空)
unique 唯一约束
auto_increment 自增
not null 不为空
#新建一个teacher表
create table teacher(
id int primary key auto_increment,
name varchar(10)
);
10、多表联查
#搭建一个环境
#新建一个数据库
create database school charset utf8;
#新建学生表
drop table if exists student;
create table student(
id int primary key auto_increment,
name varchar(10) not null,
age int
);
#新建老师表
drop table if exists teacher;
create table teacher(
sid int primary key auto_increment,
tname varchar(10) not null
);
#查出每一个学生对应的老师的名字。
1、99查询法
select student.name,teacher.tname from student,teacher
where student.id=teacher.sid;
2、内连接 join on
select * from 表1 join 表2 on 条件;
select student.name,teacher.tname from student join teacher
on student.id=teacher.sid;
3、左外连接(显示左表的所有数据,另外右表中与之对应的数据也显示出来)
select student.name,teacher.tname from student left join teacher
on student.id=teacher.sid;
4、右外连接(显示右表中所有的数据,另外左表中与之对应的数据也显示出来)
select student.name,teacher.tname from teacher right join student
on student.id=teacher.sid;
11、索引
索引:加快查询效率
#比如有一千万条数据,如果给id加上索引,查询速率会快很多
创建索引: create index 索引名 on 表名(字段名);
删除索引: drop index 索引名 on 表名;
查看索引: show index from 表名;
学生表:
姓名,id
成绩表:
id,xueshengid,
drop table if exists student;
create table student(
sname varchar(20),
id int(10)
);
drop table if exists record;
create table record(
id int(10),
sid int(10),
sub varchar(20),
rec int(10)
);
select s.sname,r.*
from student s,record r
where r.sid=s.id
group by s.sname;
四、DCL:管理用户、授权
4.1、管理用户
1.添加用户
create user '用户名'@'主机名' identified by '密码';
create user 'zicheng'@'localhost' identified by 'root';
2.删除用户
drop user '用户名'@'主机名'
3.修改用户密码
update user set password=password('新密码') where user='用户名';
set password for '用户名'@'主机名' =password('新密码');
4.查询用户
--切换到mysql数据库
use mysql;
--查询user表
select * from user;
% 通配符:
%表示可以在任意主机使用用户登录数据库。
5.忘记了mysql的root密码
1.cmd--->net stop mysql (管理员权限cmd)
2.使用无验证方式启动mysql服务:
mysqld --skip-grant-tables
3.打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登陆成功
4.use mysql;
5.修改密码语句。
6.关闭两个窗口
7.打开任务管理器,手动结束mysqld.exe服务
8.使用新密码登录
4.2、权限管理
1.查询权限
show grants for ‘用户名’@‘主机名’
2.授予权限
grant 权限列表 on 数据名.表名 to ‘用户名’@‘主机名’
grant all on . to ‘用户名’@‘主机名’
3.撤销权限
revoke 权限列表 on 数据名.表名 from ‘用户名’@‘主机名’