数据库MySQL总结(一)SQL语句

目录

一、一些命令

二、SQL结构化查询语言

1、DDL 数据库定义语言   

针对结构(库、表)的增删改查 create   drop   alter   show

有关库的增删改查

(1)创建库

(2)删除库

(3)查看库

有关表的增删改查

(1)创建表

(2)删除表

(3)修改表

(4)查看表

2、DML  数据操作语言  针对数据的增删改查

(1)插入数据  insert

(2)删除数据  

(3)修改数据 

(4)查询数据

单表查询

a.普通查询

b.去重查询  distinct

c.排序查询  order by   asc升序 desc 降序

d.分组查询 group by

多表查询

a.等值查询  笛卡尔乘积 穷举-效率太低 一般不用

b.连接查询

1.外连接查询

3、DCL 数据库控制语言 针对权限管理

(1)授权 grant

(2)回收权限 revoke

三、MySQL


一、一些命令

service mysqld start 服务器端开启(需要切换到管理员状态)

mysql -u root -p (-u后跟用户名 -p后跟密码)

show databases; 打印库的目录

use 库名; 选择库

show tables; 打印表的目录

desc 表名; 查看表的字段信息

select user,host,password from user;

system clear; 清屏

 

二、SQL结构化查询语言

1、DDL 数据库定义语言   

针对结构(库、表)的增删改查 create   drop   alter   show

有关库的增删改查

(1)创建库

create database [if not exists] 库名;

避免在创建中因为库重名而导致客户端中断的错误。如果不存在则创建,如果存在就不再创建

(2)删除库

drop database [if exists] 库名;

(3)查看库

show create database 库名;

 

有关表的增删改查

(1)创建表

例如创建一个学生表:

 学生表

 学号

 姓名

 年龄

 性别

 约束

(约束包含有:主键、外键、唯一、非空、默认 )

 

Stu

id  varchar(10)   primary key

name varchar(10)  not null

age  int         

sex  enum("man","woman") default "man"

 

创建表stu

create table stu(

       id varchar(10) primary key COMMENT "学生学号",

       name varchar(10) not null COMMENT "学生姓名",

       age int COMMENT "学生年龄",

       sex enum("man","woman") default "man" COMMENT "学生性别"

);

             

  • 表中应该包含有:字段名称、字段类型、字段约束、字段注释
  • char(10) 与varchar(10)的区别:

       "lisi"  char(10)   10    固长

               varchar(10)  5    变长

(2)删除表

 drop  table  stu;

(3)修改表

1.修改字段类型  modify

alter table stu modify name varchar(20);

2.修改字段名称  change

alter table stu change id  sid varchar(10);

3.添加新的字段    add   first 或者after

alter table stu add score float;

alter table stu add score1 float after id;

4.删除一个字段  drop

alter table stu drop score;

5.修改表名    rename

alter table stu rename student;

(4)查看表

 show create table表名;//查看表的创建信息

 desc 表名 ;//查看表的字段信息

 

2、DML  数据操作语言  针对数据的增删改查

(1)插入数据  insert

"001", "zhangsan", 19, "man"

"002", "lisi", 20, "woman"

"003", "wangwu", 18, "man"

"004", "zhaoliu",17, "woman"

"005", "maqi", 21, "man"

     insert into stu values("001", "zhangsan", 19, "man");

     或者insert into stu(id,name,age,sex) values("001", "zhangsan", 19, "man"),(.......);

     insert into stu(id,name,sex) values("002","lisi","woman"),(........),(.......);

a.小批量的插入  replace 

  insert into stu values("003", "wangwu", 18, "man"),("004", "zhaoliu",17, "woman"),("005", "maqi", 21, "man");

b.大批量插入  load  source

       insert  replace

       insert  id primary key   "001"

              "001","gaoxin",20,"woman"; X

       replace类似于delete+insert   insert     

              "001","gaoxin",20,"woman"; V

(2)删除数据  

 delete from stu;删除stu中所有数据

 delete from stu where name = "zhangsan";

(3)修改数据 

  update stu set age = 19;修改stu中的所有年龄为19

  update stu set age = 19 where id = "002";

(4)查询数据

单表查询

a.普通查询

select * from stu;  *代表所有  //查询stu表中的所有内容

select * from stu where id = "001";  //查询stu表中id为001的学生的所有数据

select id,name,age from stu;   //查询stu中的 所有学生的id,name,age

b.去重查询  distinct

select distinct age from stu;

c.排序查询  order by   asc升序 desc 降序

select distinct age from stu order by age asc;

d.分组查询 group by

select id,SUM(score) as all_score   //as后加名称 as可省略,as就是起个别名

from result

group by id;  //按照学生的id分组,查询他们的成绩和

 

多表查询

再创建一个表result,下图上方时stu学生表,下方是result学生成绩表

a.等值查询  笛卡尔乘积 穷举-效率太低 一般不用

例如:查询年龄未满18周岁的学生的不及格成绩

 select name,score

 from stu,result

 where stu.id = result.id and age < 18 and score < 60;

b.连接查询

先缩小范围,再进行查询

1.外连接查询

1.1左外连接查询  (用得最多)

 范围缩小后,左表中的数据必须全部存在,右表如果没有这个数据就补NULL

select name,score

from

(select id,name from stu where age < 18) a  //从这个子查询把左表的范围缩小

left join  //左外连接查询

(select id,score from result where score < 60) b  //从这个子查询把右表的范围缩小

on a.id = b.id; //通过这个条件将左右表匹配

 

再向stu表中插入一条数据学生编号006,小于18岁,但是他在成绩表中没有数据

当再一次进行查询时,如下图显示出了"kaixin" NULL 。这就是范围缩小后,左表中的数据必须全部存在,右表如果没有这个数据就补NULL。

select name,score

from

(select id,name from stu where age < 18) a 

left join

(select id,score from result where score < 60) b

on a.id = b.id

where score is not null; //分数不为空

 

1.2右外连接查询

范围缩小后,右表中的数据必须全部存在,左表如果没有这个数据就补NULL

select name,score

from

(select id,name from stu where age < 18) a 

right join  //右外连接查询

(select id,score from result where score < 60) b

on a.id = b.id;

select name,score

from

(select id,name from stu where age < 18) a 

right join

(select id,score from result where score < 60) b

on a.id = b.id

where name is not null; //名字不为空

 

1.3全连接查询

保证左右两边数据都存在

select name,score

from

(select id,name from stu where age < 18) a 

full join

(select id,score from result where score < 60) b

on a.id = b.id;

 

2.内连接查询

只匹配满足条件的,只要不满足就不要了

select name,score

from

(select id,name from stu where age < 18) a 

inner join

(select id,score from result where score < 60) b

on a.id = b.id;

用的频率:左外连接、内连接、右外连接、很少用全连接

 

c.联合查询  union 自带去重

union all 不去重

再创建一个teacher表,如图

select id,name,age,sex from stu
union
select tid,tname,tage,tsex from teacher;

 

3、DCL 数据库控制语言 针对权限管理

create user "cy1706"@localhost identified by "123";   //创建本机下的用户cy1706 密码123

退出 Mysql 用exit 或者 quit

%代表远程

(1)授权 grant

grant 操作 on 库 to 用户;

grant select on CY1706.* to cy1706;      //授予cy1706用户  查看CY1706库所有内容的权限

flush privileges;        //刷新权限

(2)回收权限 revoke

revoke 操作 on 库 from 用户;

revoke select on CY1706.* from cy1706;    //回收cy1706用户  查看CY1706库所有内容的权限      

 

  • 谁赋予的权限,谁可以回收,不允许出现反祖的现象

root赋予所有权限给u1,u1 赋予所有权限给u2,u2赋予所有权限给u3,u3不可以回收u2的权限。谁赋予的权限,谁可以回收,不允许出现反祖的现象。

  • MySQL下的日志文件:redo.log   undo.log

三、MySQL

1、存储引擎  一个数据文件的存取机制  插件  存储引擎不一样,则存取机制也不一样

MyISAM   InnoDB   MEMORY

版本5.5以下默认的是MyISAM存储引擎,版本5.5以上认的是InnoDB存储引擎

show engines; //显示存储引擎

2、索引

3、事务

   A 原子性

   C 一致性

   I 隔离性

   D 持久性

客户端向服务器端发送一个指令,MySQL服务端的连接池中一个进程与他连接。连接之后通过SQL API传输给SQL解析器进行语法、词法、语义解析,解析完成后传输给SQL优化器进行优化,生成一个执行计划。从MySQL中自带的缓存开始查询,如果查找到了,则缓存通过SQL API传递给连接池返回给客户端;如果没有查找到,则通过SET从底层磁盘开始查询,查找到了返回给SQL API。每一次的活动都会有log日志来记录

有关MySQL逻辑架构及工作流程、存储引擎、事务、索引、锁机制的总结见下篇博客:

数据库MySQL总结(二)存储引擎、索引、事务、锁

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 13
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值