irpas技术客

mysql的增删改查,mysql常用命令_淡泪无痕_mysql的增删改查命令

网络投稿 5027

mysql的增删改查,mysql常用命令 1、CREATE语句1.1 CREATE 和DATABASE数据库1.2 CREATE和TABLE(表格)1.3 CREATE和USER(用户)1.4 CREATE和VIEW1.5 CREATE和FUNCTION(自定义函数)1.6 CREATE和PROCEDURE(存储过程)1.7 CREATE和TRIGGER(触发器)1.8 CREATE和INDEX(索引) 2、SHOW 语句2.1 SHOW和DATABASES(全部数据库)2.2 SHOW和TABLES(数据库的全部表格)2.3 SHOW和CREATE2.5 SHOW和BINLOG2.5 SHOW和GRANT2.6 SHOW和其他 3、INSERT 语句(增加内容到表格)4、DELETE 语句(删除表格内容)5、UPDATE (更改表格内容)6、SELECT 语句(查询表格内容)6.1 SELECT和WHERE6.2 SELECT和WHERE-AND/BETWEEN(指定范围)6.3 SELECT和WHERE-IN(自定义查询范围)6.4 SELECT和WHERE-IS(查看空值和非空)6.5 SELECT和WHERE-字段=值(指定固定值查询)6.6 SELECT和WHERE-字段 LIKE 值%(模糊查询)6.7 SELECT和内置函数(count,avg,max,min)6.8 SELECT和GROUP BY(分组查询)6.9 SELECT和ORDER(排序查询)6.10 SELECT和DISTINCT去重语句6.11 SELECT和其他 7、ALTER语句(主要修改数据库、表格、用户等属性)7.1 ALTER和DATABASE(数据库)7.2 ALTER和TABLE(表格)7.3 ALTER和USER(用户)7.4 ALTER和INDEX(索引)7.5 ALTER和MODIFY(修改数据长度)7.6 ALTER和PRIMARY KEY(主键) 8、DROP 语句8.1 DROP和DATABASE(数据库)8.2 DROP和TABLE(表格)8.3 DROP和USER(用户)8.4 DROP和VIEW8.5 DROP和其他 9、GRANT 授权语句10、REVOKE 撤销(删除)权限语句11、SET语句12、EXPLAIN语句(一般用于查询索引是否执行)13、DESCRIBE(简写DESC,主要用于查看表或视图结构)14、RENAME语句

编译安装mysql/mariadb文档:mysql编译/mariadb编译 yum安装mysql 8.0

vi /etc/yum.repos.d/mysql.repo [mysql] name=mysql8.0 baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-8.0-community-el7-x86_64/ gpgcheck=0 yum -y install mysql-community-server systemctl start mysqld systemctl enable mysqld mysql 8.0需要手动查看密码,然后修改密码后才能登录 cat /var/log/mysqld.log |grep password mysql -u root -p'<qdmCZnRs6WV' alter user 'root'@'localhost'IDENTIFIED BY 'Test12#$'; 修改密码,重新登录后即可使用 1、CREATE语句 1.1 CREATE 和DATABASE数据库

官网文档:CREATE-DATABASE

HELP CREATE 查看帮助 HELP CREATE DATABASE CREATE DATABASE test1; 创建数据库,(按数据库默认字符集和排序创建) CREATE DATABASE test2 CHARACTER SET utf8mb4 collate utf8mb4_0900_ai_ci; 指定数据库字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci

1.2 CREATE和TABLE(表格)

官网文档:CREATE-TABLE 表格的字段类型:字段类型

HELP CREATE TABLE 进入数据库才能创建表格 use test1; 创建student表,字段(列)为id,name,age,gender,后面的是字段类型和属性 create table student (id int unsigned primary key auto_increment,name varchar(10),age tinyint unsigned,gender enum('M','F') default 'M'); unsigned 不设置符号 primary key 设置为主键,不能为空 auto_increment 自动增长 tinyint 单个字节整数 int 整数 enum('M','F') 单选项 default 'M' 默认值

1.3 CREATE和USER(用户)

官网文档:CREATE-USER

HELP CREATE USER 创建账户aa,密码为Test12#$,访问IP段为192.168.116.% CREATE USER 'aa'@'192.168.116.%' IDENTIFIED BY 'Test12#$'; mysql 8.0的密码插件默认是caching_sha2_password,指定老版本的密码插件方式为mysql_native_password CREATE USER 'bb'@'192.168.116.%' IDENTIFIED WITH mysql_native_password BY 'Test12#$';

1.4 CREATE和VIEW SELECT user,host,plugin FROM mysql.user; 查询某个表格的部分数据 use test2; 进入数据库 将查询的部分表格数据保存为视图(其实相当于另存为表格,不过格式有所不同) CREATE VIEW t_view AS SELECT user,host,plugin FROM mysql.user; SHOW TABLES; 查看视图生成 SELECT * FROM t_view; 查看视图的内容

1.5 CREATE和FUNCTION(自定义函数)

创建一个表格

CREATE TABLE t1 (tid int,name varchar(20)); INSERT t1(tid,name)VALUES('1','aa'),('2','bb'),('3','cc');

自定义一个函数,当函数的值=表格的某一列的值,删除行

mysql 8.0版本需要开启这个才能自定义函数 set global log_bin_trust_function_creators=ON; use test2; 进入数据库 创建函数 //开始,//结尾 DELIMITER // CREATE FUNCTION deleteT1(id SMALLINT UNSIGNED) RETURNS VARCHAR(20) BEGIN DELETE FROM t1 WHERE tid = id; RETURN (SELECT COUNT(*) FROM t1); END// DELIMITER ; SELECT deleteT1(1); 调用函数,删除t1中tid为1的行 SELECT * FROM t1; 再次查看t1表格 函数解析: DELIMITER // 表示把原本的结束符;改为// 下面表示创建一个函数deleteT1,里面有2个字段 CREATE FUNCTION deleteT1(id SMALLINT UNSIGNED) RETURNS VARCHAR(20) BEGIN 这个表示函数开始 DELETE FROM t1 WHERE tid = id; 定义当t1表格的tid=函数的id的值时,删除行 RETURN (SELECT COUNT(*) FROM t1); 返回t1表格剩下的行数 END// 结束符 DELIMITER ; 将//还原为;

1.6 CREATE和PROCEDURE(存储过程) mysql 8.0版本需要开启这个才能自定义函数 set global log_bin_trust_function_creators=ON; use test2; 进入数据库 创建表格 CREATE TABLE t1(id int auto_increment primary key,name char(10),age int); 创建存储过程 delimiter $$ create procedure PRt1() begin declare i int; set i = 1; while i < 1001 do insert into t1(name,age) values (concat('aa',i),i); set i = i +1; end while; end$$ delimiter ; 存储过程解析 delimiter $$ #将结束符;转换为$$ create procedure PRt1() #创建存储过程PRt1 begin #开始存储过程 declare i int; #定义变量i,类型为整数型 set i = 1; #设置i的初始值 while i < 1001 #定义循环,当i<1001 #当i<1001时,不断插入数据到t1表格 do insert into t1(name,age) values (concat('aa',i),i); set i = i +1; #定义i=i+1,不断递增 end while; #结束while循环 end$$ #结束存储过程 delimiter ; #将结束符$$还原为; call PRt1; 调用存储过程 SELECT count(*) FROM t1; 查看插入了1000条数据

1.7 CREATE和TRIGGER(触发器)

触发器:当某个条件发生时,触发另外一个条件

创建2个表格

CREATE TABLE t1(id int,name varchar(20)); 创建t1表,2个字段 CREATE TABLE t2(t1_count int DEFAULT 0); 创建t2表 INSERT INTO t2(t1_count)VALUES(0); 插入t2的第一行的值为0 SELECT * FROM t1; 查看t1表为空 SELECT * FROM t2; 查看t2表的行值为0

创建触发器

CREATE TRIGGER t1_insert AFTER INSERT ON t1 FOR EACH ROW UPDATE t2 SET t1_count=t1_count+1; 触发器解析 CREATE TRIGGER t1_insert #创建触发器t1_insert AFTER INSERT #通过插入触发 ON t1 FOR EACH ROW #当t1表格每个行增加时 UPDATE t2 SET t1_count=t1_count+1; #更新t2表格的值+1 INSERT t1(id,name)VALUES('1','aa'),('2','bb'); 对t1表格插入2条数据 SELECT * FROM t1; 查看数据生成 SELECT * FROM t2; 因为触发器,所以变成了2

1.8 CREATE和INDEX(索引)

官网文档:CREATE-INDEX

创建普通索引 普通索引:列中的值可以为空,可以重复。

创建表格 CREATE TABLE i1(id int,name char(10)); 对i1表格的id列做索引,名字为i1idx CREATE INDEX i1idx ON i1(id); SHOW INDEXES FROM i1\G 查看表格全部索引和属性 这里的索引属性是B树索引的意思,mysql默认是B+树索引 Index_type: BTREE

创建唯一索引 唯一索引:列中的值不能相同,必须唯一值,但是可以为空

CREATE UNIQUE INDEX i1 ON i1(name); 创建唯一索引 SHOW INDEXES FROM i1\G

创建表格时指定索引

创建表格 CREATE TABLE i2(id int,name char(10),INDEX i2idx(id)); INDEX i2idx(id) 表示创建索引,名字叫i2idx,索引的字段是id SHOW INDEXES FROM i2\G

创建复合索引(多个列做成一个索引)

CREATE TABLE test1(id int,name char(10),age int,extra varchar(20)); CREATE INDEX i1idname ON test1(id,name); 指定id,name做成复合索引i1idname SHOW INDEXES FROM test1\G 查看列的索引名字都是一样

2、SHOW 语句 2.1 SHOW和DATABASES(全部数据库)

官网SHOW文档:SHOW

SHOW DATABASES; 查看全部数据库名字

2.2 SHOW和TABLES(数据库的全部表格) use test1; 进入数据库 SHOW TABLES; 查看数据中的全部表格名字

2.3 SHOW和CREATE

查看创建数据库时的属性

SHOW CREATE DATABASE test1; 查看test1数据库创建时的字符集和排序规则等属性

查看创建表格时的属性

use test1; 进入数据库 SHOW CREATE TABLE student; 查看创建student表格时设置的字段属性和其他属性

2.5 SHOW和BINLOG SHOW BINARY LOGS; 查看二进制日志的全部文件 SHOW BINLOG EVENTS IN 'binlog.000002'; 指定二进制文件名查看文件内容

2.5 SHOW和GRANT

查看账户权限

SHOW GRANTS FOR aa@localhost;

2.6 SHOW和其他

查看mysql进程

SHOW PROCESSLIST; 查看mysql进程

查看视图

use test2; 进入数据库 SHOW TABLE STATUS LIKE 't_view'\G 查看视图信息 这个Comment: VIEW 定义了这个表格为视图

查看自定义函数

SHOW FUNCTION STATUS\G 查看全部自定义函数 SHOW CREATE FUNCTION deleteT1\G; 查看指定自定义函数创建信息

查看存储过程

SHOW PROCEDURE STATUS\G; 查看全部存储过程 SHOW CREATE PROCEDURE PRt1; 查看指定的存储过程创建方式

查看触发器

SHOW TRIGGERS\G; 查看全部触发器 SHOW CREATE TRIGGER t1_insert\G; 查看指定触发器的创建方式

查看全部变量

SHOW VARIABLES\G

查看全部全局变量

SHOW GLOBAL VARIABLES\G

查看表格索引

SHOW INDEXES FROM i1\G 查看表格全部索引和属性

3、INSERT 语句(增加内容到表格)

官网文档:INSERT

use test1; 进入数据库 插入一条数据到student表格,前面指定字段(列),后面输入内容 INSERT student(id,name,age,gender)VALUES('1','aa','18','M'); *代表所有,表示查看表格所有内容,表格少量数据可以使用这个,大量不用使用,要不然可能会卡死 SELECT * FROM student;

插入多个数据,中间用逗号隔开

use test1; 进入数据库 INSERT student(id,name,age,gender)VALUES('2','bb','18','F'),('3','cc','17','M'); SELECT * FROM student;

4、DELETE 语句(删除表格内容)

官网文档:DELETE

增加qq这一行

use test1; 进入数据库 INSERT student(id,name,age,gender)VALUES('4','qq','18','M'); SELECT * FROM student;

删除qq这一行

DELETE FROM student WHERE id='4'; SELECT * FROM student;

清空表格,但是不删除表格内容

创建一个表格 use test1; CREATE TABLE t1 (id int primary key auto_increment,name varchar(20)); INSERT t1(id,name)VALUES('1','AA'); INSERT t1(id,name)VALUES('2','BB'); SELECT * FROM t1; 清空表格,但是不删除表格 DELETE FROM t1; SELECT * FROM t1; 可以看到数据不见了 SHOW TABLES; 可以看到表格还在

5、UPDATE (更改表格内容)

官网文档:UPDATE

use test1; 进入数据库 指定更新id为1的name字段内容 SET 指定数据更新的列和值,WHERE指定老的列和值 UPDATE student SET name='dd' WHERE id='1'; SELECT * FROM student;

UPDATE和USER(修改账户密码),这种只适合mysql 5.7以下版本修改密码

CREATE USER 'bb'@'localhost' IDENTIFIED BY 'Test12#$'; 创建账户 指定账户信息,通过修改表格方式修改密码 UPDATE mysql.user set password=password('BBbb12#$') where user='bb' AND host='localhost'; FLUSH PRIVILEGES; 指定表格方式修改密码需要刷新权限 exit mysql -u bb -p'BBbb12#$' 测试登录

6、SELECT 语句(查询表格内容)

官网文档:SELECT

6.1 SELECT和WHERE 查询mysql数据库中user表的user,host字段(列)的内容 SELECT user,host FROM mysql.user;

指定条件查询字段内容

SELECT name,age FROM student WHERE age<=20;

6.2 SELECT和WHERE-AND/BETWEEN(指定范围)

指定范围查询内容,默认前后都包括

SELECT name,age FROM student WHERE age>=18 AND age<=20; SELECT name,age FROM student WHERE age BETWEEN 18 AND 20;

6.3 SELECT和WHERE-IN(自定义查询范围) SELECT name,age FROM student WHERE age in (17,18);

6.4 SELECT和WHERE-IS(查看空值和非空) INSERT student(id,name,gender)VALUES('4','dd','M'); 插入一条包括空值数据 SELECT name,age FROM student WHERE age is null; 查看空值数据 SELECT name,age FROM student WHERE age is not null; 查看非空值数据

6.5 SELECT和WHERE-字段=值(指定固定值查询) SELECT name,age FROM student WHERE age='18';

6.6 SELECT和WHERE-字段 LIKE 值%(模糊查询) INSERT student(id,name,age,gender)VALUES('5','daa','19','M'); SELECT name,age FROM student WHERE name like 'd%';

6.7 SELECT和内置函数(count,avg,max,min) SELECT count(id) FROM student; 统计字段出现有多少行 SELECT avg(age) FROM student; 统计字段的平均值 SELECT max(age) FROM student; 统计字段的最大值 SELECT min(age) FROM student; 统计字段的最小值

查看当前登录账户

SELECT CURRENT_USER(); 查看当前登录账户

6.8 SELECT和GROUP BY(分组查询)

指定age,统计age相同的人数

SELECT age 年龄,count(*) 数量 FROM student GROUP BY age; age 年龄 后面的年龄是为了输出时显示,不会修改原本表格数据 count(*) 数量 count(*)内置函数,可以统计列的全部值

6.9 SELECT和ORDER(排序查询)

正序和倒序 表格创建时会带有排序规则,所以具体要看排序规则的方式排序,不一定都是按照从A-Z这种方式排序

SELECT * FROM student ORDER BY id; 默认是从小到大,正序排序 SELECT * FROM student ORDER BY id desc; 指定desc为倒序排序

指定固定行查询

SELECT * FROM student; 默认是以id排序 SELECT * FROM student ORDER BY id LIMIT 3; 指定以id排序,输出前3个

跳序查询 表格创建时会带有排序规则,所以具体要看排序规则的方式排序,不一定都是按照从A-Z这种方式排序

SELECT * FROM student ORDER BY age; 跳过前面3个,输出第4,5这2个 SELECT * FROM student ORDER BY age LIMIT 3,2;

6.10 SELECT和DISTINCT去重语句 SELECT * FROM student; 查看表格的全部数据 SELECT DISTINCT id FROM student; 指定表格id字段(列),查看没有重复值的每行数据 SELECT DISTINCT age FROM student; 指定表格name字段(列),查看没有重复值的每行数据

6.11 SELECT和其他

查看mysql版本号

SELECT VERSION();

查看当前登录账户

SELECT CURRENT_USER();

查看当前所在数据库

SELECT DATABASE();

7、ALTER语句(主要修改数据库、表格、用户等属性) 7.1 ALTER和DATABASE(数据库)

官网文档:ALTER-DATABASE 修改数据库属性最好是空的数据库,要不然原本数据库的表格可能会发生乱码错误

SHOW CREATE DATABASE test2; 查看数据库创建时的字符集和排序规则等属性 ALTER DATABASE test2 character set gbk; 修改test2数据库的字符集 ALTER DATABASE test2 COLLATE=gbk_chinese_ci; 修改test2数据库的排序规则 SHOW CREATE DATABASE test2; 再次查看数据库属性

7.2 ALTER和TABLE(表格)

官网文档:ALTER-TABLE

修改表格字符集和排序规则 创建一个表格,新的表格的字符集和排序规则由创建表格的数据库的创建数据定义,也就是说表格的数据库的字符集和排序规则是什么,表格的属性就是什么。

use test3; CREATE TABLE t1 (id int primary key auto_increment,name varchar(20)); INSERT t1(id,name)VALUES('1','AA'); INSERT t1(id,name)VALUES('2','BB'); SELECT * FROM t1; SHOW CREATE TABLE t1; 查看表格属性 一般表格和数据库的字符集和排序规则一致,最好不要修改 ALTER TABLE t1 character set gbk; 修改t1表格字符集 ALTER TABLE t1 COLLATE=gbk_chinese_ci; 修改t1表格的排序规则

增加表格字段(列)

SELECT * FROM t1; 原本只有2个字段(列)id和name 指定在id后面增加新的列age ALTER TABLE t1 add age int AFTER id; SELECT * FROM t1;

删除字段(列)

SELECT * FROM t1; 查看原本表格字段 ALTER TABLE t1 DROP COLUMN age; 指定删除age字段 SELECT * FROM t1; 确认删除age字段

修改字段名字

指定将name字段修改为mingzi字段 注意:修改字段需要注意字段类型,要不然可能会出现乱码 ALTER TABLE t1 CHANGE COLUMN name mignzi char(12); SELECT * FROM t1;

7.3 ALTER和USER(用户)

官网文档:ALTER-USER 创建账户

创建账户aa,设置密码和登录方式 CREATE USER 'aa'@'localhost' IDENTIFIED BY 'Test12#$'; mysql -u aa -p'Test12#$' exit

修改用户密码

ALTER USER aa@'localhost' identified by 'AAaa12#$'; 修改aa@'localhost'的密码 mysql -u aa -p'Test12#$' 重新用老密码不能登录 mysql -u aa -p'AAaa12#$' 新密码可以登录

mysql 5.7以下老版本修改密码另外方式

SET PASSWORD FOR 'bb'@'localhost' = PASSWORD('Test12#$'); 修改密码 mysql -u bb -p'Test12#$' 重新登录,可以看到密码修改成功

修改当前登录账户密码

SELECT CURRENT_USER(); 查看当前登录账户 ALTER user user() identified by 'Test12#$'; 默认没有root权限不能修改别人密码,但是可以用这个命令修改自己密码 mysql -u aa -p'AAaa12#$' 老密码不能登录 mysql -u aa -p'Test12#$' 新密码可以,修改密码成功

锁定和解锁账户

ALTER USER 'aa'@'localhost' ACCOUNT LOCK; 锁定账户'aa'@'localhost' ALTER USER 'aa'@'localhost' ACCOUNT UNLOCK; 解锁账户

修改账户密码插件

SELECT user,host,plugin FROM mysql.user; 查看老的账户信息 ALTER USER 'aa'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Test12#$'; 修改插件 SELECT user,host,plugin FROM mysql.user; 查看账户信息

7.4 ALTER和INDEX(索引)

对表格添加索引

CREATE TABLE A1(id int,name char(10)); 创建表格 ALTER TABLE A1 ADD INDEX a1idx(id); 对A1表格的字段id添加索引a1idx SHOW INDEX FROM A1\G

删除表格索引

ALTER TABLE A1 DROP INDEX a1idx; 删除表格索引a1idx SHOW INDEX FROM A1\G

7.5 ALTER和MODIFY(修改数据长度) CREATE TABLE M1(id int,name char(10)); 创建表格,name字段长度为10 ALTER TABLE M1 MODIFY name char(15); 修改name字段长度为15 SHOW CREATE TABLE M1; 确认修改成功

7.6 ALTER和PRIMARY KEY(主键)

添加主键时,主键对应的列的数据不能为空,一个表只能有一个主键

CREATE TABLE Z1(id int,name char(10)); 创建表格 ALTER TABLE Z1 MODIFY id int NOT NULL; 设置主键不为空 ALTER TABLE Z1 ADD PRIMARY KEY (id); 创建主键 因为主键也是索引的一种,所以这样查看 SHOW INDEX FROM Z1; 查看表格主键信息

删除主键

ALTER TABLE Z1 DROP PRIMARY KEY; 删除主键,只有一个,不用指定字段名 SHOW INDEX FROM Z1; 查看表格主键信息

8、DROP 语句 8.1 DROP和DATABASE(数据库)

官网文档:DROP-DATABASE

DROP DATABASE test1; 删除数据库test1

8.2 DROP和TABLE(表格)

官网文档:DROP-TABLE 创建一个表格

use test2; CREATE TABLE t2 (id int primary key auto_increment,name varchar(20)); INSERT t2(id,name)VALUES('1','AA'); INSERT t2(id,name)VALUES('2','BB'); SELECT * FROM t2; SHOW TABLES;

删除表格

DROP TABLE t2; SHOW TABLES; 可以看到表格已经被删除

8.3 DROP和USER(用户) SELECT user,host,plugin FROM mysql.user; 查看全部账户 DROP USER bb@'localhost'; 删除指定账户 SELECT user,host,plugin FROM mysql.user; 再次查看

8.4 DROP和VIEW use test2; SHOW TABLE STATUS LIKE 't_view'\G 查看视图信息 通过这个Comment: VIEW 可以看到这个表格实际是视图,不是平常的表格 DROP VIEW t_view; 删除视图

8.5 DROP和其他

删除自定义函数

use test2; DROP FUNCTION deleteT1; 删除自定义函数

删除存储过程

use test2; SHOW CREATE PROCEDURE PRt1\G; 查看指定的存储过程创建方式 DROP PROCEDURE PRt1; 删除存储过程

删除触发器

SHOW CREATE TRIGGER t1_insert\G; 查看触发器 DROP TRIGGER t1_insert; 删除触发器

9、GRANT 授权语句

官网文档:GRANT

创建账户和数据库

创建t1账户 CREATE USER 't1'@'localhost' IDENTIFIED BY 'Test12#$'; CREATE DATABASE t1; 创建t1数据库 授权t1账户对t1数据库有所有权限 GRANT ALL ON t1.* TO t1@'localhost'; 创建t2数据库 CREATE DATABASE t2; 授权t1账户对t2账户具有查询权限 GRANT SELECT ON t2.* TO t1@'localhost';

用root账户先在t2数据库创建表格

CREATE TABLE t2(id int,name char(10)); INSERT t2(id,name)VALUES('1','aa'); SELECT * FROM t2;

测试权限是否授权成功

查看t1账户对t1数据库的权限

mysql -u t1 -p'Test12#$' 用t1账户登录 use t1; 进入t1数据库 CREATE TABLE t1(id int,name char(10)); 创建表格 INSERT t1(id,name)VALUES('1','aa'); 插入数据到表格 SELECT * FROM t1; 查看表格数据 DROP TABLE t1; 删除表格

查看t1账户对t2数据库的权限

mysql -u t1 -p'Test12#$' 用t1账户登录t2数据库 CREATE TABLE t2(id int,name char(10)); 没有新建权限 INSERT t2(id,name)VALUES('2','bb'); 没有插入权限 SELECT * FROM t2; 只有查询权限

10、REVOKE 撤销(删除)权限语句

官网文档:REVOKE

REVOKE ALL PRIVILEGES,GRANT OPTION FROM t1@'localhost'; 撤销全部权限 SHOW GRANTS FOR t1@localhost; 查看权限列表 这个是默认账户登录权限,必须要有才能使用账户 GRANT USAGE ON *.* TO `t1`@`localhost` mysql -u t1 -p'Test12#$' 重新登录 use t1; 可以看到没有t1数据库的权限

撤销部分权限方式

GRANT ALL ON t1.* TO t1@'localhost'; 先授权t1账户对t1数据库有全部权限 SHOW GRANTS FOR t1@localhost; 查看权限 REVOKE INSERT ON t1.* FROM t1@'localhost'; 撤销对t1数据库的插入权限 SHOW GRANTS FOR t1@localhost; 查看权限

用t1账户登录,测试权限

mysql -u t1 -p'Test12#$' 登录 use t1; 进入数据库 CREATE TABLE t1(id int,name char(10)); 有新建权限 INSERT t1(id,name)VALUES('1','aa'); 没有插入权限 SELECT * FROM t1; 有查询权限 SHOW TABLES; 表格也有生成

11、SET语句

SET设置变量文档:SET

自定义临时变量

SET @var_t1=11; 设置变量@var_t1,值为11 SELECT @var_t1; 查看变量 mysql -u tt1 -p'Test12#$' 退出登录后,自定义变量不会保存到数据库 SELECT @var_t1; 因为没保存,所以值为空

系统变量 文档:SET-VARIABLE Option File 这里的Yes表示这个内容是选项,需要去配置文件修改 System Var 这里的Yes表示这个内容是变量,可以直接在mysql客户端修改值

如果这2个都是Yes,代表可以在配置文件修改,也可以在mysql客户端修改值 查看默认系统字符集的变量

SELECT @@character_set_results; set character_set_results="utf8mb3"; 当前终端修改默认字符集值,退出登录自动恢复 SELECT @@character_set_results;

全局变量(不会因为退出登录或重启而失效)

SHOW GLOBAL VARIABLES LIKE 'log_bin_trust_function_creators'; set global log_bin_trust_function_creators=OFF; 设置全局变量 SHOW GLOBAL VARIABLES LIKE 'log_bin_trust_function_creators';

12、EXPLAIN语句(一般用于查询索引是否执行)

官网文档:EXPLAIN EXPLAIN输出内容文档:EXPLAIN-OUT 主要关注列: type:表格的连接类型,通过这个判断索引是否被用到(从最优到最差):

system:一般不会出现,只会出现在mysql的内置系统表中才会显示。const:一般需要只有一个匹配的行并且这行的其他值可以被mysql当为常量才能出现这种情况。如果索引是主键也会出现这个。eq_ref:一般出现在关联表查询过程中,并且当使用的索引是主键或唯一非 NULL 索引时, 才会出现这个。ref:一般查询时最优结果,出现这个类型,优化算是很好的了。如果是使用非唯一性索引情况下,就会出现这种结果。fulltext:使用FULLTEXT索引会出现这个。ref_or_null:在ref类型的情况下,另外搜索包括NULL值的行会出现这个。一般用于表格的子查询。index_merge:此连接类型表明使用了索引合并优化。在这种情况下,key输出行中的列包含所用索引的列表,并 key_len包含所用索引的最长键部分的列表。unique_subquery:此类型替换这种形式eq_ref的某些 IN子查询:value IN (SELECT primary_key FROM single_table WHERE some_expr)index_subquery:主要用于替换IN子查询语句,适用于这种形式的子查询中的非唯一索引。value IN (SELECT key_column FROM single_table WHERE some_expr)range:使用索引时,查询的语句指定范围则会出现这个。比如SELECT * FROM tbl_name WHERE key_column BETWEEN 10 and 20;index:当Extra列还显示Using index时,证明这次查询只使用了索引表的索引,没有进行全表扫描。当Extra列没有Using index时,证明此次查询按照索引的顺序进行了全表扫描。ALL:最差的查询结果,表格会对每个行组合进行全表扫描。

possible_keys:可能使用到的索引,但是实际不一定使用到。为空则没有使用索引。

key:一定使用到的索引,为空则没有使用索引。

ref:(该ref列显示将哪些列或常量与列中指定的索引进行比较以 key从表中选择行。)

const:常见结果,表示使用到了常见的索引类型。func:表示使用的值是某个函数的结果。NULL:一般没有使用到索引会出现这个

rows:此次查询扫描了多少行

Extra:(额外信息,通过这个对索引进一步优化) 具体看官网文档:EXPLAIN-Extra

注意:以下结果有时候会同时出现。

常见输出:

Using index:使用了覆盖索引,最优结果Using index condition:使用条件加索引方式。比如已经知道了行的范围或内容,但是还是需要索引查找,如EXPLAIN SELECT * FROM tbl_name where id in (1,11);Using where:使用到了where语句,但是不一定使用到了索引,要和type配合查看。Using filesort:一般使用到了ORDER BY语句就会出现这个。Using index for group-by:一般使用GROUP BY语句出现这个。NULL:一般这个表示索引使用了,但是还可以优化,要和type配合查看。

ORDER BY语句和索引优化:索引-ORDER BY GROUP BY语句和索引优化:索引-GROUP BY

创建表格和索引

CREATE TABLE e1(id int,name char(10)); 创建表格 CREATE INDEX e1idx ON e1(id); 创建索引 插入数据 INSERT e1(id,name)VALUES('1','aa'),('2','bb'),('11','aa1'),('12','bb1'); SELECT * FROM e1;

使用EXPLAIN查看使用索引和没有使用索引

EXPLAIN SELECT id FROM e1 WHERE id='1'; 使用了索引 可以看到type为ref,key为e1idx EXPLAIN SELECT * FROM e1 WHERE id LIKE 'a%'; 没有使用到索引 可以看到type为ALL和key为NULL,通过rows为4行,也可以看出进行了全表扫描 Using where表示使用到了where语句,但是不一定使用到索引

查看Using index condition和Using filesort

EXPLAIN SELECT * FROM e1 WHERE id in (1,11); 使用了索引 type为range,key为e1idx证明使用到了索引,Using index condition表示使用了索引和条件 EXPLAIN SELECT * FROM e1 ORDER BY id; type为NULL,key为NULL,Using filesort表示是一个ORDER BY语句

索引最优选择

EXPLAIN SELECT id,name FROM e1 WHERE id='1'; 使用了索引,但是不是最优 可以看到WHERE已经定义了只查找id为1的行,就不需要在写name了 EXPLAIN SELECT id FROM e1 WHERE id='1'; 最优使用索引方式

Extra同时出现不同结果

EXPLAIN SELECT id FROM e1 WHERE id in (1,11); 可以看到使用到了索引和wehere条件

13、DESCRIBE(简写DESC,主要用于查看表或视图结构) create table student (id int unsigned primary key auto_increment,name varchar(10),age tinyint unsigned,gender enum('M','F') default 'M'); DESC student; 2种都可以查看表结构 DESCRIBE student;

因为视图相当于另外一种方式的表格,所以可以用DESC命令

CREATE VIEW t_view AS SELECT user,host,plugin FROM mysql.user; 创建视图 DESC t_view; 查看视图结构

14、RENAME语句

RENAME 修改账户名字

把账户名字从t1@'localhost' 改为tt1@'localhost' RENAME USER t1@'localhost' TO tt1@'localhost'; SELECT user,host FROM mysql.user;


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mysql的增删改查命令 #1CREATE语句2SHOW #语句3INSERT #语句删除表格内容5UPDATE #更改表格内容6SELECT #语句9GRANT