MySQL 基本语句、常见函数、触发器及MySQL基本优化操作

Day 19

一、Mysql语句

1、新增

insert into库名称.表名

Inser into

2、删除

3、修改

4、查询:查看数据库、数据表及字段

# 创建普通用户进行远程连接,提供用户名和密码

mysql> create user 'tp'@'%' identified by 'tp';

Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to 'tp'@'%';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| abc                |

| information_schema |

| mysql              |

| performance_schema |

| sys                |

| test               |

+--------------------+

6 rows in set (0.01 sec)

mysql> use test;

# 查看student表

mysql> select * from student;

+----+--------+--------+

| id | name   | gender |

+----+--------+--------+

|  1 | 花卷   | 女     |

|  2 | 张三   | 男     |

|  3 | 莎莎   | 女     |

+----+--------+--------+

3 rows in set (0.01 sec)

# 只查看student表的部分字段

mysql> select name from student;

+--------+

| name   |

+--------+

| 花卷   |

| 张三   |

| 莎莎   |

+--------+

3 rows in set (0.00 sec)

mysql> select id,gender from student;

+----+--------+

| id | gender |

+----+--------+

|  1 | 女     |

|  2 | 男     |

|  3 | 女     |

+----+--------+

3 rows in set (0.00 sec)

# 设置别名

mysql> select id as 编号,name as 名字,gender as 性别from student;

+--------+--------+--------+

| 编号   | 名字   | 性别   |

+--------+--------+--------+

|      1 | 花卷   | 女     |

|      2 | 张三   | 男     |

|      3 | 莎莎   | 女     |

+--------+--------+--------+

3 rows in set (0.00 sec)

mysql> select gender as 性别,count(*) as 人数 from student group by gender;

+--------+--------+

| 性别   | 人数   |

+--------+--------+

| 女     |      3 |

| 男     |      2 |

+--------+--------+

2 rows in set (0.00 sec)

# 任意两张表组成一个字段

mysql> select a.*,b.* from student as a,student as b;

+----+--------+--------+----+--------+--------+

| id | name   | gender | id | name   | gender |

+----+--------+--------+----+--------+--------+

|  3 | 莎莎   | 女     |  1 | 花卷   | 女     |

|  2 | 张三   | 男     |  1 | 花卷   | 女     |

|  1 | 花卷   | 女     |  1 | 花卷   | 女     |

|  3 | 莎莎   | 女     |  2 | 张三   | 男     |

|  2 | 张三   | 男     |  2 | 张三   | 男     |

|  1 | 花卷   | 女     |  2 | 张三   | 男     |

|  3 | 莎莎   | 女     |  3 | 莎莎   | 女     |

|  2 | 张三   | 男     |  3 | 莎莎   | 女     |

|  1 | 花卷   | 女     |  3 | 莎莎   | 女     |

+----+--------+--------+----+--------+--------+

9 rows in set (0.00 sec)

二、Mysql函数:

1、排序:asc(升序)、desc(降序)

mysql> select * from student order by gender desc;

+----+--------+--------+

| id | name   | gender |

+----+--------+--------+

|  2 | 张三   | 男     |

|  5 | 孙八   | 男     |

|  1 | 花卷   | 女     |

|  3 | 莎莎   | 女     |

|  4 | 赵六   | 女     |

+----+--------+--------+

5 rows in set (0.00 sec)

mysql> select * from student order by gender asc;

+----+--------+--------+

| id | name   | gender |

+----+--------+--------+

|  1 | 花卷   | 女     |

|  3 | 莎莎   | 女     |

|  4 | 赵六   | 女     |

|  2 | 张三   | 男     |

|  5 | 孙八   | 男     |

+----+--------+--------+

5 rows in set (0.00 sec)

# 按数量升序排列

mysql> select * from product order by qty;

+----+-----------+-------+-----+

| id | name      | price | qty |

+----+-----------+-------+-----+

|  1 | 香蕉      |   8.5 | 200 |

|  2 | 苹果      |  12.5 | 400 |

|  3 | 菠萝      |  12.4 | 600 |

|  4 | 哈密瓜    |  18.2 | 700 |

+----+-----------+-------+-----+

4 rows in set (0.00 sec)

# 按价格降序排列

mysql> select * from (select * from product order by qty) as a order by a.price desc;

+----+-----------+-------+-----+

| id | name      | price | qty |

+----+-----------+-------+-----+

|  4 | 哈密瓜    |  18.2 | 700 |

|  2 | 苹果      |  12.5 | 400 |

|  3 | 菠萝      |  12.4 | 600 |

|  1 | 香蕉      |   8.5 | 200 |

+----+-----------+-------+-----+

4 rows in set (0.00 sec)

2、汇总:count、sum、avg

3、数制:二进制、八进制、十六进制

4、聚合函数

注意!!!:只有 select ⼦句和 having ⼦句、order by ⼦句中能使⽤聚合函数,where ⼦句不能使⽤聚合函数。当使⽤聚合查询以后,不能使⽤where条件,如果要添加条件,就使⽤having。

========举例============

# 创建product表

mysql> create table product(

    -> id int primary key auto_increment,

    -> name varchar (45) not null,

    -> pirce float not null,

    -> qty int not null);

Query OK, 0 rows affected (0.02 sec)

# 查看表

mysql> desc product;

+-------+-------------+------+-----+---------+----------------+

| Field | Type        | Null | Key | Default | Extra          |

+-------+-------------+------+-----+---------+----------------+

| id    | int         | NO   | PRI | NULL    | auto_increment |

| name  | varchar(45) | NO   |     | NULL    |                |

| price | float       | NO   |     | NULL    |                |

| qty   | int         | NO   |     | NULL    |                |

+-------+-------------+------+-----+---------+----------------+

4 rows in set (0.00 sec)

# 插入数据

mysql> insert into product (name, price,qty) values("香蕉", 8.5 , 200);

Query OK, 1 row affected (0.00 sec)

mysql> insert into product (name, price,qty) values("苹果", 12.5, 400);

Query OK, 1 row affected (0.00 sec)

mysql> insert into product (name, price,qty) values("菠萝", 12.4, 600);

Query OK, 1 row affected (0.00 sec)

mysql> insert into product (name, price,qty) values("哈密瓜", 18.2, 700);

Query OK, 1 row affected (0.00 sec)

# 查看表的详细信息

mysql> select * from product;

+----+-----------+-------+-----+

| id | name      | price | qty |

+----+-----------+-------+-----+

|  1 | 香蕉      |   8.5 | 200 |

|  2 | 苹果      |  12.5 | 400 |

|  3 | 菠萝      |  12.4 | 600 |

|  4 | 哈密瓜    |  18.2 | 700 |

+----+-----------+-------+-----+

# 新增列

mysql> select *,price*qty as zj from product;

+----+-----------+-------+-----+--------------------+

| id | name      | price | qty | zj                 |

+----+-----------+-------+-----+--------------------+

|  1 | 香蕉      |   8.5 | 200 |               1700 |

|  2 | 苹果      |  12.5 | 400 |               5000 |

|  3 | 菠萝      |  12.4 | 600 |  7439.999771118164 |

|  4 | 哈密瓜    |  18.2 | 700 | 12740.000534057617 |

+----+-----------+-------+-----+--------------------+

4 rows in set (0.00 sec)

4 rows in set (0.00 sec)

1)常用聚合函数

# 统计表中数据的行数或者统计指定列不为空值的数据行个数

select count(*或表头名) from 表名;

mysql> select count(*) from student;

+----------+

| count(*) |

+----------+

|        3 |

+----------+

1 row in set (0.06 sec)

mysql> select count(1) from student;

+----------+

| count(1) |

+----------+

|        3 |

+----------+

1 row in set (0.06 sec)

mysql> select count(gender) from student;

+---------------+

| count(gender) |

+---------------+

|             3 |

+---------------+

1 row in set (0.05 sec)

# 计算指定列的最大值,如果指定列是字符串,类型(文字类型)则使用字符首拼排序

select max(表头名) from 表名;

mysql> select max(price) from product;

+------------+

| max(price) |

+------------+

|       18.2 |

+------------+

1 row in set (0.00 sec)

# 计算指定列的最⼩值,如果指定列是字符串,类型(文字类型)则使用字符首拼排序

select min(表头名) from 表名;

mysql> select min(price) from product;

+------------+

| min(price) |

+------------+

|        8.5 |

+------------+

1 row in set (0.00 sec)

# 计算指定列的数值,如果指定列不是数值,类型则计算结果为 0

select sum(表头名) from 表名;

mysql> select sum(price) from product;

+-------------------+

| sum(price)        |

+-------------------+

| 51.60000038146973 |

+-------------------+

1 row in set (0.00 sec)

# 计算指定列的平均值,如果指定列不是数值,类型则计算结果为 0

select avg(表头名) from 表名;

mysql> select avg(price) from product;

+--------------------+

| avg(price)         |

+--------------------+

| 12.900000095367432 |

+--------------------+

1 row in set (0.00 sec)

5、其他常用函数

=======日期时间函数=====

mysql> select month('2003-09-01') as birth;

+-------+

| birth |

+-------+

|     9 |

+-------+

1 row in set (0.00 sec)

mysql> select day('2003-09-01') as birth;

+-------+

| birth |

+-------+

|     1 |

+-------+

1 row in set (0.00 sec)

# 查看当前年份

mysql> select year(now());

+-------------+

| year(now()) |

+-------------+

|        2024 |

+-------------+

1 row in set (0.00 sec)

# 查看当前秒

mysql> select second(now());

+---------------+

| second(now()) |

+---------------+

|            53 |

+---------------+

1 row in set (0.00 sec)

# 在表中插入时间戳,记录每次修改的时间

mysql> insert into product (name, price,qty) values(now(),7.8,90);

Query OK, 1 row affected (0.00 sec)

|  3 | 菠萝                |  12.4 | 600 |

|  4 | 哈密瓜              |  18.2 | 700 |

|  5 | 2024-08-07 15:33:09 |   7.8 |  90 |

+----+---------------------+-------+-----+

5 rows in set (0.00 sec)

=========数字函数=======

mysql> select floor(3.14);

+-------------+

| floor(3.14) |

+-------------+

|           3 |

+-------------+

1 row in set (0.00 sec)

# 向上取整

mysql> select ceiling(9.5);

+--------------+

| ceiling(9.5) |

+--------------+

|           10 |

+--------------+

1 row in set (0.00 sec)

# 四舍五入

mysql> select round(8.1);

+------------+

| round(8.1) |

+------------+

|          8 |

+------------+

1 row in set (0.00 sec)

=========字符串函数=======

mysql> select trim("a b");

+-------------+

| trim("a b") |

+-------------+

| a b         |

+-------------+

1 row in set (0.00 sec)

三、Mysql分组查询:

1、语法:

select 聚合函数(表头名 1),表头名 2 from 数据表名 group by 表头名;

select 聚合函数(表头名) 临时表头名,真实表头名 from 数据表名

group by 真实表头名;

若⽤ group by 分组查询语句,必须加⼊聚合函数,否则报错(踩坑)

=========举例=========

#新建⼀个学表,表头有:序号,数字形式;姓名,⽂本字符串形式;年龄,数字形式班级,数字形式。

mysql> create table 学生表(序号 int,姓名 char(16),年龄 int,班级 int);

Query OK, 0 rows affected (0.01 sec)

#展示学表表头信息

mysql> desc 学生表;

+--------+----------+------+-----+---------+------

-+

| Field | Type | Null | Key | Default | Extra

|

+--------+----------+------+-----+---------+------

-+

| 序号 | int(11) | YES | | NULL |

|

| 姓名 | char(16) | YES | | NULL |

|

| 年龄 | int(11) | YES | | NULL |

|

| 班级 | int(11) | YES | | NULL |

|

+--------+----------+------+-----+---------+------

-+

4 rows in set (0.00 sec)

#向学表内插⼊学升高信息

insert into 学生表 values(1,'tom',15,101);

insert into 学生表 values(2,'mike',16,102);

insert into 学生表 values(3,'john',14,103);

insert into 学生表 values(4,'lili',15,102);

insert into 学生表 values(5,'jack',15,101);

insert into 学生表 values(6,'xiaoming',17,103);

#查看表内学信息

mysql> select * from 学生表;

+--------+----------+--------+--------+

| 序号 | 姓名 | 年龄 | 班级 |

+--------+----------+--------+--------+

| 1 | tom | 15 | 101 |

| 2 | mike | 16 | 102 |

| 3 | john | 14 | 103 |

| 4 | lili | 15 | 102 |

| 5 | jack | 15 | 101 |

| 6 | xiaoming | 17 | 103 |

+--------+----------+--------+--------+

6 rows in set (0.00 sec)

#计算所有学平均年龄,avg:计算平均值,计算⾮数字,结果为0

mysql> select avg(年龄) from 学生表;

+-------------+

| avg(年龄) |

+-------------+

| 15.3333 |

+-------------+

1 row in set (0.00 sec)

#通过group by语法计算每个班的学平均年龄

mysql> select avg(年龄) from 学生表 group by 班级;

+-------------+

| avg(年龄) |

+-------------+

| 15.0000 |

| 15.5000 |

| 15.5000 |

+-------------+

3 rows in set (0.00 sec)

#“平均年龄”:这个是⾃⼰临时命名的表头名,也可以不写,那么就是下⾯的效果

mysql> select avg(年龄) 平均年龄,班级 from 学生表

group by 班级;

+--------------+--------+

| 平均年龄 | 班级 |

+--------------+--------+

| 15.0000 | 101 |

| 15.5000 | 102 |

| 15.5000 | 103 |

+--------------+--------+

3 rows in set (0.00 sec)

#avg也可以改成min最⼩值、max最⼤值、sum加法函数等运算⽅式

mysql> select avg(年龄),班级 from 学⽣表 group by 班级;

+-------------+--------+

| avg(年龄) | 班级 |

+-------------+--------+

| 15.0000 | 101 |

| 15.5000 | 102 |

| 15.5000 | 103 |

+-------------+--------+

3 rows in set (0.00 sec)

mysql> select min(年龄) 最⼩年龄,班级 from 学⽣表

group by 班级;

+--------------+--------+

| 最⼩年龄 | 班级 |

+--------------+--------+

| 15 | 101 |

| 15 | 102 |

| 14 | 103 |

+--------------+--------+

3 rows in set (0.00 sec)

#也可以⽤count统计函数计算每个班的总⼈数这些count、avg、max、min、sum就是聚合函数,分组查询必须有这些函数的其⼀

mysql> select count(*) 总⼈数,班级 from 学⽣表 group

by 班级;

+-----------+--------+

| 总⼈数 | 班级 |

+-----------+--------+

| 2 | 101 |

| 2 | 102 |

| 2 | 103 |

+-----------+--------+

3 rows in set (0.00 sec)

四、MySQL子语句查询

1、⼦查询是指⼀个查询语句嵌套在另⼀个查询语句内部的查询;该查询语句可以嵌套在⼀个 SELECT、SELECT...INTO、INSERT...INTO 等语句中。

2、在执⾏查询时,⾸先会执⾏⼦查询中的语句,再将返回的结果作为外层查询的过滤条件。

3、在⼦查询中通常可以使⽤⽐较运算符和 IN、EXISTS、ANY、ALL 等关键字。

例如:select * from class where cid=(select classid from

student where sname='张三');

1)⽐较运算符的⼦查询:也就是⽤“=”、“<”、“>”这类⽐较运算符

mysql> select sum(zj) from (select *,price*qty as zj from producct) as b;

+-------------------+

| sum(zj)           |

+-------------------+

| 26880.00030517578 |

+-------------------+

1 row in set (0.00 sec)

======举例=======

# 创建班级表

mysql> create table class(cid int(4) not null

primary key, cname varchar(20));

Query OK, 0 rows affected (0.05 sec)

# 创建学⽣表

mysql> create table student (sid int(4) not null

primary key, sname varchar (20), sage int (2),

classid int (4) not null);

Query OK, 0 rows affected (0.03 sec)

# 向班级表插⼊数据

insert into class values(1001,'Java');

insert into class values(1002,'C++');

insert into class values(1003,'Python');

insert into class values(1004,'PHP');

insert into class values(1005,'Android');

# 向学⽣表插⼊数据

insert into student values(1,'张三',20,1001);

insert into student values(2,'李四',21,1002);

insert into student values(3,'王五',24,1003);

insert into student values(4,'赵六',23,1004);

insert into student values(5,'⼩明',21,1001);

insert into student values(6,'⼩红',26,1001);

insert into student values(7,'⼩亮',27,1002);

#查询张三同学所在班级的信息

mysql> select * from class where cid=(select

classid from student where sname='张三');

+------+-------+

| cid | cname |

+------+-------+

| 1001 | Java |

+------+-------+

1 row in set (0.00 sec)

# 查询⽐张三同学所在班级编号还⼤的班级的信息

mysql> select * from class where cid>(select

classid from student where sname='张三');

+------+---------+

| cid | cname |

+------+---------+

| 1002 | C++ |

| 1003 | Python |

| 1004 | PHP |

| 1005 | Android |

+------+---------+

4 rows in set (0.03 sec)

2)exists 关键字的⼦查询

exists 关键字后⾯的参数可以是任意⼀个⼦查询, 它不产⽣任何数据只返回 true 或 false。⽽当返回值为 true 时外层查询才会执⾏。相当于内层句⼦是⼀个判断句式。

# 假如王五同学在学⽣表中则从班级表查询所有班级信息。

mysql> select * from class where exists (select *

from student where sname='王五');

+------+---------+

| cid | cname |

+------+---------+

| 1001 | Java |

| 1002 | C++ |

| 1003 | Python |

| 1004 | PHP |

| 1005 | Android |

+------+---------+

5 rows in set (0.00 sec)

五、MySQL 多表联合查询

1、交叉连接查询:

交叉连接返回的结果是被连接的两个表中所有数据⾏的笛卡尔积;

⽐如:集合A={a,b},集合B={0,1,2},则集合A和B的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)所以,交叉连接也被称为笛卡尔连接。

语法:

select * from 表1 cross join 表2;

#两个表交叉连接,class表的cid和student表的classid相乘

mysql> select * from student cross join class;

+-----+--------+------+---------+------+---------+

| sid | sname | sage | classid | cid | cname |

+-----+--------+------+---------+------+---------+

| 1 | 张三 | 20 | 1001 | 1001 | Java |

| 1 | 张三 | 20 | 1001 | 1002 | C++ |

| 1 | 张三 | 20 | 1001 | 1003 | Python |

| 1 | 张三 | 20 | 1001 | 1004 | PHP |

| 1 | 张三 | 20 | 1001 | 1005 | Android |

| 2 | 李四 | 21 | 1002 | 1001 | Java |

| 2 | 李四 | 21 | 1002 | 1002 | C++ |

| 2 | 李四 | 21 | 1002 | 1003 | Python |

| 2 | 李四 | 21 | 1002 | 1004 | PHP |

| 2 | 李四 | 21 | 1002 | 1005 | Android |

| 3 | 王五 | 24 | 1003 | 1001 | Java |

| 3 | 王五 | 24 | 1003 | 1002 | C++ |

| 3 | 王五 | 24 | 1003 | 1003 | Python |

| 3 | 王五 | 24 | 1003 | 1004 | PHP |

| 3 | 王五 | 24 | 1003 | 1005 | Android |

| 4 | 赵六 | 23 | 1004 | 1001 | Java |

| 4 | 赵六 | 23 | 1004 | 1002 | C++ |

| 4 | 赵六 | 23 | 1004 | 1003 | Python |

| 4 | 赵六 | 23 | 1004 | 1004 | PHP |

| 4 | 赵六 | 23 | 1004 | 1005 | Android |

| 5 | ⼩明 | 21 | 1001 | 1001 | Java |

| 5 | ⼩明 | 21 | 1001 | 1002 | C++ |

| 5 | ⼩明 | 21 | 1001 | 1003 | Python |

| 5 | ⼩明 | 21 | 1001 | 1004 | PHP |

| 5 | ⼩明 | 21 | 1001 | 1005 | Android |

| 6 | ⼩红 | 26 | 1001 | 1001 | Java |

| 6 | ⼩红 | 26 | 1001 | 1002 | C++ |

| 6 | ⼩红 | 26 | 1001 | 1003 | Python |

| 6 | ⼩红 | 26 | 1001 | 1004 | PHP |

| 6 | ⼩红 | 26 | 1001 | 1005 | Android |

| 7 | ⼩亮 | 27 | 1002 | 1001 | Java |

| 7 | ⼩亮 | 27 | 1002 | 1002 | C++ |

| 7 | ⼩亮 | 27 | 1002 | 1003 | Python |

| 7 | ⼩亮 | 27 | 1002 | 1004 | PHP |

| 7 | ⼩亮 | 27 | 1002 | 1005 | Android |

+-----+--------+------+---------+------+---------+

35 rows in set (0.00 sec)

2、多表联合查询

语法:select 查询字段1,查询字段2, ... from 表1 join 表2 join ...

on 表1.关系字段=表2.关系字段=...;join:联合;on:条件

# 查询学⽣姓名及其所学习的学科

mysql> select sname,cname from student inner join

class on student.classid=class.cid;

+--------+--------+

| sname | cname |

+--------+--------+

| 张三 | Java |

| 李四 | C++ |

| 王五 | Python |

| 赵六 | PHP |

| ⼩明 | Java |

| ⼩红 | Java |

| ⼩亮 | C++ |

+--------+--------+

7 rows in set (0.00 sec)

六、MySQL 授权

1、MySQL 基础

2、权限语法:

# 为客户机授权

grant all on test.user

# grant all on 库.* to ⽤户@客户机地址 identified by '密码';all:表示所有权限,可替换为其他权限库.*:表示某个数据库下所有数据表⽤户@客户机地址:表示希望给予哪个用户权限,前⾯的⽤户是临时⾃建⽤户,当客户机登录时,⽤该⽤户登录'密码':临时⾃建⽤户的密码,也是临时⾃写的。

#查看给予客户机的权限

show grants for ⽤户@客户机地址

# 取消权限

revoke 权限列表 on 库.* from ⽤户@客户机地址;

# 刷新权限

flush privileges;(重新加载权限表)

# 删除临时用户

drop user '⽤户名'@'客户机地址';

========举例==========

# 为haha⽤户进⾏授权

mysql> grant all on *.* to haha@'192.168.100.%'

identified by '123456';

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges; # 刷新权限

Query OK, 0 rows affected (0.00 sec)

# 查看haha的权限

mysql> show grants for haha@'192.168.100.%';

+-------------------------------------------------

------+

| Grants for haha@192.168.100.% |

+-------------------------------------------------

------+

| GRANT ALL PRIVILEGES ON *.* TO

'haha'@'192.168.100.%' |

+-------------------------------------------------

------+

1 row in set (0.00 sec)

# 删除

mysql> drop user haha@'192.168.100.%';

Query OK, 0 rows affected (0.00 sec)

mysql> show grants for haha@'192.168.100.%';

ERROR 1141 (42000): There is no such grant defined

for user 'haha' on host '192.168.100.%'

七、MySQL 触发器

1、概念:触发器是⼀种特殊的存储过程,它在插⼊,删除或修改特定表中的数据时触发执⾏,它⽐数据库本身标准的功能有更精细和更复杂的数据控制能⼒。例如在某⼀个时间触发什么事情 、不允许股票价格的升幅⼀次超过%10 、审计功能,某⼀个⼈登录会记录所有的操作。

2、触发器语法:

create trigger 触发器名称 触发的时机 触发的动作 on 表名 for each row 触发器状态。 其中触发器名称自定义;

触发的时机:before(之前) 或 after(之后),在执⾏动作之前还是之后;

触发的动作:指的激发触发程序的语句类型<insert,update,delete>(插⼊、更新、删除表或数据等);

each row:操作的每⼀⾏都会被监控;

触发器状态:在触发的动作之前或之后做什么事情,⽐如当我删了表 1 的某条数据后,⾃动清空表2。

3、触发器创建的四要素

(1)监视地点:table(表)

(2)监视事件:insert(插⼊)、update(更新)、delete(删除)

等动作

(3)触发时间:before(之前)、after(之后)

(4)触发事件:在监视事件之前或之后,对当前表或其他表的插

⼊、更新、删除等动作

4、触发器实例

#查看数据库内的所有表

mysql> show tables;

+--------------+

| Tables_in_yh |

+--------------+

| class |

| it |

| student |

+--------------+

3 rows in set (0.00 sec)

#创建触发器规则

#命令⼤意:创建名为deltable的触发器,在执⾏每⼀条的删除class表命令之后,删除student表。

mysql> create trigger deltable after delete on

class for each row delete from student;

Query OK, 0 rows affected (0.00 sec)

#查看触发器

mysql> show triggers\G;

*************************** 1. row

***************************

 Trigger: deltable

 Event: DELETE

 Table: class

 Statement: delete from student

 Timing: AFTER

 Created: 2023-09-26 20:46:24.53

 sql_mode:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_

DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AU

TO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 Definer: root@localhost

character_set_client: utf8

collation_connection: utf8_general_ci

 Database Collation: latin1_swedish_ci

1 row in set (0.00 sec)

ERROR:

No query specified

#查看当前数据库下的所有数据表

mysql> show tables;

+--------------+

| Tables_in_yh |

+--------------+

| class |

| it |

| student |

+--------------+

3 rows in set (0.00 sec)

#查看⼀下class表的内容,因为要⽤该表做示范

mysql> select * from class;

+------+---------+

| cid | cname |

+------+---------+

| 1001 | Java |

| 1002 | C++ |

| 1003 | Python |

| 1004 | PHP |

| 1005 | Android |

+------+---------+

5 rows in set (0.01 sec)

#查看⼀下student表的内容,因为要⽤该表做示范

mysql> select * from student;

+-----+----------+------+---------+

| sid | sname | sage | classid |

+-----+----------+------+---------+

| 1 | mike | 17 | 1001 |

| 2 | john | 18 | 1002 |

| 3 | lili | 19 | 1003 |

| 4 | zhangsan | 20 | 1004 |

| 5 | tom | 21 | 1005 |

+-----+----------+------+---------+

5 rows in set (0.00 sec)

#删除class表中cid为1005的整⾏数据,也就是执⾏之前设置的触

发动作

mysql> delete from class where cid=1005;

Query OK, 1 row affected (0.00 sec)

#因为触发器执⾏,所以student表的内容在class表的删除动作后

被清空

mysql> select * from student;

Empty set (0.00 sec)

#删除触发器

mysql> drop trigger deltable;

Query OK, 0 rows affected (0.00 sec)

八、MySQL基本优化操作

1、忘记 MySQL 密码

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

skip-name-resolve #添加该⾏,表示本机跳过MySQL密码验证

skip-grant-tables #添加该⾏,表示登录时,忽略所有的⽤户认证信息,包括⽤户名、密码和权限。

:wq

[root@localhost ~]# systemctl restart

mysqld.service

[root@localhost ~]# mysql      #免密时,直接使MySQL命令登录

mysql> use mysql;

mysql> update user set

authentication_string=password('123') where

user="root";

Query OK, 1 row affected, 1 warning (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 1

#更新MySQL⽤户“root”的密码为“123”等。如果⽤户名不叫“root”,那么最后的等号后⾯写你想要改的⽤户名。

mysql> select Host,user,authentication_string from

user;

#这条命令意为:算法对账户明文密码加密后的字符串,不用看,看不懂,没什么用。

+-----------+-----------+-------------------------

------------------+

| Host | user | authentication_string

|

+-----------+-----------+-------------------------

------------------+

| localhost | root |

*C42CF059802456312318BB928C3334F1A6133AB4 |

| localhost | mysql.sys |

*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |

+-----------+-----------+-------------------------

------------------+

2 rows in set (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> exit

Bye

[root@localhost ~]# mysql -uroot -p123

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值