首页 > 自考资讯 > 高考百科

常用SQL语句,看这篇就够了

小条 2024-10-22

305eba56e1564741846423f769a2d67d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1730172057&x-signature=j6%2BgtpzofzNBPDH0a%2FuTR0OgYCQ%3D

一、摘要

本文主要基于MySQL数据库,详细介绍了常用的SQL语句。由于篇幅较长,难免有一些遗漏。欢迎广大网友批评指正。

具体内容主要包括以下几个部分:

库操作表操作数据操作运算符查看函数存储过程触发器序列用户权限

二、库操作

2.1、新增库

创建数据库相对简单,只需在创建时直接指定字符集和排序规则即可。

如果不存在则创建数据库`库名称` 默认字符集utf8mb4 COLLATE utf8mb4_unicode_ci; 示例:

CREATE DATABASE IF NOT EXISTS test_db default charset utf8mb4 COLLATE utf8mb4_unicode_ci;

2.2、修改库名

有三种方法可以更改MyISAM 存储引擎的数据库名称。对于Innodb,直接进入数据库目录mv。它根本不起作用,我收到一条“表不存在”消息。

方法一

RENAME 数据库olddbname TO newdbname 此语法在mysql-5.1.7 中添加,并在mysql-5.1.23 中删除。由于存在数据丢失的风险,官方不建议这样做。

方法二

思路是先创建一个新库,然后将旧库中的数据导入到新库中,完成库重命名。

1、创建需要重命名的数据库。 2、Mysqldum导出要重命名的数据库。 3、删除原来的旧数据库(确定是否真的需要) 这种方法当然安全,但是如果数据量很大的话,时间会比较长。同时,还必须考虑磁盘空间等硬件成本。

例子:

# 将db1库备份到db1.sql文件中mysqldump -u root -p db1 /usr/db1.sql; # 将备份文件导入到新库中db2mysql -u root -p db2 /root/db1.sql;删除旧库(如果确实需要) DROP DATABASE db1;

方法三

直接运行shell 脚本。

#!/bin/bash#假设db1数据库名称更改为db2#。 MyISAM可以直接修改数据库目录中的文件。 mysql -uroot -p123456 -e '如果数据库不存在则创建db2'list_table=$(mysql -uroot -p123456 -Nse '从information_schema.TABLES 中为$list_table 中的表选择table_name (TABLE_SCHEMA='db1'') for mysql -uroot -p123456 -e '将表从db1.$table 重命名为db2.$table'done 其中p123456,p 是密码缩写,123456 是数据库密码代表一个值。

2.3、删除库名

删除库相对容易。直接删除就可以了。

删除数据库db1;

2.4、使用库

使用db2;

三、表操作

3.1、创建表

创建表ts_user (id bigint(20) unsigned NOT NULL COMMENT 'encoding', name varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''评论“用户名”, mobile varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' '' COMMENT '手机号码', create_userid varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_userid var char ( 32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新者', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY idx_create_time (create_time) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

3.2、修改表名

ALTER TABLE ts_user RENAME TO ts_new_user;

3.3、删除表

3.4、字段操作

显示ts_user 中的所有列;为ts_user 列添加性别tinyint (4 ) NOT NULL DEFAULT '1' COMMENT '性别,1,男,2,女' AFTER mobile;

3.4.1、查询表字段

ALTER TABLE ts_user 列mobile varchar(30) NOT NULL DEFAULT '' COMMENT '用户的手机号码';010 - 1010 ALTER TABLE ts_user 删除列性别

3.4.2、新增字段

3.4.3、修改字段

SHOW INDEXES FROM ts_user;

3.4.4、删除字段

alter table ts_id index idx_id (id);user add unique idx_id (id)

3.5、索引操作

我会的。 alter table ts_user add Primary key idx_id (id) ;

3.5.1、查询表索引

alter table ts_user add index idx_id_name (id,name) ;

3.5.2、新增普通索引

table alter ts_user add fulltext idx_id (id) ;

3.5.3、新增唯一索引

# 删除常规索引. Index idx_id;# 删除主键索引。删除表ts_user。

3.5.4、新增主键索引

3.5.5、新增多列索引

从ts_user 中选择*;

ts_user; select ID, name from

3.5.6、新增全文索引

,并在查询中select ID, name from ts_user (name='张三', 或者select ID, name from ts_user in query, where name=select id, name from ts_user where name in ('张三', '李四')like模糊查询(%为通配符) select id, name from ts_user where name like 'Zhang %' is notempty 查询从ts_user中选择id, name (name is not null) 。 区间字段查询从ts_user中选择id、name、age。年龄=18 岁,年龄=30 岁。从ts_user 中选择id、姓名、年龄。年龄范围为18-30岁。请选择一个名称。 (casewhen range=90 then 'excellent' when 80=range 90 then 'good' when 80scope=70 then 'medium'else 'bad'end) as Judgefrom ts_user

3.5.7、删除索引

left join query select tu.id, tu. name ,tr.role_namefrom ts_user tuleft join ts_role tr on tu.id=tr.user_id 右连接查询select tu.id, tu.name,tr.role_namefrom ts_user turight join ts_role tr on tu.id=tr.user_id 内连接查询select tu .id, tu.name,tr.role_namefrom ts_user tuinner join ts_role tr on tu.id=tr.user_id 全联接查询select tu.id, tu.name,tr.role_namefrom ts_user tufull join ts_role tr on tu.id=tr user_id

四、数据操作

统计学生总数select count(id) from ts_user 查询最大学生年龄select max(age) from ts_user 查询最大学生年龄select min(age) from ts_user 查询各项总和学生成绩select id, sum (score) from ts_user group by id 查询每个学生成绩的平均分select id, avg(score) from ts_user group by id 平均分大于100的学生查询信息select id, avg( Score) avg(score) from ts_user group by ID with 100

4.1、查询操作

4.1.1、单表查询

INSERT INTO ts_user(id, name) VALUES ('1', '张三');010 -1010 INSERT INTO ts_user(id, name) VALUES( '1', '张三'),('2', '李四'),('3', '王五');

4.1.2、关键字查询

update ts_user set name='李四1',age=' 18' where id='1'

4.1.3、连表查询

# 删除表中所有内容delete from ts_user # 根据判断条件删除delete from ts_user where id='1'

4.1.4、分组查询

MySQL主要有以下操作符:

算术运算符比较运算符逻辑运算符按位运算符

4.2、插入操作

运算符说明示例+ 加法选择1+2;结果为3 - 减法结果为6/除法如果选择6/3,则结果为2%,则剩余10%3。

注意:对于除法和取模运算,如果除数为0,则为非法除数,返回结果为NULL。

4.2.1、单列插入

比较运算符经常用在SELECT 语句的条件语句中。您可以使用这些比较运算符来确定表中的哪些记录符合您的条件。如果比较结果为true,则返回1;如果为false,则返回0;如果比较结果不确定,则返回NULL。

运算符解释示例=等于select * from t_user where user_id=1 查询用户ID 1 的信息!=不等于select * from t_user where user_id !=1 select * from t_user where 查询用户ID 大于user_id 1 的信息用户ID 大于1=大于select * from t_user where user_id=1 查询用户ID 大于等于1 的信息select * from t_user where user_id 查询用户ID 小于1 的信息大于1=大于select * from t_user where user_id=1 查询ID小于等于1的用户信息BETWEEN AND select * from t_user where user_id Between 1 to 100 查询ID在1到100之间的用户信息。 user_id=1 和user_id=100 并且不是两个值select * from t_user where user_id is not in the range 1 to 100 user_id is not in the range 1 to 100, as is user_id 1 and user_id 100IN 查询用户ID信息1 or 2 select * from t_user where user_id in ('1','2') 查询用户ID 1或2的信息NOT IN 不在集合中select * from t_user where user_id not in ('1', '2') % 表示0 个或多个匹配,例如模糊匹配来查询除用户ID 1 和2 之外的信息。 select * from t_user where user_name like '%张%' 查询用户名包含的信息。张IS NULL为空。 select * from t_user where user_name is null 查询包含用户名的信息。 isempty IS NOT NULL is notempty select * from t_user where user_name not is null 查询username不为空的信息

注意:mysql不限制IN语句中参数的数量。但整个SQL语句的长度是有限制的,不能超过4M。

4.2.2、多列插入

逻辑运算符用于确定表达式是真还是假。如果表达式为true,则结果为1。如果表达式为假,则结果为0。

运算符说明示例NOT 或! 逻辑NOT 不为1。结果是0AND。 逻辑AND 选择2 或0。结果是1XOR。 逻辑异或选择1。

4.3、修改操作

位运算符是执行二进制计算的运算符。在按位运算中,首先将操作数转换为二进制,然后再执行按位运算。接下来,将结果从二进制转换为十进制。

运算符说明示例按位与select 35; 按位异或select 3I5; 结果为7^ 按位异或select 3^5; 按位取反select ~18446744073709551612; 结果为3 位右移选择31结果是1 位左移选择31。

4.4、 删除操作

优先级(从高到低) 运算符1!2-(减号)、~(按位求反) 3^(按位异或) 4*,/(DIV),%(MOD)5+ ,-6,78I9=(比较运算),=,=,=,=,IN,IS NULL,LIKE,REGEXP10BETWEEN AND,CASE,WHEN,THEN,ELSE11NOT12,AND13XOR14II,OR15=(赋值运算),=

注:如果无法确定优先级,请使用括号()更改优先级,以明确计算过程。

五、运算符

View是一个虚拟表。这是一个逻辑表,本身不包含任何数据。作为select 语句保存在数据字典中。

5.1、算术运算符

创建[或替换] [算法={UNDEFINED | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] 检查选项]

OR REPLACE:表示替换现有视图。 ALGORITHM:表示视图选择算法。默认算法是UNDEFINED:MySQL自动选择要使用的算法。 temptable 临时表select_statement:代表一条select语句。 [CASCADED | LOCAL ] CHECK OPTION]:表示视图更新时保证在视图的权限范围内。 Cascade:表示更新视图时必须满足视图和表的关联条件。 met.local:表示定义的条件在视图更新时以基本形式可用。

创建视图创建视图名称[(column_list)] 作为带有检查选项的select 语句。

create view v_user(username,age)asselect user_name,age from t_userwith check option;

5.2、比较运算符

使用show create view 语句显示视图信息。 show create view v_user; 创建视图后,您可以像常规表一样使用它。视图主要用于select * from v_user 等查询;

5.3、逻辑运算符

删除视图是指删除数据库中已存在的视图。仅删除视图定义,不删除任何数据。这意味着基表没有移动。

DROP VIEW [IF EXISTS] view_name [, view_name] . 删除示例:

删除视图IF EXISTS v_user;

5.4、位运算符

5.5、运算符优先级

函数说明实例char_length(s) 返回字符串的字符长度sselect char_length('hello') as content;concat(s1,s2.sn) 连接字符串s1, s2等到一个字符串中select concat('hello ', 'world') as content;format(x,n) 将数字x 转换为小数位格式为n 位,舍入最后一位数select format (500.5634, 2) ) 作为内容; lower(s) 将所有字符更改为小写select lower('HELLO'); 当前返回日期和时间select current_timestamp(); 格式化时间或日期select DATE_FORMAT( current_timestamp(),'%Y- %m-%d %H:%i:%s');IFNULL(v1,v2) 如果v1 的值不为NULL,则返回v1,否则返回v2select IFNULL(null ,'hello word ');

六、视图

6.1、创建视图

CREATE FUNCTION fn_name(func_parameter[,])RETURNS type[characteristic.]routine_body 参数说明:

fn_name:自定义函数名func_parameter: param_name typetype: mysql 支持的任何类型characteristic: LANGUAGE SQLroutine_body: 函数体

6.2、查看视图

ALTER FUNCTION fn_name [characteristic.] 参数说明:

fn_name:自定义函数名称func_parameter: param_name typecharacteristic: LANGUAGE SQL

6.3、删除视图

DROP FUNCTION [IF EXISTS] fn_name;

fn_name:自定义函数名func_parameter: param_name type

七、函数

SHOW FUNCTION STATUS [LIKE 'pattern'] 参数说明:

模式:函数名称示例:

显示函数状态,如“user_function”

7.1、常用函数列表

显示创建函数fn_name;

fn_name: 自定义函数名称

7.2、自定义函数语法介绍

7.2.1、创建函数

CREATE TABLE `t_user` ( `user_id` int(10) NOT NULL AUTO_INCRMENT COMMENT '用户ID,作为主键', `user_name` varchar(5) DEFAULT NULL COMMENT '用户名', `age` int(3) DEFAULT NULL COMMENT 'Age', PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCRMENT=1 DEFAULT CHARSET=utf8;

7.2.2、编辑函数

INSERT INTO t_user (user_name,age)VALUES('张三',24),('李四',25),('

王五',26),('赵六',27);

7.3.3、创建函数

-- 创建一个函数DELIMITER $-- 开始创建函数CREATE FUNCTION user_function(v_id INT)RETURNS VARCHAR(50)READS SQL DATADETERMINISTICBEGIN -- 定义变量 DECLARE userName VARCHAR(50); -- 给定义的变量赋值 SELECT user_name INTO userName FROM t_user WHERE user_id = v_id; -- 返回函数处理结果 RETURN userName;END;-- 函数创建定界符DELIMITER ;

7.3.4、调用函数

//查询用户ID为1的信息SELECT user_function(1);

7.3.5、删除函数

DROP FUNCTION IF EXISTS user_function;

八、存储过程

8.1、创建语法

CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])过程与创建函数类似,其中的声明语句结束符,可以自定义: DELIMITER $或DELIMITER //参数说明: IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OUT 输出参数:该值可在存储过程内部被改变,并可返回INOUT 输入输出参数:调用时指定,并且可被改变和返回创建一个查询用户信息的存储过程示例: DELIMITER $CREATE PROCEDURE user_procedure(IN v_id int,OUT userName varchar(255)) BEGIN SELECT user_name as userName FROM t_user WHERE user_id = v_id; END $ DELIMITER ;

8.2、存储过程调用

-- @out为输出参数CALL user_procedure(1, @out);输出结果: 张三

8.3、存储过程删除

DROP PROCEDURE [IF EXISTS] proc_name;删除示例: DROP PROCEDURE IF EXISTS user_procedure;

8.4、存储过程和函数的区别

函数只能通过return语句返回单个值或者表对象。而存储过程不允许执行return,但是通过out参数返回多个值。函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。函数限制比较多,比如不能用临时表,只能用表变量,还有一些函数都不可用等等,而存储过程的限制相对就比较少一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

九、触发器

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

9.1、创建触发器

定义语法 CREATE [DEFINER = { user | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW [trigger_order]trigger_bodytrigger_time: { BEFORE | AFTER }trigger_event: { INSERT | UPDATE | DELETE }trigger_order: { FOLLOWS | PRECEDES } other_trigger_name参数说明: FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次。trigger_time:BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后。tigger_event详解:INSERT 型触发器:插入某一行时激活触发器,可能通过INSERT、LOAD DATA、REPLACE 语句触发(LOAD DAT语句用于将一个文件装入到一个数据表中,相当与一系列的INSERT操作);UPDATE型触发器:更改某一行时激活触发器,可能通过UPDATE语句触发;DELETE型触发器:删除某一行时激活触发器,可能通过DELETE、REPLACE语句触发。trigger_order:是MySQL5.7之后的一个功能,用于定义多个触发器,使用follows(尾随)或precedes(在…之先)来选择触发器执行的先后顺序。示例,创建了一个名为trig1的触发器,一旦在t_user表中有插入动作,就会自动往t_time表里插入当前时间。 CREATE TRIGGER trig1 AFTER INSERTON t_user FOR EACH ROWINSERT INTO t_time VALUES(NOW());创建有多个执行语句的触发器语法 CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件ON 表名 FOR EACH ROWBEGIN 执行语句列表END;示例如下: DELIMITER //CREATE TRIGGER trig2 AFTER INSERTON t_user FOR EACH ROWBEGININSERT INTO t_time VALUES(NOW());INSERT INTO t_time VALUES(NOW());END//DELIMITER ;一旦插入成功,就会执行BEGIN ...END语句!

9.2、查询触发器

查询所有触发器SHOW TRIGGERS;查询指定的触发器select * from information_schema.triggers where trigger_name='trig1';所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。

9.3、删除触发器

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name示例如下: DROP TRIGGER IF EXISTS trig1删除触发器之后最好使用上面的方法查看一遍。

9.4、总结

触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。

10、序列

在 MySQL 中,可以有如下几种途径实现唯一值: 自增序列程序自定义UUID() 函数UUID_SHORT() 函数

10.1、自增序列

在mysql中,一般我们可以给某个主键字段设置为自增模式,例如: #创建一个表test_db,字段内容为id,namecreate table test_db(id int,name char(10));# 设置id主键alter table test_db add primary key(id);# 将id主键设置为自增长模式alter table test_db modify id int auto_increment;这种模式,在单库单表的时候,没啥问题,但是如果要对test_db表进行分库分表,这个时候问题就来了,如果水平分库,这个时候向test_db_1、test_db_2中插入数据,就会出现相同的ID!

10.2、程序自定义

当然,为了避免出现这种情况,有的大神就自己单独创建了一张自增序列表,单独维护,这样就不会出现在分表的时候出现相同的ID! 实现过程也很简单! 1、创建一个序列表CREATE TABLE `sequence` ( `name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '序列的名字', `current_value` int(11) NOT NULL COMMENT '序列的当前值', `increment` int(11) NOT NULL DEFAULT '1' COMMENT '序列的自增值', PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;2、创建–取当前值的函数BEGIN DECLARE value INTEGER; SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value; END3、创建–取下一个值的函数DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN UPDATE sequence SET current_value = current_value + increment WHERE name = seq_name; RETURN currval(seq_name); END $ DELIMITER ;4、创建–更新当前值的函数DROP FUNCTION IF EXISTS setval; DELIMITER $ CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN UPDATE sequence SET current_value = value WHERE name = seq_name; RETURN currval(seq_name); END $ DELIMITER ;最后,直接通过函数调用,测试如下# 添加一个sequence名称和初始值,以及自增幅度INSERT INTO sequence VALUES ('testSeq', 0, 1);#设置指定sequence的初始值SELECT SETVAL('testSeq', 10);#查询指定sequence的当前值SELECT CURRVAL('testSeq');#查询指定sequence的下一个值SELECT NEXTVAL('testSeq');这方案,某种情况下解决了分表的问题,但是如果分库还是会出现相同的ID!

10.3、UUID() 函数

UUID 基于 16 进制,由 32 位小写的 16 进制数字组成,如下: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee比如d0c754a8-178e-11eb-ae3d-2a7bea22ed3d就是一个典型的 UUID。 在 MySQL 的UUID()函数中,前三组数字从时间戳中生成,第四组数字暂时保持时间戳的唯一性,第五组数字是一个IEEE 802节点标点值,保证空间唯一。 使用 UUID() 函数,可以生成时间、空间上都独一无二的值。据说只要是使用了 UUID,都不可能看到两个重复的 UUID 值。当然,这个只是在理论情况下。 使用方法也很简单,在sql可以直接当成函数调用即可! select uuid();

10.4、UUID_SHORT() 函数

在 MySQL 5.1 之后的版本,提供UUID_SHORT()函数,生成一个64位无符号整数,在java中可以用Long类型接受。另外,需要注意的是,server_id 的范围必须为0-255,并且不支持 STATEMENT模式复制,否则有可能会产生重复的ID select UUID_SHORT();同时,需要注意的是,UUID_SHORT()返回的是unsigned long long类型,在字段类型设置的时候,一定要勾选无符号类型,否则有可能生成的ID超过Long类型最大长度!

11、用户权限

11.1、用户管理

查询所有用户select * from mysql.user;创建用户# 格式CREATE USER 'username'@'host' IDENTIFIED BY 'password';# 例子,创建一个用户名为admin,密码123456,可以本地访问的用户CREATE USER 'admin'@'localhost' IDENTIFIED BY '123456';更改用户密码# 格式SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');# 例子,将用户名admin,密码修改为456789,可以本地访问的用户SET PASSWORD FOR 'admin'@'localhost' = PASSWORD("456789");删除用户# 格式DROP USER 'username'@'host';# 例子,删除用户名为admin的用户DROP USER 'admin'@'localhost';最后刷新操作,使操作生效#刷新操作使其生效flush privileges

11.2、用户权限管理

查询用户权限# 格式SHOW GRANTS FOR 'username'@'host'# 查询用户名为 'root'@'%'的权限信息SHOW GRANTS FOR 'root'@'%'给用户授予某种权限# 格式GRANT privileges ON databasename.tablename TO 'username'@'host'说明: privileges:用户的操作权限,如SELECT,INSERT,UPDATE、DELETE等,如果要授予所的权限则使用ALLdatabasename:数据库名tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*username:用户名host:可以访问的域名在给其他授权前,请先用管理员账户登录!

1、设置用户访问数据库权限

设置用户testuser,只能访问数据库test_db,其他数据库均不能访问grant all privileges on test_db.* to 'testuser'@'localhost';设置用户testuser,可以访问mysql上的所有数据库grant all privileges on *.* to 'testuser'@'localhost';设置用户testuser,只能访问数据库testuser的表user_info,数据库中的其他表均不能访问grant all privileges on test_db.user_info to 'testuser'@'localhost';

2、设置用户操作权限

设置用户testuser,拥有所有的操作权限,也就是管理员grant all privileges on *.* to 'testuser'@'localhost';设置用户testuser,只拥有【查询】操作权限grant select on *.* to 'testuser'@'localhost';设置用户testuser,只拥有【查询/插入/修改/删除】操作权限grant select,insert,update,delete on *.* to 'testuser'@'localhost';

3、设置用户远程访问权限

设置用户testuser,只能在客户端IP为192.168.1.100上才能远程访问mysqlgrant all privileges on *.* to 'testuser'@'192.168.1.100';设置所有用户可以远程访问mysql,修改my.cnf配置文件,将bind-address = 127.0.0.1前面加#注释掉# bind-address = 127.0.0.1注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令! GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;在结尾加上WITH GRANT OPTION就可以了!

11.3、关于root用户的访问设置

可以使用如下命令,来一键设置root用户的密码,同时拥有所有的权限并设置为远程访问! grant all privileges on *.* to 'root'@'%' identified by '123456';如果想关闭root用户远程访问权限,使用如下命令即可! grant all privileges on *.* to 'root'@'localhost' identified by '123456';最后使用如下命令,使其生效! flush privileges;创建用户并进行授权,也可以使用如下快捷命令! #例如,创建一个admin用户,密码为admingrant all privileges on *.* to 'admin'@'%' identified by 'admin';#刷新MySQL的系统权限相关表方可生效flush privileges;最后需要注意的是:mysql8,使用强校验,所以,如果密码过于简单,会报错,密码尽量搞复杂些!

十二、总结

本文主要围绕 Mysql 中常用的语法进行一次梳理和介绍,这些语法大部分也同样适用于其他的数据库,例如 oracle、sqlserver、postgres 等等,在数据操作栏,除了分页函数以外,基本都是通用的! 如果还有遗漏的地方,欢迎留言指出! 版权声明:本文转载于网络,版权归作者所有,如果侵权,请联系本站编辑删除

猜你喜欢