MySQL基础入门学习

CSDN 的小伙伴们,大家好,这是我写的第一篇博客文章,记录一下自己学习 MySQL 数据库中的一些笔记。内容有写的不对或者不太清楚的地方欢迎在评论区留言,“三人行,必有我师焉!”,让我们在学习的过程中共同进步!

什么是数据库

数据库就是用来保存和管理数据的
简单示意图:
在这里插入图片描述

MySQL数据库的安装和配置

官网下载地址:https://dev.mysql.com/downloads/
安装方式有两种:第一种是解压版(免安装),另一种是安装包(.exe文件)
添加环境变量:此电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> path
安装 mysql :mysql -install
初始化数据库:mysqld -initialize -insecure
启动 mysqld 服务:net start mysql
停止 mysqld 服务:net stop mysql
进入 mysql 管理终端:mysql -u root -p(当前密码为空)
刷新权限:flush privileges;
修改 root 用户密码:

use mysql;
update user set authentication_string=password('root的密码') where user='root' and Host='localhost';
  • 使用命令行窗口(建议以管理员身份运行)连接 MySQL 数据库(很重要
 net start mysql
 mysql -h 主机名 -P 端口号 -u 用户名 -p密码(-p密码之间不要有空格!!!)

MySQL三层结构

第一层数据库管理系统(DBMS),第二层数据库(DB),第三层数据对象(表)。

  • 数据在数据库中的存储方式
    表(table),列(column),行(row)

  • SQL语句分类
    DDL:数据定义语句。create
    DML:数据操作语句。insert,update、delete
    DQL:数据控制语句。select
    DCL:数据查询语句。grant、revoke等

创建、删除、查询和备份恢复数据库

  • 创建指令:create database db_name;
  • 删除指令:drop database db_name;
  • character set:指定字符集,默认utf8
  • collate:字符集校对规则,默认utf8_general_ci(不区分大小写),常用utf8_bin(区分大小写)
  • 显示数据库:show databases
  • 显示已创建的数据库:show database db_name
  • 删除数据库(慎用):drop database [if exists] db_name
  • 备份(在 DOS 中执行):mysqldump -u root -p -B 数据库1 数据库2 ... > 指定 sql 文件
  • 恢复(进入 Mysql 命令行再执行):source 文件名.sql
  • 备份库的表:mysqldump -u 用户名 -p密码 数据库 表1 表2 ... > 指定 sql 文件

创建表

  • 指令: create table table_name(field2 datatype, field2 datatype, ..., )character set 字符集 collate 校对规则 engine 引擎;
    field:指定列名
    datatype:指定列类型(字段类型)
    例:创建了一个 user 表
  • MySQL常用数据类型(重点)

在这里插入图片描述

  • 整型如果没有指定 unsigned ,则默认有符号
  • bit(m) 字段显示时,按照位的方式显示,查询时可以使用添加的数值
  • decimal(M, D)支持更加精确的小数位,如果 D 是 0 ,则数值没有小数点部分,M 最大是 65 ,D 最大是 30 ,如果 D 被省略,默认是 0 ,如果 M 被省略,默认是 10。 如果希望小数的精度更高,推荐使用 decimal
  • 字符串的基本使用:char(),固定长度字符串,最大 255 字节;varchar(),可变长度字符串,最大65532字节(utf8 编码最大 21844 字符(3个字节=1个字符),1-3字节用于记录字符串大小)
  • 字符串使用细节:char 和 varchar 不管是中文汉字还是英文字母,都是按照字符来存放的。char 是定长,varchar 是变长,按照实际占用空间来分配(varchar 本身还需要占用 1-3 字节来记录存放内容长度)。一般情况下,char 的查询速度比 varchar 要快。如果 varchar 长度不够用,可以考虑使用 mediumtext 或 longtext 。在存放文本时,也可以使用 text 数据类型,可以将 text 列视为 varchar 列
  • 日期类型的基本使用:在这里插入图片描述
  • 创建表练习
    在这里插入图片描述在这里插入图片描述

修改表(重点)

  • 使用 alter table 语句追加,修改,或删除列的语法:
alter table 表名 add 添加的列 datatype not null default ''
alter table 表名 modify 修改的列 datatype not null default ''
alter table 表名 drop 删除的列 datatype not null default ''

查看表的结构:desc 表名;
修改表名:rename table 表名 to 新表名;
修改字符集:alter table character set utf8;
修改列的名称:alter table 表名 change 列名 新列名 datatype not null default '';

数据库C[create]R[read]U[update]D[delete]语句(重点)

  • Insert 语句:添加数据
  • Update 语句:更新数据
  • Delete 语句:删除数据
  • Select 语句:查询数据

Insert 语句

insert into table_name (column, ...) values (value, ...);

在这里插入图片描述

insert 注意事项:

  • 插入的数据应与字段的数据类型相同
  • 数据的长度应在列的规定范围内
  • 在 values 中列出的数据位置必须与被加入的列的排列位置相对应
  • 字符和日期类型的数据应包含在单引号内
  • 列可以插入空值,前提是该字段允许为空
  • insert 语句可以同时添加多条记录
  • 如果是给表中的所有字段添加数据,可以不写前面的字段名称
  • 默认值的使用,当不给某个字段添加数据时,如果有默认值就会自动添加默认值,否则报错

update 语句

 update tb_name set col_name = expr, ...  where 条件;

在这里插入图片描述
使用细节:

  • update 语句可以用新值更新原有字段的值
  • set 子句指出要修改的列和给予的值
  • where 子句制定要更新哪些行,如果没有 where 子句,则更新所有行(慎用
  • 如果需要同时修改多个字段,可以通过 set 字段1 = 值1, 字段2 = 值2, ...

delete 语句

 delete from tb_name where 条件;	//删除表中的数据

使用细节:

  • 如果不使用 where 子句,将删除表中所有数据
  • delete 语句不能删除某一列的值
  • 使用 delete 语句仅能删除记录,不能删除表本身,如要删除表,使用 drop 语句:drop table 表名;

select 语句(重点)

select [distinct] * | { column1, column2, column3, ... } from table_name;	//distinct 关键字的作用是去重
  • select 语句中可使用表达式对查询的列进行运算
  • select 语句中可使用 as 语句:
select column_name as 别名 from 表名;
  • 在 where 子句中经常使用的运算符:
运算符用法
>、 <、 >=、 <=、 =、 <>和!=大于、小于、大于等于、小于等于、等于、不等于
between …and…显示在某一区间的值
in(set)显示在 in 列表中的值
like ’ ’ 、not like ’ ’模糊查询
is null判断是否为空
and多个条件同时成立
or多个条件任一成立
not不成立

使用 where 子句,进行过滤查询:

  • 查询姓名为张三的学生成绩
    在这里插入图片描述
    在这里插入图片描述
  • 查询英语成绩大于 90 分的同学
    在这里插入图片描述
  • 查询总分大于 200 分的所有同学
    在这里插入图片描述
    使用 order by 子句排序查询结果:
 select column1, column2, column3, ... from tb_name order by column asc | desc;
  • order by 指定排序的列,asc 升序(默认),desc 降序
  • order by 子句应位于select 语句的结尾
  • 对数学成绩排序后输出(升序)
    在这里插入图片描述
  • 对总分按从高到低的顺序输出
    在这里插入图片描述
  • 对姓张的学生是成绩总分排序输出(升序)
    在这里插入图片描述

函数(重点)

统计函数

  • count:返回行的总数
select count(*) | count (列名) from table_name where 条件;

count(*) 和 count(列名) 的区别:前者返回满足条件的记录的行数,后者统计满足条件的某列有几个,但是会排除为 null 的情况
在这里插入图片描述

  • sum:返回满足 where 条件的列的和,一般使用在数值
select sum(列名), ... from table_name where 条件;

在这里插入图片描述

  • avg:返回满足 where 条件的一列的平均值
select avg(列名), ... from table_name where 条件;

在这里插入图片描述

  • Max / Min:返回满足条件的某列的最大 / 最小值(数值范围在统计中特别有用)
 select max(列名) from table_name where 条件;

在这里插入图片描述

分组统计

  • 使用 group by 子句对列进行分组,用于对查询的结果分组统计
 select column1, column2, ... from table group by column;
  • 使用 having 子句对分组后的结果进行过滤,用于限制分组显示结果
 select column1, column2, ... from table group by column having ... ;
  • 思考:having 和 where 的区别?

字符串相关函数

charset(str)返回子串字符集
concat(str, … )连接字串
instr(str, substr)返回 substr 在 str 中出现的位置
ucase(str)转换成大写
lcase(str)转换成小写
left(str, length)从 str 中的左边起取 length 个字符
right(str, length)从 str 中的右边起取 length 个字符
length(str)统计 str 长度(按照字节)
replace(str, search_str, replace_str)在 str 中用 replace_str 替换 search_str
strcmp(str1, str2)逐个字符比较大小
substring(str, position, length)从 str 的 position 开始(从 1 开始计算),取出 length 个字符
ltrim(str) 、rtrim(str) 、trim(str)去除空格

数学函数

abs(num)求绝对值
bin()十进制转二进制
ceiling(num)向上取整,返回比 num 大的最小整数
conv()进制转换,如 conv(8, 10, 2) 得到 1000,conv(16, 16, 10) ,得到22
floor(num)向下取整,返回比 num 小的最大整数
format()保留小数位数(四舍五入)
hex()转十六进制
least()求最小值
mod()求余,如 mod(10, 3) 得到 1
rand()返回一个随机数,其范围为 [ 0, 1 ] ,如果使用 rand() ,每次返回不同的随机数;如果使用 rand(seed) ,返回一个随机数,若 seed 不变,则该随机数也不变

日期函数

current_date当前日期
current_time当前时间
current_timestamp当前时间戳
date_(datetime)返回 datetime 的日期部分
date_add(date2, interval d_value d_type)加上一个时间,interval 后面的 d_type 可以是年、月、日、时、分、秒
date_sub()减去一个时间
datediff(date1, date2)两个日期差(结果是天),date1 - date2
timediff(time1, time2)两个时间差(多少小时多少分钟多少秒)
now()当前时间,年月日时分秒
year month day date(datetime)当前的年或月或日
unix_timestamp()返回的是 1970-1-1 00:00:00 到现在的秒数
from_unixtime()把一个 unix_timestamp 秒数,转成指定格式的日期,%Y-%m-%d %H:%i:%s

在实际开发中,可以存放一个整数表示时间,通过 from_unixtime 转换,经常使用 int 来保存一个 unix 时间戳

加密函数和系统函数

user()查询用户
datebase()查询当前使用的数据库名称
md5(str)为字符串算出一个 md5 32 的加密字符串,常用于(用户密码)加密。在数据库中存放的是加密后的密码
password(str)加密函数,MySQL 数据库的用户密码使用 password 函数加密的

MySQL 5.7.9 版本后废除了 password 字段和 password() 函数

流程控制函数

if(expr1, expr2, expr3)如果 expr1 为真,则返回 expr2 ,否则返回 expr3
ifnull(expr1, expr2)如果 expr1 不为空,则返回 expr1 本身,否则返回 expr2
select case when expr1 then expr2 when expr3 then expr4 else expr5 end;如果 expr1 为真, 则返回 expr2,如果expr3 为真,则返回 expr4,否则返回 expr5 ,结束

判断是否为 null ,要使用 is null ;判断不为空,使用 is not null

内连接

查询增强

  • 在 mysql 中,日期类型也可以直接比较,但要注意日期格式
    在这里插入图片描述
    在这里插入图片描述
  • like 操作符:% 表示 0 到多个任意字符,_ 下划线表示单个任意字符
    在这里插入图片描述
  • 判断为空使用 is null
  • 查询表结构:desc 表名;
    在这里插入图片描述

分页查询

  • 基本语法:select ... limit start, rows; //表示从 start + 1 行开始取,取出 rows 行,start 从0 开始计算。公式,limit 每页显示记录数*(第几页 - 1),每页显示记录数
    在这里插入图片描述

分组增强

  • 使用分组函数和分组子句 group by
  • count() 只统计非空字段

多字句查询

  • 数据分组的总结:如果 select 语句同时包含有 group by,having,limit,order by,那么它们的顺序是group by,having,order by,limit,即分组 -> 过滤 -> 排序 -> 分页查询

外连接(重点)

多表查询

  • 笛卡尔积
    多表查询默认处理返回的结果成为笛卡尔积,假设是有两张表,返回的结果就是两张表的行数之积
    解决多表的关键是要写出正确的过滤条件 where 子句
    表名.列名:指定显示某个特定表的列
  • 自连接
    指在同一张表的连接查询,将同一张表当做两张表
    特定的:1、同一张表当做两张表使用
    2、需要给每张表都取别名,表别名和列别名
  • 多行子查询
    子查询是指嵌入在其它 SQL 语句中的 SQL 语句,也叫嵌套查询
    单行子查询是指只返回一行数据的子查询语句
    多行自查询是指返回多行数据的子查询,使用关键字 in
  • 子查询临时表
    把子查询当做临时表使用
  • all 和 any 操作符
  • 多列子查询
    指返回多个数据的子查询语句
    基本语法:select ... from ... where (字段1, 字段2, ... ) = (select 字段1, 字段2, ... from ...);
  • 表复制和去重
    指自我复制数据,有时为了对某个 SQL 语句进行效率测试,需要海量数据时,可以用表复制的方法为表创建海量数据
    基本语法:insert into 表1 (字段1, 字段2, ... ) select 字段1, 字段2, ... from 表2;
insert into 表1 select * from 表1;

思考题:如何删除一张表中的重复记录?(即如何去重)

  • 合并查询
    合并多个 select 语句的结果,可以使用集合操作符号 union,union all
    1.union all :用于取得两个结果的并集,当使用该操作时,不会取消重复行
    2.union :与 union all 的区别是,会自动去掉结果集中的重复行
  • 外连接
    1.左外连接(左侧的表完全显示)
    基本语法:select ... from 表1 left jion 表2 on 条件; //表1 就是左表
    2.右外连接

MySQL约束

约束用于确保数据库的数据满足特定的规则
在 mysql 中,约束包括:not null,unique,primary key,foreign key 和 check 5种

  • primary key(主键)
    1.基本使用:字段名 字段类型 primary key
    2.用于唯一标识表行的的数据,当定义主键约束后,该列不能重复且不能为空
    使用细节:
    1.主键不能重复且不能为空
    2.一张表中最多只能有一个主键,但可以是复合主键,primary(字段1, 字段2)
    3.主键的指定方式有两种:① 直接在字段后指定;② 在表定义后写 primary key(列名)
    4.desc 表名,可以看到 primary key 的情况
    5.在实际开发中,每个表往往都会设计一个主键
  • not null(非空)
    基本使用:字段名 字段类型 not null
  • unique(唯一)
    基本使用:字段名 字段类型 unique
    使用细节:
    1.如果没有指定 not null ,则 unique 字段可以有多个 null
    2.如果一个列(字段)是 unique not null ,使用效果等价于 primary key
    3.一张表可以有多个 unique 字段
  • foreign key(外键)
    用于定义主表和从表的关系:外键约束要定义在从表上,主表必须具有主键约束或 unique 约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在
    基本使用:foreign key (本表字段名) references 主表名(主键名或 unique 字段名)
    使用细节:
    1.外键指向的表的字段,必须要求是 primary key 或 unique 字段
    2.表的类型是 innodb,才支持外键
    3.外键字段的类型要和关联的主键字段的类型一致,长度可以不同
    4.外键字段的值,必须在主键字段中出现过,或者为 null
    5.一旦建立了主外键的关系,不能随意删除数据
  • check
    用于强制行数据必须满足的条件
    oracle 和 SQL server 均支持 check,但是 mysql 5.7 版本目前不支持 check,只做语法校验,但不会生效
    mysql 8.0 及以上版本可以支持 check
    在 mysql 中实现 check 的功能,一般是在程序中控制,或通过触发器完成
  • 自增长
    介绍:在某站表中,存在一个 id 列(整数型),希望在添加记录时该列的值从 1 开始自动的增长
    基本使用:字段名 整型 primary key auto_increment
    使用细节:
    1.一般来说,自增长是和 primary key 配合使用的
    2.自增长也可以配合 unique 使用
    3.自增长修饰的字段为整数型
    4.自增长默认从 1 开始,也可以通过指令修改:alter table 表名 auto_increment = 新的开始值;
    5.如果你添加数据时,给自增长字段(列)指定了值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据

MySQL索引(重点)

  • 介绍
    mysql 索引有 4 种类型:主键索引、唯一索引、普通索引、全文索引
    索引的优点:提高数据库性能;大幅提高查询速度
    缺点:索引本身也会占用内存空间,用空间换取时间
    基本使用:create index 索引名称 on table(字段);
    创建索引后,只对创建了索引的列有效
  • 索引机制
    1.为什么要创建索引?
    当没有索引时,会进行全表扫描,查询速度很慢
    2.使用索引为什么会快?
    创建索引后会形成一个索引的数据结构——二叉树
    3.思考:如果比较了 30次,覆盖表的范围是 2^30 次方
    4.索引的代价:磁盘空间占用;对删除、修改、插入语句效率有影响;
    5.在实际开发中,使用查询语句远远大于添加、修改、删除
  • 创建索引
    在实际开发中,普通索引(index)使用的最多,一般不使用 mysql 自带的全文索引,而是使用全文搜索(Solr)和 ElasticSearch(ES)
  • 索引使用
    1.添加索引
    添加普通索引有两种方式:create index 索引名称 on 表名(列);
alter table 表名 add index 索引名称 ()

添加唯一索引:create unique index 索引名称 on 表名(列);
添加主键索引:alter table 表名 add primary key (主键列);
思考:如何选择添加唯一索引和主键索引?
如果某列的值是不会重复的,则优先考虑使用 unique 索引
2.删除索引

drop index 索引名称 on 表名;

删除主键索引:alter table 表名 drop primary key;
3.修改索引
方法:先删除索引,再添加新的索引
4.查询索引

show index from 表名;
show indexes from 表名;
show keys from 表名;
desc 表名;
  • 创建索引规则
    哪些列上适合使用索引?
    1.较频繁的作为查询条件的字段应该创建索引
    2.唯一性太差的字段不适合单独创建索引
    3.更新非常频繁的字段不适合创建索引
    4.不会出现在 where 子句中的字段不应该创建索引

MySQL事务

  • 什么是事务
    1.概念:事务是用于保证数据的一致性的,它由一组相关的 dml 语句组成,该组的 dml 语句要么全部成功,要么全部失败。如转账就要用事务来处理,用以保证双方金额的一致性
    2.事务和锁:当执行事务操作时,mysql 会在表上加锁,防止其他用户修改表的数据
  • mysql 数据库控制台事务的几个重要操作:
    1.start transcation 开始一个事务
    2.savepoint 设置保存点
    3.rollback to 回退事务
    4.rollback 回退全部事务,直接返回事务开始的状态
    5.commit 提交事务,所有的操作生效,不能回退
  • 事务操作
    1.回退事务:保存点是事务中的点,用于取消部分事务。当结束事务时(commit),会自动的删除该事务所定义的所有保存点;当执行回退事务时,通过指定保存点可以回退到指定的地方
    2.提交事务:使用 commit 语句提交事务,当执行 commit 语句后,会确认事务的变化,结束事务,删除保存点,释放锁,数据生效
  • 事务注意事项:
    1.如果没有开启事务,默认情况下,dml 操作是自动提交的,不能回滚
    2.如果开启了一个事务,但没有设置保存点,若执行 rollback 默认回滚到事务开始的状态
    3.可以在事务未提交前,根据实际需求设置多个保存点
    4.可以在事务未提交前,执行 rollback to 选择回退到哪个保存点
    5.innodb 存储引擎支持事务,但myisam 不支持
    6.开始一个事务:start transcation;set autocommit=off;
  • 隔离级别
    1.多个连接开启各自事务操作数据库中的数据,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性
    2.如果不考虑隔离性,可能会引发如下问题:脏读、不可重复读、幻读现象
    3.mysql 4种隔离级别:
脏读(dirty read)不可重复读(nonrepeated read)幻读(phantom read)
读未提交(read uncommitted)
读已提交(read committed)
可重复读(repeatable read)
可串行化(serializable)

mysql 隔离级别定义了事务与事务之间的隔离程度
脏读(dirty read):当一个事务读取另一个事务尚未提交的修改,会产生脏读
不可重复读(nonrepeated read):同一查询在同一事务中多次进行,由于其它提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读
幻读(phantom read):同一查询在同一事务中多次进行,由于其它提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读

  • 查看隔离级别
    mysql 5.7 版本:
    1.查看当前会话隔离级别:select @@tx_isolation;
    2.查看系统当前隔离级别:select @@global.tx_isolation;
    3.设置当前会话隔离级别:set session transcation isolation level 要设置的级别;
    4.设置系统当前隔离级别:set global transcation isolation level 要设置的级别;
    mysql 8.0 版本:
    查看隔离级别:select @@transcation_isolation;
    注:mysql 默认的事务隔离级别是:repeatable read 可重复读
  • 事务ACID
    1.原子性(Atomicity)
    指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
    2.一致性(Consistency)
    事务必须使数据库从一个一致性状态,变换到另外一个一致性状态
    3.隔离性(Isolation)
    多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事物的操作数据所干扰,多个并发事务之间要相互隔离
    4.持久性(Durability)
    指一个事务一旦被提交,它对数据库中的数据的改变就是永久性的

MySQL存储引擎

  • 基本介绍
    1.MySQL 的表类型由存储引擎决定,主要包括 myisam, innodb, memory
    2.MySQL 数据库表支持 6 种存储类型:CSV, MEMORY, ARCHIVE, MRG_MYISAM, MYISAM, InnoDB
    3.这 6 种又分为两类,一类是“事务安全型”,比如 innodb ,其余都属于第二类,称为“非事务安全型”,如 myisam 和 memory
  • 细节说明
    1.Myisam 不支持事务,也不支持外键,但其访问速度块,对事务完整性没有要求
    2.InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但相比 Myisam ,InnoDB 写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引
    3.Memory 使用存放在内存中的内容创建表,每个 Memory 表对应一个磁盘文件,Memory 类型的表访问速度很快,因为它的数据是放在内存中的,并且默认使用哈希(hash)索引。但是一旦 MySQL 服务关闭或重启,表中的数据会丢失掉。表的结构还在
  • 如何选择表的存储引擎
    查看所有的存储引擎:show engines;
    innodb:支持事务,支持外键,支持行级锁
    myisam:添加速度快,不支持事务和外键,支持表级锁
    memory:数据存储在内存中,执行速度很快(没有 io 读写),默认支持哈希索引
    1.如果你的应用不需要事务,处理的只是基本的 CRUD 操作,则选择 MyISAM
    2.如果需要支持索引,选择 InnoDB
    3.Memory 存储引擎是将数据存储在内存中,由于没有磁盘 i/o 的等待,速度很快,但由于是内存存储引擎,所做的任何修改在 MySQL 服务器重启后都将消失
    修改存储引擎:alter table 表名 engine=存储引擎;

MySQL视图

  • 基本概念
    1.视图是一个虚拟表,其内容由查询定义,跟真实的表一样,视图包含列,其数据来自对应的真实表(基表)
    2.视图和真实表(基表)存在映射关系
    3.通过视图可以修改基表的数据,反过来,基表的改变,也会影响到视图的数据
  • 视图的基本使用
    1.创建视图:create view 视图名 as select语句;
    2.更新成新的视图:alter view 视图名 as select语句;
    3.查看创建视图的指令:show create view 视图名;
    4.删除视图:drop view 视图名;
  • 使用细节
    1.创建视图后,到数据库查看,对应视图只有一个视图结构文件(视图名.frm)
    2.视图的数据变化会影响到基表,基表的数据变化也会影响到视图(增,删,改)
    3.视图中可以再使用视图,数据仍然来自基表
  • 视图最佳实践
    1.安全
    2.性能
    3.灵活

MySQL管理

  • mysql 用户
    mysql 中的用户,都存储在系统数据 mysql 中的 user 表中
    user 表的重要字段说明:
    1.host:允许登录的位置,localhost 表示用户只允许本机登录
    2.user:用户名
    3.authentication_string:加密后的密码
  • 创建新的用户
create user '用户名' @'ip地址' identified by '密码';
  • 删除用户
drop user  '用户名' @'ip地址';
  • 登录

不同的数据库用户,登录到数据库管理系统(DBMS)后,根据相应的权限,可以操作的数据库和数据对象(表,视图,触发器)都不相同

  • 用户修改密码
    1.修改自己的密码:set password = password('密码');
    2.修改其他人的密码,需要权限:
set password for  '用户名' @'ip地址' = password('密码');
  • 给用户授权
    基本语法:grant 权限列表 on 库.对象名 to '用户名' @'ip地址' [ identified by '密码' ]
    说明:
    1.权限列表,多个权限用逗号分开
grant select on ...
grant select delete, create on ...
grangt all on ...	//表示赋予该用户在该对象上的所有权限

2.库.*:表示某个数据库中的所有数据对象(表,视图等)
3.identified by 可以省略,也可以写出
如果用户存在,就是授权的同时修改该用户的密码
如果该用户不存在,就是授权的同时创建该用户

  • 回收用户授权
    基本语法:revoke 权限列表 on 库.对象名 from '用户名' @'登录位置';
  • 权限生效指令
    如果权限没有生效,可以执行下面的指令
    基本语法:flush privilege;
  • 使用细节
    1.在创建用户时,如果不指定 host ,则为 % ,% 表示所有的 ip 都有连接权限
    2.也可以指定某个 ip 段的用户有连接数据库权限
    3.在删除用户时,如果 host ,如果 host 不是 %,需要明确指定 '用户名' @'host 值'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 如果你是零基础入门MySQL,以下是一些基本的操作指南: 1. 首先,你需要登录MySQL,使用以下命令: mysql -u 用户名 -p 输入密码后就可以登录成功。 2. 选择要使用的数据库,使用以下命令: use 数据库名 这样你就可以在该数据库中进行操作。 3. 创建表格,使用以下命令: CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据类型, ... ); 4. 插入数据到表格中,使用以下命令: INSERT INTO 表名 (列名1, 列名2, 列名3, ...) VALUES (值1, 值2, 值3, ...); 例如,插入一条数据到runoob_tbl表中: INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 PHP", "菜鸟教程", NOW()); 5. 查询表格中的数据,使用以下命令: SELECT 列名1, 列名2, ... FROM 表名; 例如,查询runoob_tbl表中的所有数据: SELECT * FROM runoob_tbl; 这样就可以得到表格中的所有数据。 希望这些信息对你有所帮助。如果你有更具体的问题,可以继续提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL基础入门教程(一)](https://blog.csdn.net/weixin_44006731/article/details/128616775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值