首页 > 数据库 >5、MySQL的SQL语言、数据库管理、数据类型及DQL的单、多表查询

5、MySQL的SQL语言、数据库管理、数据类型及DQL的单、多表查询

时间:2023-05-04 17:38:02浏览次数:41  
标签:多表 name students age 数据类型 查询 MySQL id select

进入mysql后,使用help列出的是客户端的命令,使用help contents列出服务端命令
SQL语句分类(DDL DML DQL要记住)
前三个重要(DDL、DML、DQL、  DCL、TCL)
DDL:Data Defination Language 数据定义语言
CREATE, DROP, ALTER(对数据库、表、视图、索引进行创建、删除和更改的工具ALTER改格式)

DML:Data Manipulation Language 数据操纵语言
INSERT, DELETE, UPDATE(对数据库中的表中的内容进行增、删、改的工具UPDATE改数据)

DQL:Data Query Language 数据查询语言
SELECT(对数据库中的表进行查询的工具)

DCL:Data Control Language 数据控制语言
GRANT, REVOKE

TCL:Transaction Control Language事务控制语言 
COMMIT, ROLLBACK, SAVEPOINT
字符集和排序

复习:如何查看linux系统使用的字符集

echo $LANG 查询结果为 en_US.UTF-8

早期MySQL版本默认字符集默认为Latin1,8.0版本开始默认为utf8mb4

查看MySQL支持的所有字符集 
SHOW CHARACTER SET;
查看当前默认字符集
show variables like 'character%';
设置服务器默认字符集
vim /etc/my.cnf
[mysqld]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
改完重启服务systemctl restart mysqld-service

排序字符集规则:
查看支持所有排序规则:SHOW COLLATION;
查看当前使用的排序规则:SHOW VARIABLES LIKE 'COLLATION%';

管理数据库

创建数据库
HELP CREATE 可查看创建类型  创建的数据库放在 /var/lib/mysql下,可二进制安装指定
CREATE DATABASE (IF NOT EXISTS可省略,加上不提示错误)db1; 后可指定字符集和排序规则
show database IF NOT EXISTS db3 CHARACTER SET 'UTF8MD4' collate utf8_bin; 
show warnings;            查看报警信息
show databases;           列出所有数据库列表
show create database db1; 查看当初创建数据库过程
修改数据库(一般很少,改字符集,而且只能由小改大,数据为空没事,可以改)
ALTER DATABASE DB_NAME character set utf8;
删除数据库
HELP DROP 查看drop帮助
如:drop database db1; 删除db1数据库
数据类型
MySQL支持多种内置数据类型(数值类型,日期/时间类型,字符串(字符)类型)

5、MySQL的SQL语言、数据库管理、数据类型及DQL的单、多表查询_mysql单、多表查询

选择正确的数据类型对于获得高性能至关重要,三大原则:

  1. 更小的通常更好,尽量使用可正确存储数据的最小数据类型
  2. 简单就好,简单数据类型的操作通常需要更少的CPU周期
  3. 尽量避免NULL,包含为NULL的列,对MySQL更难优化
整数型:(m)预留宽度,左右对齐
tinyint (m) 1个字节,范围2^8 (-128-127) 加修饰符 unsigned后范围(0-255)
smallint (m)2个字节,范围2^16 (-32768~32767) 加修饰符 unsigned后范围(0-65535)
mediumint (m)3个字节,范围2^24
int (m)4个字节 ,范围2^32
bigint (m)8个字节,范围2^64
浮点型:(float和double)     (m)预留宽度,左右对齐
浮点型为近似值,不精确,分为单精度和双精度 
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位, 注意: 小数点不占用总个数 double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位, 注意: 小数点不占用总个数
定点数:
在数据库中存放的是精确值,存为十进制 
格式 decimal(m,d) 表示 最多 m 位数字,其中 d 个小数,小数点不算在长度内 
比如:DECIMAL(6,2) 总共能存6位数字,末尾2位是小数,字段最大值 9999.99 (小数点不算在长度内)
字符串:其中(char,varchar,text)最常用 
char(n) 固定长度,最多255个字符,注意不是字节 如果n是10个字符,只能写10个,多了删掉
varchar(n) 可变长度,最多65535个字符 
tinytext 可变长度,最多255个字符 
text 可变长度,最多65535个字符 
mediumtext 可变长度,最多2的24次方-1个字符 
longtext 可变长度,最多2的32次方-1个字符 
BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节 
VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节 
内建类型:ENUM枚举, SET集合

char和varchar的比较:

5、MySQL的SQL语言、数据库管理、数据类型及DQL的单、多表查询_mysql账号密码创建及授权_02

追求高性能用char,追求节省空间用varchar,如果你字符里面的数据大小都比较接近,用char比较好,如果字符里面的数据差距比较大,可以用varchar,节省空间。

char是固定长度、varchar是可变长度。
如,char(4)和varchar(4)比较,char是不管存入多少个字符,都将占用4个字节,varchar(4)是存入的实际字符数+1个字节,最多是4+1个字节。
问:VARCHAR(50)能存放几个UTF8编码的汉字?
存放的汉字个数与版本相关.
mysql 4.0以下版本,varchar(50) 指的是 50 字节,如果存放 UTF8 格式编码的汉字时(每个汉字3字节),只能存放16 个. 
mysql 5.0以上版本,varchar(50) 指的是 50 字符,无论存放的是数字,字母还是 UTF8 编码的汉字, 都可以存放 50 个
修饰符
适用所有类型的修饰符:
NULL 数据列可包含NULL值,默认值 
NOT NULL 数据列不允许包含NULL值,相当于网站注册表中的 * 为必填选项 
DEFAULT 默认值 
PRIMARY KEY 主键,所有记录中此字段的值不能重复,且不能为NULL 
UNIQUE KEY 唯一键,所有记录中此字段的值不能重复,但可以为NULL 
CHARACTER SET name 指定一个字符集
适用数值型的修饰符:
AUTO_INCREMENT 自动递增,适用于整数类型, 必须作用于某个 key 的字段,比如primary key UNSIGNED 无符号

练习:cat /root/.mysql_history 查看mysql历史命令

create database db1; 创建db1数据库
use db1; 进入db1数据库

create table t1(id int unsigned auto_increment primary key) auto_increment= 4294967294;创建t1表,id设置为int、无符号、自动递增、主键,起始值4294967294
show table status from db1 like "t1" \G查看db1数据库中t1的表状态
insert into t1 values(null)增加默认值
select * from t1 查询t1表
+------------+
| id         |
+------------+
| 4294967294 |
+------------+
insert into t1 values(null)增加默认值
+------------+
| id         |
+------------+
| 4294967294 |
+------------+
| 4294967295 |
+------------+
insert into t1 values(null)增加默认值
ERROR 1062 (23000): Duplicate entry '4294967295' for key 'ti.PRIMARY'
上面表的数据类型无法存放所有数据,修改过数据类型实现
alter table t1 modify id bigint auto_increment;修改表t1的数值范围类型
DDL语句CREATE, DROP, ALTER(创建、删除和更改的工具)
创建表
三种格式:第一种常用
1、直接创建create table 名字     
2、借用其他表的查询结果创建新表create table 名字 as select * from 原表名
3、借用其他表的格式创建新表,内容不复制,只复制格式create table 名字 like 原表名
CREATE TABLE 创建表
CREATE TABLE [IF NOT EXISTSS] 'tbl_name (col1 typel修饰符,col2 type2 修饰符,)

Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎 同一库中不同表可以使用不同的存储引擎 同一个库中表建议要使用同一种存储引擎类型

切到数据库:
use db1;(数据库名字)

在数据库里创建表
CREATE TABLE student ( 
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL, 
age tinyint UNSIGNED, 
#height DECIMAL(5,2), 
gender ENUM('M','F') default 'M' 
)ENGINE=InnoDB AUTO_INCREMENT=10;
#创建表名 student
#字段:id  数据类型:int 正数:UNSIGNED 自动增长:AUTO_INCREMENT  主键:PRIMARY KEY默认不能为空
#字段:name 字符串:VARCHAR(20)  不能为空:NOT NULL
#字段:age 数据类型:tinyint 正数:UNSIGNED  (0-255之间)
#已注释掉,不生效
#字段:gender  枚举,多选一:ENUM('M','F') 默认default 'M'
#引擎:ENGINE=InnoDB默认值不用加    从10开始自动增长:AUTO_INCREMENT=10  默认字符集为utf8
查询表结构mysql> desc student;
+--------+------------------+------+-----+---------+----------------+
| Field  | Type             | Null | Key | Default | Extra          |
+--------+------------------+------+-----+---------+----------------+
| id     | int unsigned     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20)      | NO   |     | NULL    |                |
| age    | tinyint unsigned | YES  |     | NULL    |                |
| gender | enum('M','F')    | YES  |     | M       |                |
+--------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec) 

列出所有表:show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| student       |
| ti            |
+---------------+

在学生表中添加小明和年龄
insert student (name,age)values('xiaoming',20);
Query OK, 1 row affected (0.01 sec)
(root@localhost) [db1]>select *from student;查看学生表内容
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
| 10 | xiaoming |   20 | M      |
+----+----------+------+--------+
1 row in set (0.00 sec)
创建新表,使用 lantin1字符集
创建teacher表
CREATE TABLE teacher ( 
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL, 
age tinyint UNSIGNED, 
#height DECIMAL(5,2), 
gender ENUM('M','F') default 'M' 
)ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

插入内容:
mysql> insert teacher (name,age)values('xiaoming',20);
mysql> insert teacher (name,age)values('小红',18);
ERROR 1366 (HY000): Incorrect string value: '\xE5\xB0\x8F\xE7\xBA\xA2' for column 'name' at row 1
输入汉字会报错,所以不要乱换字符集
引用已经存在的表内容,创建新的表
引用student表,创建emp 表  as 
=(root@localhost) [db1]>create table emp as select * from student;
查询
=(root@localhost) [db1]>show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| emp           |
| student       |
| teacher       |
+---------------+
=(root@localhost) [db1]>select * from emp;
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
| 10 | xiaoming |   20 | M      |
| 11 | 小红     |   18 | M      |
+----+----------+------+--------+
引用已经存在的表格式,创建新的表
create table custom like student;
desc custom;
+--------+------------------+------+-----+---------+----------------+
| Field  | Type             | Null | Key | Default | Extra          |
+--------+------------------+------+-----+---------+----------------+
| id     | int unsigned     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20)      | NO   |     | NULL    |                |
| age    | tinyint unsigned | YES  |     | NULL    |                |
| gender | enum('M','F')    | YES  |     | M       |                |
+--------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
表查看
查看本数据库表:SHOW TABLES;
查看某一数据库表:SHOW TABLES FROM 数据库名;
查看表创建命令:show create table 表名;
查看数据库、表结构:DESC [db_name.]tb_name;
查看当前库表状态:SHOW TABLE STATUS LIKE '表名'\G  (数据垂直显示)
查看当前库所有表状态:SHOW TABLE STATUS\G
查看支持的engine类型(存储引擎):SHOW engines:
修改和删除表(表结构一般很少修改)
修改表(s1为表名)
修改表名:ALTER TABLE student s1;
添加字段:ALTER TABLE s1 ADD phone varchar(11) AFTER name;
在s1表中name的后面添加手机号码,字符长度为11
修改字段名称和类型:ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);
修改字段类型:ALTER TABLE s1 modify phone int;
删除字段:ALTER TABLE s1 DROP COLUMN mobile;
修改字符集:ALTER TABLE s1 character set utf8;
修改数据类型和字符集:ALTER TABLE s1 CHANGE name name varchar(20) character set utf8;
删除表:drop table 表名
删除数据库:drop database 数据库名
select @@innodb_file_per_table;可查看每张表是否是一个独立的文件,1是,0是在一个文件中
可在vim /etc/my.cnf中更改innodb_file_per_table=on|1
DML 语句(INSERT, DELETE, UPDATE对数据库中的表进行增、删、改的工具)
INSERT语句 增(insert into 表(字段) values(字段内容))
把windows的库文件拉到数据库中,两种方式
一:mysql < 文件
二:进入mysql中,source hellodb_innodb.sql
查看库:show databases;
进入库:use hellodb;
看库中的表:show tables;
看表中内容:select * from students;工作中慎用,表数据量太大,容易死机。
(重点掌握第一个方式,后两个方式了解一下)
方式一:insert into students values(26,'wangjingpeng',18,'M',1,null);  #into可省略
在学生表中加入信息,并把每一个信息依次按照格式输入,字符串需要用''引起来

id设置格式为自动增长,如果不写26,后面信息必须对应好,如下所示:
insert into students (name,age,classid) values('caizong',20,2),('heqingzhu',18,2);
方式二:insert students set name='wanghao',age=22,gender='M';了解就可以
方式三:把另外一张表查询出来插到表中,其中老师表和学生表id冲突,不在取这个值,让他自动增长
insert students (name,age,gender) select name,age,gender from teachers;
UPDATE语句 改(update 表 set 内容)
修改caizong的年龄和性别,前边修改,后边指定修改位置,如不指定位置,就是修改全局
update students set age=21,gender='M' where name='caizong';
修改学生表teacherid为1,null不能用=号,用is连接

注意:一定要有限制条件,否则将修改所有行的指定字段 可利用mysql 选项避免此错误:

vim/etc/my.cnf
[mysql]
safe-updates
DELETE语句 删(删除表中数据,但不会自动缩减数据文件的大小)
删除学生表中的songjiang,注意指定位置,要不然会删除整个内容
delete from students where stuid=30;
DQL语句 SELECT(对数据库中的表进行查询的工具)单表多表查询最为重要
单表操作(查询):
order by正排序
order by () desc倒排序
group by分组   where要在分组前     
limit取前值  limit 3,4跳过前三,往后取四个
挑出stuid,name,gender字段
select stuid,name,gender from students;
挑出stuid,name,gender字段中的女生
select stuid,name,gender from students where gender='F';
年龄小于等于20岁的
select stuid,name,age,gender from students where age <=20;
select stuid,name,gender,age from students where age between 18 and 20
年龄小于等于20岁,大于等于18岁的
select stuid,name,gender,age from students where age >=18 and age <=20;
以下操作都会显示出来
select stuid,name,gender,age from students where age >=18 or age <=20;
模糊查寻用like  查找Ren Yingying 其中%在mysql中代表通配符,表示任意字符串
select stuid,name,gender,age from students where name like 'Ren%';
模糊查询,如Xu Xian,其中有x包含在里面。可前后各一个%
select stuid,name,gender,age from students where name like '%x%';
把年龄重复的内容合并:select distinct age from students;
把合并后的年龄进行排序:select distinct age from students order by age;
把合并后的年龄从大到小排序:select distinct age from students order by age desc;
分组列出男女生的平均年龄:select gender,avg(age) from students group by gender;
where要在group by 之前,如果分组后再过滤的话,用having,如:
分组列出男女生平均年龄后再过滤出男生的平均年龄:
select gender,avg(age) from students group by gender having gender='M';
select gender,avg(age) from students where gender='M' group by gender;
select gender,avg(age) from students where gender='M';(不加也可以)
列出每个班级最大年龄的男女
select classid,gender,max(age) from students group by classid,gender;
多表操作(查询):

子查询:在SQL语句嵌套着查询语句,性能较差,基于某语句的查询结果再次进行的查询

如:学生表的年龄大于老师组平均年龄的人。
先查询老师表的平均年龄:select avg(age) from teachers;
学生表的年龄大于老师组平均年龄的人:
select * from students where age > (select avg(age) from teachers);
把孙大圣的年龄改成老师的平均年龄:
update students set age=(select avg(age) from teachers) where stuid=25;

联合查询:UNION(查询的内容可以不一样,但是列得一样多,分类排好查询)

对学生、老师表中的id、name、age进行联合查询
select stuid,name,age from students
    -> union
    -> select tid,name,age from teachers;

交叉连接:笛卡尔乘积 CROSS JOIN

表一有25个内容,表二有4个内容,表一的每条记录都与表二的每条记录组合,组合记录100条

如:select * from students cross join teachers;工作中不要随便用,数据太大。

内连接:INNER JOIN 取多个表的交集

查询学生表yeacherid和老师表中tid相同的
select * from students inner join teachers on students.teacherid=teachers.tid;
查询学生表yeacherid和老师表中tid相同的(只列出个表的id的name)
select stuid,students.name student_name,tid, teachers.name teacher_name from studentsdents inner join teachers on students.teacherid=teachers.tid;
+-------+--------------+-----+---------------+
| stuid | student_name | tid | teacher_name  |
+-------+--------------+-----+---------------+
|     1 | Shi Zhongyu  |   3 | Miejue Shitai |
|     4 | Ding Dian    |   4 | Lin Chaoying  |
|     5 | Yu Yutong    |   1 | Song Jiang    |
+-------+--------------+-----+---------------+
3 rows in set (0.00 sec)
列出stuid,学生名字段并对学生名的字段起别名,列出tid,老师名字段,并对老师名字段起别名

给表起别名:可缩写如下所示 查询结果如上所示
select stuid,s.name student_name,tid, t.name teacher_name from students s innerjoin teachers t on s.teacherid=t.tid;

左外连接:以左表为主根据条件查询右表数据﹐如果根据条件查询右表数据不存在使用null值填充(left join)

格式:from 表1 left join 表2 on 表1.col=表2.col
如:select * from students left join teachers on students.teacherid=teachers.tid;

右外连接:以右表为主根据条件查询左表数据﹐如果根据条件查询左表数据不存在使用null值填充(right join)

格式:from 表1 right join 表2 on 表1.col=表2.col
如:select * from students right join teachers on students.teacherid=teachers.tid;
右老师表只有四条记录,当学生表匹配老师表时,只有四条记录,有交集的列出,无交集的为null

完全外连接:(full outer join)但mysql不支持,换写法实现,左外连接加右外连接进行纵向连接

select * from students left join teachers on students.teacherid=teachers.tid
    -> union
    -> select * from students right join teachers on students.teacherid=teachers.tid;
格式:from 表1 full outer join 表2 on 表1.col=表2.col

去除交集的左外连接:就是在左外连接的基础上去掉带有交集的部分,为左外连接

如:查询学生表与老师表,条件为students.teacherid=teachers.tid,且去除这部分交集的内容
先查出学生表与老师表条件为students.teacherid=teachers.tid的左外连接
 select * from students left join teachers on students.teacherid=teachers.tid;
在命令tid后接着打tid is null;就可以啦

去除交集的右外连接:就是在右外连接的基础上去掉带有交集的部分,为右外连接

去除内连接:去除交集的左外连接加去除交集的右外连接

自连接:本表和本表进行连接查询

>select * from emp;
+--------+----------+-----------+
| emp_id | name     | leader_id |
+--------+----------+-----------+
|      1 | mage     |      NULL |
|      2 | zhangsir |         1 |
|      3 | wang     |         1 |
|      4 | zhang    |         3 |
|      5 | zhao     |         2 |
+--------+----------+-----------+
5 rows in set (0.00 sec)
把一张表分为两张表来看,并对每张表进行别名。分为e表和l表进行查询
(root@localhost) [hellodb]>select * from emp e inner join emp l on e.leader_id=l.emp_id;
+--------+----------+-----------+--------+----------+-----------+
| emp_id | name     | leader_id | emp_id | name     | leader_id |
+--------+----------+-----------+--------+----------+-----------+
|      2 | zhangsir |         1 |      1 | mage     |      NULL |
|      3 | wang     |         1 |      1 | mage     |      NULL |
|      4 | zhang    |         3 |      3 | wang     |         1 |
|      5 | zhao     |         2 |      2 | zhangsir |         1 |
+--------+----------+-----------+--------+----------+-----------+
4 rows in set (0.01 sec)
对表的姓名进行查询,并区别开每张表的姓名
select e.name emp_name,l.name leader_name from emp e inner join emp l on e.leader_id=l.emp_id;
+----------+-------------+
| emp_name | leader_name |
+----------+-------------+
| zhangsir | mage        |
| wang     | mage        |
| zhang    | wang        |
| zhao     | zhangsir    |
+----------+-------------+
mage没有了,把马哥显示出来,并把null改为无领导,用左外连接
select e.name emp_name,IFNULL(l.name,'WU SHANG JI') leader_name from emp e leftjoin emp l on e.leader_id=l.emp_id;
+----------+-------------+
|  emp_name | leader_name |
+----------+-------------+
| mage     | WU SHANG JI |
| zhangsir | mage        |
| wang     | mage        |
| zhang    | wang        |
| zhao     | zhangsir    |
+----------+-------------+

如果是三张表,先查询两张表,然后根据两张表的结果再查询三张表,如果表中的字段唯一,可不写表名

SELECT 语句处理的顺序

5、MySQL的SQL语言、数据库管理、数据类型及DQL的单、多表查询_mysql字符集设置_03

以下内容为辅助功能,工作中不建议使用,性能比较慢
VIEW视图

视图:虚拟表,保存有实表的查询结果,相当于别名(如果一张表的查询结果经常使用,就可以定义成视图)

利用视图,可以隐藏表的真实结构,在程序中利用视图进行查询,可以避免表结构的变化,而修改程序,降低程序和数据库之间的耦合度

创建方法:create view 起名 as 查询结果的命令
调出结果:select * from 起的视图名  
视图也是一张表,show tables;也可查看到视图表

查看表状态判断表是否是视图:show tables status\G 真的表都有存储引擎、大小等,视图都是空的。
只看一张表的信息:show tables status like '表名'\G
根据视图也可以更改原表的内容 update 表 set 内容
删除视图:drop view 视图名  
select count(*) from students;查看列有多少条记录,count不识别null,所以不用每列的字段名表示
FUNCTION 函数(函数不能独立执行,必须嵌套在select中执行)
自定义函数:create function 函数名(参数) returns   ,return 返回值
参数可以有多个,也可以没有参数 
无论有无参数,小括号()是必须的
必须有且只有一个返回值

在mysql中,函数要想定义,不能开启二进制默认,select @@log_bin_trust_functon_creatos;查询为0
改为1:set global log_bin_trust_functon_creatos=1

如:无参数自定义函数
create function simpleFun() returns varchar(20) return "hello world";
select simpleFun()=hello world
比如调用函数改名字:update students set name=simpleFun() where stuid=22;

有参数的自定义函数并修改参数结束符
DELIMITER //          (修改参数结束符命令+结束符号//,在看到;就不是结束符了)
CREATE FUNCTION addTwoNumber (x SMALLINT UNSIGNED, y SMALLINT UNSIGNED)数据类型,正数
RETURNS SMALLINT
BEGIN
DECLARE a, b SMALLINT UNSIGNED;
SET a=x,b=y;
RETURN a+b;
END//
DELIMITER ;
select addTwoNumber(1,2)对应里面的x和y
addTwoNumber(1,2)
3

addTwoNumber (x SMALLINT UNSIGNED, y SMALLINT UNSIGNED)定义函数用的参数叫形参
select addTwoNumber(1,2)真正执行用的参数,叫实参。
删除函数drop function 函数名
查看函数列表:show function status\G
PROCEDURE存储过程 (多表SQL的语句的集合,可以独立执行,存储过程保存在mysql.proc表中)
创建无参存储过程
DELIMITER //
CREATE PROCEDURE showtime()
BEGIN
SELECT now();
END// 
delimiter;
CALL showtime; CALL 调用存储过程的命令

创建含参数的存储过程:只有一个IN参数
DELIMITER //
CREATE PROCEDURE selectbyid(IN id smallint unsigned)
BEGIN
select * from students where stuid=id;
end//
delimiter;
call selectbyid(2);学生为10号的信息
触发器(工作中不建议用)
Event事件(相当于计划任务)开启和关闭event_scheduler(不建议用)
默认事件调度功能是关闭的,MySQL8.0默认是开启的
查询状态:select @@event_scheduler;1、on为开,0、off为关
更改状态(开启):set global event_scheduler=1;
临时开启时间调度功能后,会自动启动一个event_schedule线程,可用show processlist;查看线程
持久开启:vim/etc/my.cnf.d/mariadb-server.cnf 
[mesqld]
event_scheduler=ON
重启systemctl testart mariadb

创建周期化任务:(管理事件)

创建库 create database testdb;
use testdb;
database changed
创建一个表记录每次事件调度的名字和事件戳
create table evevts_list(event_name varchar(20) not null,event_started timestamp not null);
任务计划存放在mysql.event表中
查看select * from mysql.event\G

创建一个事件
create event event_every_second on schedule every 1 second do insert into events_list values('event_now', now());
查看事件:show events\G

标签:多表,name,students,age,数据类型,查询,MySQL,id,select
From: https://blog.51cto.com/mfc001/6243643

相关文章

  • MySQL事务
    前序原文链接1:https://cloud.tencent.com/developer/article/1899373MySQL有9种存储引擎,不同的引擎,适合不同的场景,常用引擎为InnoDB,它是MySQL的默认存储引擎。登录MySQL,执行showengines可以查询MySQL支持的存储引擎,如图示:1、InnoDB引擎(1)它事务型数据库的首选引擎,支持事务安全表(AC......
  • docker mysql 容器自动停止 -- docker update
    原因:mysql容器占用资源过高被系统杀死解决方法dockerupdate-m500M--memory-reservation500M--memory-swap1000M容器id/容器名说明-m限制内存最大值--memory-reservation是弹性控制内存大小,防止损失性能,建议要开。当宿主机资源充足时,允许容器尽量多地使......
  • PHP基础--mysqli的事务处理
    <?php//在命令行中:默认创建的表类型为MyISAM表类型,是不支持事务的//在命令行中建表时添加type=InnoDB,默认自动提交事务autocommit,不能回滚//创建连接对象$mysqlConn=newmysqli("localhost","root","root","test");if($error=$mysqli->connect_error){die("......
  • mysql - shell 执行 sql 文件有中文乱码-解决
    1.背景执行  发现部分中文乱码2.解决在执行sql语句之前,加入下面指令即可SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0; ......
  • MySQL 8.0半同步复制-net_flush()失败
    MySQL8.0.26做的增强半同步复制,log-error日志中出现如下报错:2021-12-28T14:04:24.663005+08:0011[ERROR][MY-011161][Repl]Semi-syncmasterfailedonnet_flush()beforewaitingforreplicareply.2021-12-28T14:51:49.217811+08:00413824[ERROR][MY-011161][Repl......
  • 一条SQL如何被MySQL架构中的各个组件操作执行的?
    摘要:一条SQL如何被MySQL架构中的各个组件操作执行的,执行器做了什么?存储引擎做了什么?表关联查询是怎么在存储引擎和执行器被分步执行的?本文带你探探究竟!本文分享自华为云社区《一条SQL如何被MySQL架构中的各个组件操作执行的?》,作者:砖业洋__。1.单表查询SQL在MySQL架构中的各个组......
  • mysql使用基础
    MYSQL学习,冲冲冲数据库学习的重要性是:各个网站媒体依赖的数据存储在数据库内。数据库:用来存储和管理数据的技术。在研发岗内需要使用,在面试题内出现--重要性。学习sql语言,使用mysql数据库,学习内容包括:事务,存储引擎,索引,sql优化,锁,日志,主从复制,读写分离,分库分表。基础篇:mysql概......
  • mac 创建Mysql数据库
    一、安装Mysql1、在mac上可以使用homebrew来安装mysql,打开终端输入命令brewinstallmysql2、安装完成之后,需要启动mysql服务brewservicesstartmysql3、mysql服务启动后,可以登录mysqlmysql-uroot-p注意⚠️首次登录时,需要设置root用户密码二、创建新的数据库1......
  • mysql学习笔记(动力节点)
    1.连接数据库1.1命令行连接mysql-uroot-p123456--连接flushprivileges;--刷新权限--所有的命令都采用分号结尾,切换不需要showdatabases;--查看所有的数据库mysql>useschool--切换数据库:use+数据库名Databasechangedshowtables;--查看数据库所有的表d......
  • mysql8备份恢复
    rpm-ivhhttps://repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm1、解压成流文件xbstream-x<backup-2022-07-29-13.xbstream-C/data/backmysql/2、还原正常MySQL文件xtrabackup--decompress--remove-original--parallel=4--target-dir=/dat......