其他分享
首页 > 其他分享> > 回顾总结20

回顾总结20

作者:互联网

单表查询

details

DISTINCT

数据去重

AS语句

SELECT column_name AS 别名 from 表名

统计所有学生总分
SELECT name,(chinese + english + math) FROM student
使用别名表示学生总分
SELECT name,(chinese + english + math) AS total_score 
		FROM student

查询列

SELETE * || {column1 || expression,colunb2 ...} FROM table_name

时间比较

日期类型是可以直接比较,但是需要注意格式。比如1970-1-1,要写成1970-01-01

模糊查询LIKE子句

%:表示0~多个任意字符

_:表示单个任意字符

IS NULL

判断字符串是否为null,需要使用IS,而不是=

表结构DESC

DESC 表名

ORDER BY

SELECT column1,column2... FROM 表名 ORDER BY column asc/desc
asc(ascending):升序,默认
desc(descending):降序

示例:先按照部门号升序,并且按照雇员的工资降序排列
SELECT * FROM emp ORDER BY deptno ASC , sal DESC

GROUP BY

SELECT COUNT(*) , AVG(column1),column2 FROM 表名 GROUP BY column2 HAVING ...

having后接条件语句
查询通过将column2相同属性,合并,列的和count(*),和column1的平均值。使用ORDER BY,只能有一条未被处理过的列column2

分页查询

SELECT ... LIMIT START , ROWS
表示从start+1行开始取,取出rows行

子句顺序总结

如果一条select语句,同时包含有group by,having,limit,order by,那么它们的顺序是,group by,having,order by,limit

SELECT AVG(column1),COUNT(column2),column3...FROM table 
		GROUP BY column3
		HAVING AVG(column1) > 1000
		ORDER BY COUNT(column2) DESC
		LIMIT start,rows;

函数

统计函数

  1. 统计函数count

SELECT count()|| count(列名) FROM table_name
count(
):统计满足条件的记录的行数
count(列):统计满足条件列的记录的数量,会排除null值

  1. 合计函数sum

仅对数值有用
SELECT sum(column1),sum(column2)... FROM table_name

  1. 平均函数avg

SELECT avg(column1),avg(column2)... FROM table_name

  1. 函数Max/Min

SELECT max(column1)... FROM table_name

字符串函数

  1. 字符集CHARSET(str)

SELECT CHARSET(column) FROM table_name
会将column的字符编码显示出来

  1. 字符串拼接CONCAT

SELECT CONCAT(column1,'str',column2) FROM table_name
会将column1 + str +column2 拼接成一个字符串显示出来

  1. 查询子串INSTR

SELECT INSTR('happy study java','study') FROM DUAL
会查询并返回'happy study java'中 'study'的位置
DUAL:亚元表,系统表,可以作为测试表使用

  1. 字符串大写UCASE

SELECT UCASE(column) FROM table_name
会将column列的值,转换成大写字符串

  1. 字符串小写LCASE

SELECT LCASE(column) FROM table_name
会将column列的值,转换成小写字符串

  1. 字符串快速截取LEFT、RIGHT

SELECT LEFT(column,2) FROM table_name
会将column的值从左边取2个显示

SELECT RIGHT(column,2) FROM table_name
会将column的值从右边取2个显示

  1. 字符串长度LENGTH[字节]

SELECT LENGTH(column) FROM table_name
会将column的值按字节返回长度

  1. 替换REPLACE

SELECT REPLACE (column,'MANAGER','经理') FROM table_name
会将column列下的所有'MANAGER'替换成'经理'

  1. 比较STRCMP

SELECT STRCMP(column1,column2) FROM table_name
会逐字符比较字符串column1和column2的大小,返回-1,0,1

  1. 截取SUBSTRING

SELECT SUBSTRING (column,1,3) FROM table_name
从column列第一个开始取,取三个字符显示出来。这里字符不从0开始哦。

如果第三个参数不写,就是从第二个参数位置选取后面所有字符

  1. 去空格LTRIM、RTRIM、TRIM

SELECT LTRIM('column') FROM table_name
去除column列左边的空格。RLTRM和TRIM同

数学函数

  1. 绝对值ABS

SELECT ABS(column) FROM table_name
返回column的绝对值

  1. 二进制转换BIN

SELECT BIN(column) FROM table_name
返回column的二进制形式

  1. 向上取整CEILING

SELECT CEILING(column) FROM table_name
返回column向上取整的最小整数

  1. 进制转换CONV

SELECT CONV(column,10,8) FROM table_name
将column的值从10进制转换成8进制

  1. 向下取整FLOOR

SELECT FLOOR(column) FROM table_name
返回column向下取整的最大整数

  1. 保留精度FORMAT

SELECT FORMAT(column,3) FROM table_name
将column保留3位小数(四舍五入)
该函数会将值转换成字符串,如果再跟其他值进行比较,会无结果,字符串和数字不能进行比较

  1. 转16进制HEX

SELECT HEX(column) FROM table_name
将column转换成16进制

  1. 求最小值LEAST

SELECT LEAST(column1,column2,column3,column4) FROM table_name
返回这些列中的最小值

  1. 求余MOD

SELECT MOD(column,3) FROM table_name
返回column % 3的值

  1. 随机数RAND(send)

SELECT RAND() FROM DUAL
返回一个随机数在0-1之间的数,如果给定一个种子send,会返回对应固定的一个随机数

日期函数

  1. CURRENT_DATE():当前日期
  2. CURRENT_TIME():当前时间
  3. CURRENT_TIMESTAMP():当前时间戳

INSERT INTO table_name VALUES(CURRENT_DATE());

  1. DATE(datetime):将日期时间,保留日期

SELECT id,content,DATE(send_time) FROM mes
将send_time日期时间的格式转换成了日期格式

  1. DATE_ADD():时间相加/DATE_SUB:时间相减

SELECT * FROM mes WHERE DATE_ADD(send_time,INTERVAL 10 MINUTE) >= NOW()
查询表中十分钟内的数据。即send_time + 10分钟 >= 当前时间
DATE_ADD将send_time和interval 10 minute加起来,算出来send_time十分钟后的时间,和当前时间比较

INTERVAL后面的单位可以是year、minute、second、day等

  1. DATEDIFF()时间差(单位天)

SELECT DATEDIFF('2011-11-11','1990-01-01') FROM DUAL
得出column1 - column2 的时间差(天),该值可以取负数

  1. TIMEDIFF()时间差(单位多少小时多少分钟多少秒)其他同上
  2. NOW():当前时间,年月日时分秒
  3. YERA|MONTH|DAY(datetime):取出datetime中的年或月或日
  4. UNIX_TIMESTAMP():返回的是1970-1-1到现在的秒数
  5. FROM_UNIXTIME(UNIX_TIMESTAMP() ,'%Y-%m-%d %H-%i-%s'):会将一个毫秒数,如UNIX_TIMESTAMP,转换成想要的格式

实际开发中,也会使用int保存一个nuix时间戳,然后使用from_unixtime进行转换

加密函数和系统函数

  1. USER():查看登录到mysql的有哪些用户,以及登录的IP

SELECT USER() FROM DUAL

  1. DATEBASE():查询当前使用数据库名称

SELECT DATEBASE FROM DUAL
后面的FROM DUAL都可以省略

  1. MD5(str):为字符串str算出一个通过MD5加密的16进制32位的字符串,存储在数据库中

SELECT MD5(column) FROM DUAL

  1. PASSWORD(str):加密函数

SELECT PASSWORD(column) FROM DUAL

流程控制函数

  1. IF(expr1,expr2,expr3):如果expr1为真,返回expr2,否则返回expr3
  2. IFNULL(expr1,expr2):如果expr1不为null,返回expr1,否则返回expr2
  3. SELECT CASE WHEN expr1 THEN expr2
    WHEN expr3 THEN expr4
    ELSE expr5 END:多重分支,如果expr1为真,返回expr2,如果expr3为真返回expr4,否则返回expr5

多表查询

多表查询是指基于两个和两个以上的表查询,在实际的应用中,查询单个表可能不能满足你的需求

SELECT * FROM emp , dept

多表查询

默认情况下,当两个表查询时

  1. 从第一张表中,取出一行,和第二张表的每一行进行组合,返回结果是【含有两张表的所有列】
  2. 一共返回的记录数,是第一张表的行数*第二张表的行数
  3. 这样多表查询默认处理返回的结果,称为笛卡尔集
  4. 解决这个多表的关键就是要写出正确的过滤条件where
  5. 将两个表中有关联(相同的列)连接起来,不同的过滤掉

多表查询时的条件不能少于表的个数 - 1,因为每连接一个表,就需要一个条件,否则会出现笛卡尔集

自连接

把同一张表当做两张表使用

将原表复制一份,与自己连接查询。变成了另一种多表查询

此时需要给表取别名,然后使用表别名调用列名

例:SELECT worker.ename,boss.ename
FROM emp worker , emp boss
WHERE worker.mgr = boss.empno;

子查询

查询跟SMITH相同部门的员工,首先我们要知道部门编号

  1. 单行子查询(嵌套查询)

    SELECT deptno FROM emp WHERE ename = 'SMITH'

    查询出来ename名为SMITH的部门编号deptno的值

    然后根据编号,查询表

    SELECT * FROM emp WHERE deptno = (
    SELECT deptno FROM emp WHERE ename = 'SMITH' )

  2. 多行子查询

    此时不能使用单行子查询的 = 符号了,需要使用IN(),将查询出来的多行语句,放入IN中,等待匹配

临时表查询

可以根据查询条件,返回一个表。将该表,和原表进行多表查询

例:得到各个类中,价格最高的商品
先通过GROUP BY将相同类的物品整合起来,返回一个max价格的表当做临时表

表一,将一些需要的字段选择出来,方面观察数据
SELECT goods_id,cat_id,goods_name,shop_price FROM ecs_goods
表二,物品种类和该类价格最大值的物品选出来(这里用到了GROUP BY语句)
SELECT MAX(shop_price),cat_id FROM ecs_goods GROUP BY cat_id
多表查询,将上述两表合并,然后过滤掉不需要的表项。保留物品价格最大值一样且物品种类相同的数据
SELECT goods_id,temp.cat_id,goods_name,shop_price 
	FROM ecs_goods,(
	SELECT MAX(shop_price)AS max_price,cat_id FROM ecs_goods GROUP BY cat_id)AS temp
	WHERE ecs_goods.shop_price = temp.max_price AND temp.cat_id = ecs_goods.cat_id
	

all子句使用

SELECT ename , sal , deptno FROM emp WHERE sal > ALL(
SELECT sal FROM emp WHERE deptno = 30)

查询所有薪水,大于部门编号为30的所有人,的工资条件的人

效果等同于
SELECT ename , sal , deptno FROM emp WHERE sal > (
SELECT MAX(sal) FROM emp WHERE deptno = 30)

any子句使用

同上,all是大于所有人 = 大于最大的那个人。any是大于任意一个人 = 大于最小的那个人

多列子查询

SELECT deptno,job FROM emp WHERE ename = 'SMITH';
查询部门编号和工作,名字叫SMITH的人

将上述两列一行的表,当做子查询使用

SELECT * FROM emp WHERE (deptno,job)= (
SELECT deptno,job FROM emp WHERE ename = 'SMITH')
查询部门编号和工作 和给定部门编号和工作相等的数据。相当于原来的正常的一列查询,变成了两列,但是我们还需要多一步获取匹配的两列的数据查询。

表的复制

数据复制

INSERT INTO my_table (id,ename,sal,job,deptno)
SELECT empno,ename,sal,job,deptno FROM emp
将emp表的字段,复制到my_table的各字段上。

自我复制

INSERT INTO my_table SELECT * FROM my_table
每次都将自己表中的数据翻一倍,可以快速的增加数据。当我们需要海量数据测试某个sql语句的效率时

结构复制

CREATE TABLE my_table LIKE emp
将emp的所有字段结构,赋给一个新表

清除表的重复信息

通过distinct语句,借助一个新表。

  1. 创建一个新表,和原表的结构一样,使用LIKE语句创建
  2. 将原表的数据转移到新表,加上DISTINCT语句去重
  3. 改新表表名,删旧表。或者再转移一次数据,删新表

表的并集

UNION 和 UNION ALL

UNION ALL 会将所有数据并集在一起,并且不会去重,如果有两条一样的数据,会都存在

UNION 会将所有数据并集在一起,但是会去重,不会有重复的数据

左外连接和右外连接

SELECT ... FROM 左表 LEFT JOIN 右表 ON 条件

显示所有左表信息或者右表信息。没有关联的列显示为空

表的属性

主键 Primary key

  1. primary key不能重复而且不能为null

  2. 一张表最多只能有一个主键,但可以是复合主键

  3. 主键的指定方式,有两种

    直接在字段名后指定:字段名 primary key

    在表定义最后写 primary key(列名);

  4. 使用desc 表名,可以看到primary key的情况

  5. 每个表往往都会设计一个主键

约束

外键

语法:foreign key (column1) references table_name(column2)

假定有两张表,一张大哥表,里面有大哥名,和大哥工资,大哥名是主键。一张小弟表,里面有小弟名,和小弟的工资,还有大哥名,小弟名是主键。

从表是小弟表,大哥名设为外键,这个大哥名引用至主表里的大哥名,主表是大哥表,主表可以增加大哥名的数据,但是不能删除大哥名的数据,会导致从表数据缺失。想当于是从表引用了主表的数据
从表不能增加主表大哥名没有的数据,可以删除数据

反正就是一种联系,关联起来了。从表外键的数据可以不唯一,主表必须唯一,方便来说大部分是主表的主键。引用了主表的数据,当主表数据删除时,会顺着外键(线)查到从表是否有引用的关系,如果有引用的关系,需要把该主表的关系删除才能删除从表的数据。

相当于,父类和子类,子类是依托于父类的,如果要删除父类,需要把继承该父类的子类都删除。

details

  1. 外键指向的表的字段,要求是primary key或者是unique
  2. 表的类型是innodb,这样的表才支持外键
  3. 外键字段的类型要和主键字段的类型一致(长度可以不同)
  4. 外键字段的值,必须在主键字段中出现过,或者为null【前提是外键字段允许为nill】
  5. 一旦建立主外键关系,数据就不能随意删除了
  6. 外键是从表的字段,指向主表。

索引

提高数据库性能,不用加内存,不用改程序,不用调sql,查询速度可以提高百倍千倍

CREATE INDEX empno_index ON emp(empno)

索引也是数据,会增加存储空间。且,每个索引只对应一列,其他没有索引的效果没有任何改变。

索引的代价

  1. 磁盘的占用
  2. 对表进行dml(修改、删除、添加)操作的效率有影响

索引类型

  1. 主键索引,主键自动的为主索引(primary key)
  2. 唯一索引(unique)
  3. 普通索引(index)
  4. 全文索引(fulltext)【适用于MyISAM】

开发中一般不使用mysql自带的全文索引,而是考虑使用Solr和ElasticSearch(ES)

索引操作

  1. 显示索引
    SHOW INDEX FROM table_name

    SHOW INDEXES FROM table_name

    SHOW KEYS FROM table_name

  2. 添加索引

    • 主键索引:如果将字段设为主键,则自带有主键索引。

    • 唯一索引:CREATE UNIQUE INDEX 索引名 ON 表名(字段)

    • 普通索引,方式一:CREATE INDEX 索引名 ON 表名(字段)

      方式二:ALTER TABLE 表名 ADD INDEX 索引名 (字段)

      如果某字段的值,不会重复的话,优先考虑使用unique索引,否则使用普通索引

  3. 删除索引
    DROP INDEX 索引名 FROM 表名

    • 删除主键索引
      ALTER TABLE 表名 DROP PRIMARY KEY

总结

那些字段上适合使用索引

  1. 较为频繁的作为查询条件字段应该创建索引
  2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
  3. 更新非常频繁的字段不适合创建索引
  4. 不会出现在where子句中字段不该创建索引

事务

用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败,如:转账就要用事务来处理,用以保证数据的一致性

这个事务,最好在表中开启,事务管理的是dml语句,创建表是ddl语句,先开启事务,后开启表,他是管理不到ddl语句的,并且,创建表后,每个dml语句执行时,会开启autotransaction,自动提交,创建表之前创建的事务会被顶替

事务和锁

当执行事务操作时(dml语句),mysql会在表上加锁,防止其他用户改表的数据,这对用户来讲是非常重要的。

mysql数据库控制台事务的几个操作

  1. start transaction:开始一个事务
  2. savepoint 保存点 名:设置保存点
  3. rollback to 保存点 名:回退事务
  4. rollback:回退全部事务
  5. commit:提交事务,所有的操作生效,不能回退

保存点savepoint

是事务所定义的一个在sql语句的位置,用于取消部分事务。

回退事务rollback

当结束事务时,会自动的删除该事务所定义的所有保存点。执行回退事务时(commit),通过制定保存点可以回退到指定的位置

提交事务commit

使用commit语句可以提交事务,当执行了commit语句子句后,会确认事务的变化,结束事务,删除保存点,释放锁,数据生效。当使用commit语句结束事务后,其它会话将可以查看到事务变化后的新数据(正式生效,相当于上传服务器)

details

  1. 如果不开启事务,默认情况下,dml操作是自动提交的,相当于每个dml操作都有单独的事务,开启和提交。不能回滚
  2. 如果一个事务,没有创建保存点,是默认有一个保存点在开启事务位置的,可以执行rollback,会回滚到事务开始的状态
  3. mysql的事务机制需要innodb存储引擎才能使用,MyISAM不支持
  4. 开启事务的方式有两种,还有一种是SET autocommit=off 或SET autocommit=0,相当于把单个dml事务的提交事务给关闭了

隔离级别

Mqsql隔离级别定义了事务与事务之间的隔离程度

脏读dirty read:当一个事务读取另一个事务尚未提交的修改时,产生脏读

不可重复读nonrepeatable read(这个重复是可以复现的意思,当出现了数据修改和删除,之前的数据就不可以复现了):同一查询在同一事务中多次进行,由于其他提交事务所做的修改,每次返回不同的结果集,此时发生不可重复读
这个对数据加上了行锁,对数据进行增加或者删除进行了限制,所以因其他修改会出现了幻读(不可重复读)

幻读phantom read:同一查询在同一事务中多次进行,由于其他提交事务所做的插入或者删除操作,每次返回不同的结果集,此时发生幻读
为什么修改不会幻读,因为事务锁住了所有的数据,无法对现有数据进行修改。所以不会导致这些问题,但是另一个事务可以通过插入(增加)数据的方式产生(增加类)幻读

Mysql隔离级别 脏读 不可重复读 幻读 加锁读
读未提交(read uncommitted) 不加锁
读已提交(read committed) × 不加锁
可重复读(repeatable read) × × × 不加锁
可串行化(serializable) × × × 加锁

不可重复读和幻读本质上是一样的东西。都是一个事务内两次读取同一些数据,结果不一样,都算是幻读。这个不可重复读,也太抽象了。使用行级锁可以解决更新和删除导致的幻读(不可重复读),间隙锁可以解决插入导致的幻读

可串行化,这个加锁相当于是一个单线程,同一时刻只有一个事务可以操作数据,可串行化级别的事务会等待另一个正在操作的事务结束

查询当前会话隔离级别:SELECT @@tx_isolation,此语法在mysql8.0版本中修改为了SELECT @@transaction_isolation
查询系统隔离级别:SELECT @@global.tx_isolation

设置当前会话隔离级别:SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别
设置系统隔离级别:SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别

Mysql默认的事务隔离级别是repeatable read

如果需要修改项目的隔离级别,我们可以在mysql的项目配置文件my.ini中添加transaction-isolation = repeatable-read

事务特性

  1. 原子性Atomicity

    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

  2. 一致性Consistency

    事务必须使数据库从一个一致性状态变换到另外一个一致性状态(事务结束前后,数据库的状态不会被改变。事务不会使数据库的状态改变)

  3. 隔离性Isolation

    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离

  4. 持久性Durability

    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

存储引擎

  1. Mysql的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM、innoDB、Memory等

  2. Mysql数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG_MYISAM、MYISAM、InnoDB

  3. 这六种存储引擎又分为两类,一类是"事务安全型"(transaction-safe),比如InnoDB,其余都属于第二类,称为"非事务安全型"(non-transaction-safe)【mysiam和memory】

    事务安全型指的是是否支持事务

查看存储引擎

SHOW ENGINES可以查看mysql的存储引擎

修改存储引擎

ALTER TABLE table_name ENGINE = 引擎名

主要的存储引擎特点

特点 Myisam InnoDB Memory Archive
批量插入的速度 非常高
事务安全 支持
全文索引 支持
锁机制 表锁 行锁 表锁 行锁
存储限制 没有 64TB 没有
B树索引 支持 支持 支持
哈希索引 支持 支持
集群索引 支持
数据索引 支持 支持
索引缓存 支持 支持 支持
数据可压缩 支持 支持
空间使用 N/A 非常低
内存使用 中等
支持外键 支持

MyISAM

不支持事务,也不支持外键,但是访问速度快,对事务完整性没有要求

InnoDB

提供具有提交,回滚和崩溃恢复能力的事务安全,但是比起MyISAM存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引

MEMORY

使用内存中的内容来创建表,每个MEMORY表只实际对应一个磁盘文件,MEMORY类型的表访问的非常快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉,表的结构还在。

视图

视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含字段,其数据来自对应的真实表(基表)(基表可以有多个),通过视图可以修改基表的数据 (这个视图相当于一个引用,引用了基表的部分字段)

基本语句

  1. create view 视图名 as select column1,column2 from table_name
  2. alter view 视图名 as select column1,column2 from table_name
  3. show create view 视图名
  4. drop view 视图名1,视图名2

视图还可以分离新的视图

视图的特性

  1. 安全

    一些数据表有着重要的信息,有些字段是保密的,不能让用户直接看到,这时就可以创建一个视图,在这张视图中只保留一部分字段,这样,用户就可以查询自己需要的字段,不能查看保密的字段

  2. 性能

    关系数据库的数据常常会分表存储,使用外键建立这些表的之间联系,这时,数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低,如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用(JOIN)查询数据

  3. 灵活

    如果系统中有一张旧的表,这张表由于设计问题,即将被废弃,然而,很多应用都是基于这张表,不易修改,这时就可以建立一张视图,视图中的数据直接映射到新建的表,这样,就可以少做很多改动,也达到了升级数据表的目的

MySQL用户管理

意义
需要分离不同的权限,给不同的人。

Mysql的用户数据存储在系统数据库mysql的user表中
该表的字段host:代表允许登陆的地址,localhost表示该用户只允许本机登陆,也可以指定ip地址。
user:用户名
authentication_string:密码,存储的是mysql的password函数加密后的密码

创建用户
create user '用户名' @ '允许登录的地址' identified by '密码'
创建用户,并且指定密码

删除用户
drop user '用户名' @ '允许登录的地址'

修改本机密码

SET PASSWROD = PASSWORD('要修改的密码')

修改用户密码

SET PASSWOED FOR 'root'@'localhost' = PASSWORD('要修改对应用户的密码')

用户授权

授予用户权限

grant 权限列表 on XXX.xxx to '用户名'@'登录地址' 【identified by '密码'】

  1. 权限列表,多个权限用逗号分开

    grant select on ......

    grant select , delete , create on ......

    grant all [privileges] on ......//表示赋予该用户在该对象上的所有权限

  2. 特别说明

    .:代表本系统中的所有数据库的所有对象(表、视图、存储过程)

    库.*:代表某个数据库中的所有对象(表、视图、存储过程等)

  3. identified by 可以省略,也可以写出

    如果用户存在,就是修改该用户密码

    如果用户不存在,就是创建该用户

回收用户权限

revoke 权限列表 on 库.对象名 from '用户名'@'登录位置'

权限生效指令

如果权限没有生效,可以执行下面命令(低版本可能需要这步操作)

FLUSH PRIVILEGES

details

  1. 创建用户时,如果不指定地址,默认为%,所有地址都可连接
  2. 创建用户时,可以设置把%添加至ip的任何位置,如'xxx'@'192.168.1.%',表示用户xxx在192.168.1.*的ip可以登陆mysql
  3. 删除用户的时候,如果host不是%,需要明确指定'用户'@'host值'

标签:事务,20,name,column,查询,回顾总结,table,SELECT
来源: https://www.cnblogs.com/lxycc/p/15232187.html