mysql基本操作语句

修改数据库密码:

alter user root@"localhost" identified by '密码';

登录 mysql:

mysql -uroot -p;

查看所有数据库:

show databases;

使用某数据库:

use 数据库名称

查看数据库版本:

mysql - V;

创建数据库:

create database 库名[default charset ="utf8mb4"];

删除数据库:

drop database 库名;

创建表:

create table 表名(

列名  数据类型   约束条件,

列名  数据类型   约束条件,

列名  数据类型   约束条件

.....     .....            ....

);

约束条件:

主键约束:  primary key:不能重复,不能为空,目的是为了做唯一标识符

                    主键自增:auto_increment

外键约束:  foreign key:主要目的是为了描述不同表之间的关联关系(多表关联查询的时候再说)

唯一约束:  unique:该字段的值不能重复

默认约束:  default:如果插入时,值为空,则可以使用默认值填充

检查约束:  check:在SQL标准中,检查约束是存在的,但是注意:  MySQL在8.0之前是默认不支持检查约束的!!!  8.0之前,定义是添加检查约束,不报错,也不生效  8.0之后,开始支持检查约束 非空约束:  必须要有值,不能为空

约束示例:

8.0检查约束:

gender char(2) check( gender in("F", "M"))

8.0之前的检查约束:

gender enum("F", "M")

删除表:

drop table 表名;

授权:

grant 语句:

在8.0之前,grant集授权、创建用户、修改密码、修改用户远程登录等等功能与一体的命令
在8.0之后,grant主要用来授权,其他功能弱化了

8.0之前:grant [all|select, create……] on 数据库.* to 用户名称@'localhost' identified by '密码';

grant 后为 所受权利 ,所有权利则用 all ,也可以是单个或者多个权利   如(查找、创建、删除...) on 后为在哪个数据库  

例如:grant all on db_web.* to xxx@"localhost" identified by "xxxx";

          意为:给xxx用户了数据库db_web.* 的所有权力,密码为“xxxx”

          grant select, update, insert, delete, create,drop on db_web.* to xxx@"localhost" identified by "xxxx";

           意为:给xxx用户了数据库db_web.* 的select, update, insert, delete, create,drop 权利,密码为“xxxx”

8.0 之后:必须先创建用户,再授权    
    create user xxxx@"localhost" identified by "xxxxx";
    # 赋权
    grant all on db_web.* to xxxx@"localhost" ;

权利回收:revoke

revoke  权利  on 数据库.*  to 用户名称@'localhost'

添加数据:

insert into 表名称[(field1,……fieldn)]  value/values(val1,……valn);

给表中所有列添加:

insert into 表名称   values(" 对应值","对应值 ","对应值 ", ......);

给表中某几列添加:

insert into 表名称(“列名”,“列名”,“列名”)values("对应值","对应值","对应值")

删除数据:

delete from table_name [where 条件];

truncate 清空表    ,非常危险,该操作不经过数据字典,

更新、修改(update):

update 表名称 set 字段1=新值 [,……fieldn] [where 条件];

替换(replace):

replace into 表名称[(field1,……fieldn)]  value/values(val1,……valn);

替换的时候,会判断数据是不是已经存在了(看主键是否相等or唯一约束是否相等),

如果已经存在了,则更新数据(delete,insert)

如果不存在,则插入数据(insert)

查询(select):

select *(全部)/列名 from 表名称;

select 字段 from 表 [where 条件 ];

关系运算符:

>, <  ,=,  >=,  <= ,!= 或者( <> ),

 <=>    :
        1、可以当做 = 来使用
        2、这个符号还可以判断null值     

  多条件同时使用使用(逻辑运算符):
    and
    or
    not

范围:
    between  and (等同于 >=   and  <= )

 列举
    in 语法  in(值1, 值2……)
    not in(值1, 值2……)

注意:SQL中null值不能使用等于判断 

要使用is判断null 

is null 

is not null

模糊查询:

select * from tt where name like "z%";        # %类似于正则中的.*,表示匹配任意

表示以z开头;

select * from tt where name like "_h%";        # _该符号表示占据一个位置

表示第二个字符是h

select * from tt where name like "%h%";        # 包含h符号

表示含有h;

注意:模糊查询,效率非常低,大概率会全表扫描,请慎用!!!
    
在全文检索的时候,一般使用专门的技术进行全文检索
    (solr|Solr、es|Elasticsearch)

聚合函数:

count(*)|count(列名)|count(1)    统计数量;

count(*):不会忽略为null的值

count(1):不会忽略为null的值

区别:

若列名为主键,count(列名)会比count(1)快  

若列名不为主键,count(1)会比count(列名)快  

若表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  

若表有主键,则 select count(主键)的执行效率是最优的  

若表只有一个字段,则 select count(*)最优。

count(列名):不统计为null的值

sum(列名)                    # 求和 

max(列名)                    # 求最大值

min(列名)                    # 求最小值 

avg(列名)                    # 求平均值

分组查询:
   
 是一种统计的操作:将结果中值相同的默认是一个组,也允许聚合函数参与统计,

 注意,如果要查询普通(不是聚合函数),该字段必须参与分组

 select gender, count(*) from tt group by gender;

   # 多字段参与分组,则需要逗号写上

 select age, gender, count(*) from tt group by gender , age;

分组后筛选:

第一种方式(子查询):
        select * 
        from 
          (select age, gender, count(*) as count 
           from tt 
           group by gender , age
           ) as t1
        where count > 3;

    第二种方式:
        having子句必须配合分组
        表示的分组后的筛选!!
        SELECT age, gender, count(*) as count 
        FROM tt 
        WHERE age > 10  
        GROUP BY gender , age 
        HAVING count(*) > 3;

排序:

order by 字段  asc(升序) desc (降序)

注意(默认为升序,所以升序可以不写);

分页:

前端分页:

数据流非常小的情况下,可以使用;

将数据一次全部取出,在通过JavaScript等技术,实现分页效果

后端分页:

在查询时候,只查询当前页面需要的数据出来

limit 关键字完成

limit 数字        # 截取对应的数量数据

limit 数字1, 数字2    # 表示从数字1开始查询,每次查询数字2个数据的量

分页时的四个变量:
        每页展示的数量(pageSize):    # 一般是程序员定

当前页(pageNow)        # 用户来决定,通过用户点击对应的a链接来决定

总数量(allCount)        # 查询出来 count(*)

总页数(pageCount)        # 算出来的

 limit offset , pageSize;

 limit (pageNow - 1) * pageSize, pageSize;

别名:

字段 as 别名

字段 别名        # 省略as关键字

查询的顺序:

where子句是第一个执行:第一层条件的筛选,执行在分组之前

 select 查找字段……from 表…

[where 条件]

[group by ……]

[having ……]

[order by ……

][limit 分页]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值