MySQL(一)一篇文章入门MySQL

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 ‘用户名’@‘主机名’

发布了44 篇原创文章 · 获赞 5 · 访问量 890

猜你喜欢

转载自blog.csdn.net/qq_40634246/article/details/104732742