0
点赞
收藏
分享

微信扫一扫

aws-athena查询语句总结

kiliwalk 2024-11-18 阅读 11
笔记mysql

1. 安装

使用的为Ubantu系统,安装mysql的步骤如下所示:

1. 更新系统软件包

sudo apt update

2. 执行安装命令

sudo apt install mysql-server

安装的版本的msql-8.0.40,安装此版本的时候,mysql不会提示用户设置root密码;安装完成后,首先查看mysql服务是否启动:

sudo service mysql status
sudo systemctl status mysql

以上2条指令均可以查看mysql服务的状态。

如果mysql服务未启动,可启动mysql服务:

sudo service mysql start
sudo systemctl start mysql

mysql服务启动后,需要执行如下命令,对数据库进行初始化操作:

# 执行安全初始化脚本以增强安全性(例如:禁用匿名用户、删除测试数据库等)
sudo mysql_secure_installation

根据提示进行操作,包括设置root账户的新密码(可能不会提示)、禁止远程登录(如果不希望允许)、删除匿名用户、清空权限表、加载这些更改到MySQL服务器等。

进行完初始化操作之后,可登录root用户:

mysql -u root

可直接登录root用户(本人在实际操作时,不需要密码即可登录),登录root用户之后,需要执行如下命令,修改root用户的密码:

FLUSH PRIVILEGES;

alter user 'root'@'localhost' identified with mysql_native_password by 'xxxxx';

FLUSH PRIVILEGES;

2. 基本概念

  • 数据库:数据库时关系表的集合,一个数据库里面可以有多张关系表
  • 数据表:表是数据的矩阵,在一个数据库中的表看起来像一个简单的电子表格
  • 行:一行称为一条记录
  • 列:一列包含了相同的数据
  • 冗余:存储两倍数据,降低了性能,但是提高了数据的安全性
  • 主键:主键是唯一的,一个数据表中只能有一个主键,可以通过主键来查询数据
  • 外键:外键用于关联两个表
  • 复合键:也称为组合键,将数据表中的多个列作为一个索引键,一般用于复合索引
  • 索引:使用索引可以快速访问数据库表中的特定信息,索引是对数据表中的一列或者多列进行排序的一种结构,类似于书籍的目录。

3. 基本操作

mysql命令参数:

  • -s: 去边框,是指去掉show databases,show tables等命令输出内容的边框
  • -N:去标题,去边框,去标题后输出的数据,可以方便程序直接处理(虽然会导致可读性变差)
  • -e:可以指定登录后执行的mysql命令,mysql -u root -p 123 -e 'show databases;'  ,登录之后就会显示所有数据库

例如:

mysql -s -N -u root -p 123 -e 'show databases;'

# 将内容以xml的格式输出
mysql -s -N -u root -p 123 -e 'show databases;' -X

# 将输出内容保存至文件
mysql -s -N -u root -p 123 -e 'show databases;' -X >> /tmp/dbs.xml

登录数据库后输出,以无边框,无标题的形式输出所有数据库;也可以保存至文件。

显示帮助命令:

\h

显示所有数据库

show databases;

创建数据库

#创建数据库mydb
create database mydb charset utf8;

删除数据库

drop database if exist db_name

drop database db_name

查看数据表:

show tables;

创建数据表:

to be continue...

删除数据表:

# 立即删除指定的数据表,同时也删除与数据表相关联的索引、触发器和约束等。
drop table table_name;

# 会删除数据表中的所有数据,但保留数据表结构和与数据表相关联的索引、触发器
# 和约束等。请注意,这个方法只是删除数据,而不是删除整个数据表。
delete from table_name;

4. mysql日志

mysql有几种不同的日志文件,通常包括:

  • 错误日志 :记录mysql服务端在运行时产生的错误信息,以及启动,停止h的时间
  • 二进制日志:记录对数据库的增,删,改的SQL操作,可以使用这个日志做增量备份。
  • 查询日志:记录客户端连接和执行的语句
  • 慢查询日志:慢查询时间阈值,以秒为单位,如果超过这个阈值,就是慢查询,比如查询某条数据耗时大于2秒,大型查询
  • 事务日志:每次增删改操作时,都会把sql语句写进事务日志,只有innodb引擎才支持事务日志
  • 主从复制日志:relay-binlog,从机器从主机器复制过来的日志,根据日志来做数据同步

这些日志可以帮助我们定位mysql内部发生的事件,数据库性能故障,记录数据的变更历史等。

执行mysql指令,查询数据库中的版本信息:

# 通常用来查询mysql里面的配置
show variables like '%version%';

4.1 二进制日志管理

二进制日志(bin_log)记录了所有的增删改语句,但是不包括数据查询语句(查询语句记录在查询日志里面)。二进制日志描述数据更改的过程,该日志的主要功能为:数据恢复和数据复制。

二进制日志信息查询:

show variables like '%bin%';

可以看到bin_log是打开的状态。

bin_log是二进制文件,直接查看会出现乱码:

可以现在mysql中执行命令,查看所有的bin_log文件信息:

show binary_logs;

bin_log日志的属性:

在一下三种情况下,会生成新的bin_log日志:

  • 日志大小超过1G
  • 关闭mysql服务
  • 执行截断日志指令  
    flush logs;

二进制日志管理:

待补充 ....

4.2 查询日志

首先查看查询日志的信息:

show variables like '%general%';

可以看到查询日志的打开状态,以及日志文件的路径信息。

开启查询日志开启:

set @@global.general_log=1;

设置之后查看状态,已处于打开状态:

4.3 错误日志

错误日志默认是开启的,且应该无法关闭。

show variables like '%error%';


4.4 慢查询日志

慢查询日志是记录所有执行时间超过long_query_time的sql语句日志。在查询过程中,为了获得表锁而等待的时间,不算做sql语句的执行时间。可以通过slow_query_log来启动慢查询日志功能。可以通过慢查询日志的分析,来对sql语句进行优化。

show variables like '%slow%';

慢查询日志默认是关闭的,可通过如下的方式进行开启:

set @@global.slow_query_log=1;

慢查询的时间阈值:

修改变量long_query_time,即可修改慢查询的时间阈值。

5. sql使用

sql主要对数据库进行增删查改操作

5.1 创建数据表:
create database luno;
create table luno.user(id int, name varchar(10), age decimal(10, 2));

常用变量:

  • varchar 不定长字符串,所占内存为实际字符串的长度
  • char 定长字符串,所占内存为指定的固定长度
  • int 整型类型
  • decimal(10, 2)  十进制数,长度为10,小数点后两位

创建完成后,可查看数据表的结构:

describe user;

插入一条数据:

insert into user set id=1, name="zhangsan", age=30.5;

查询user数据表中的数据:

通过图下命令,可以创建一张结构和user一模一样的表,但是不会复制user表中的数据

create table user01 like user;

# 如果需要把数据复制进去
insert into user01 select * from user;
5.2 创建用户

创建用户,且不同的用户对数据库有不同的操作权限;

# 创建一个本机用户
create user username@'localhost' identified by 'password';

# 创建一个远程的用户,需要指定用户的hostname(ip地址)
create user username@'198.120.1.1' identified by 'password';

可以为创建的用户修改密码:

set password for username@'localhost'=password('123456');

例如,可通过以下命令实现用户创建:

create user opa@'localhost' identified by '123456@Mysql';

修改用户密码:

较新版本的sql数据库,使用set password命令设置用户密码会报错。

5.3 查看所有用户

Mysql数据库的用户都存储在mysql库的user数据表中,可通过如下命令进行查看:

select * from mysql.user\G;
select User, Host from mysql.user;

其中,/G表示对输出结果进行格式化,使其可读性更好。



5.4 用户权限

通过如下命令查看数据库中用户的权限:

show grants;
5.5 删除,修改数据库对象
  • 删除数据库
  • 删除数据表
  • 删除用户
  • 修改数据库编码方式
# 删除用户
drop user 'opa'@'localhost';

# 修改数据库字符集
alter database luno default character set latin1;

查看修改后的数据库字符集:

show create database luno;

修改数据表的属性,通过alter table指令修改数据表:

# 为数据表新增字段,first表示将新增字段放到数据表最前面
alter table user add dept varchar(20) first;

同样也可以通过alter table 指令 + drop 删除数据表的字段:

修改数据表的列名和数据类型:

# 修改数据表的id列名为ID, 数据类型修改为bigint
alter table user change id ID bigint

# 修改数据表某一列的数据类型为int
alter table user modify ID int;

# 重命名数据库
alter table user rename user01;

# 查看数据库有哪些存储引擎
show engines;

# 修改数据表的存储引擎
alter table user01 engine MyISAM;

可以通过指令以下命令,查看数据库支持的所有存储引擎:

show engines;

可通过show create table user01来查看数据库的存储引擎;

5.6 插入数据
insert into user01 set ID=2, name='lisi', age=12.4;

如果需要重复插入多条,可采用如下的命令,更加快速方便:

insert into user01(ID, name, age) values (3,'serman', 22), (5, 'xsc', 12), (6,'wangwu', 56.23);

也可以只插入某些字段的值;

可以通过如下命令,将一张表中满足条件的数据,重新插入一张新的表,达到数据筛选的目的

insert into user02 select * from user01 where ID>4;

将user01表中ID大于4的数据查询出来,插入到新的表user02中。

5.7 修改数据表的记录

通过update命令,可以对数据库中的值进行修改。

update user01 set name='yucgy' where id=5;

5.8 删除数据表中的记录

通过delete指令可以删除数据表中的记录

# 清空特定的记录,筛选条件
delete from user01 where id=1;

# 清空所有记录
delete from user01;

truncate也可以删除数据表中的记录,而且速度更快,且操作不会被记录到事务日志中(bin_log)

# 删除表中的特定记录
truncate user01 where id=3;

# 删除表中的所有记录
truncate user01;
5.9 查询语句

查询语句支持通配符与排序:

通配符

  • %    匹配0个或者任意多个字符
  • _     匹配一个字符
  • =     精确匹配
  • like  模糊匹配
  • regexp  正则表达式匹配

排序:

  • order  by    排序   [ asc | desc ]
  • group by    聚合
  • distinct      去除重复的行
select * from user01 where name like 'zhan%';

select * from user01 where name like 'lis_';

select * from user01 where name regexp '^z';

select * from user01 where id=4;

select * from user01 order by age desc limit 4;

# group by 不能使用where作为条件
select * from user01 group by age having id >= 20;

select id, name, (math+eng) as sum from testu order by sum desc;

select id, name, max(math+eng) as sum from testu;

聚合函数:

函数作用
COUNT计算数据表中的记录
SUM计算表中数据列的和
AVG计算表中数据列的平均值
MIN计算表中数据列的最小值
MAX计算表中数据列的最大值

逻辑运算:

  • and
  • or 
  • not

逻辑运算可以连接多个条件语句进行查询。

select * from testu where math>=60 and eng>=60;

select * from testu where math>=60 or eng>=60;

select子查询:

select * from testu where eng in (select min(eng) from testu);
5.10 数据表连接方式

笛卡尔积

select * from t1.t2;

多表查询,必须加上条件,负责输出的就是输出笛卡尔积

select t1.id, t1.name, t2.score from t1, t2 where t1.id=t2.id; 

左连接(以左表为标准,连接右表)

select * from t1 left outer join t2 on t1.id=t2.id;

右连接(以有表为标准,连接左表)

select * from t1 right outer join t2 on t1.id=t2.id;

内连接(取两个表之间的交集)

select * from t1 inner join t2 on t1.id=t2.id;

纵向连接(直接将两个表都打印出来)

select * from t1 union select * from t2;
5.11 列类型(字段类型)
  • tinyint(M)  小整数  范围0-255,-128-127; M可选项为:UNSIGNED,ZEROFILL
  • mediumint(M)  中等大小的整数, M可选项为:UNSIGNED,ZEROFILL
  • int(M) 普通大小的整数 ,M可选项为:UNSIGNED,ZEROFILL,integer与之同含义
  • bigint 大整数,M可选项为:UNSIGNED,ZEROFILL
  • decimal(7, 3)  浮点数,表示最大支持7位,小数点后精确到3位
  • date  表示日期
  • datetime 表示日期时间
  • time 表示时间
5.12 表约束

表约束是一种限制,它通过对表的行或者列作出限制,来确保表数据的完整性和唯一性,在mysql中,一般有以下几种约束:

  • 非空约束  (如注册账户,用户名,密码) not null,创建表时指定
  • 唯一约束     (如注册账户,用户名,用户名不能重复注册)  unique 
  • 主键约束     PRIMARY KEY, 一般用于和外部其他数据表进行关联
  • 自增长        AUTO_INCREMENT
  • 默认约束
  • 外键约束   (用于关联表)
  • 表结构操作  (alter table tabname [add | drop | modify | change | rename])

唯一性约束:

# id 唯一约束
alter table user02 add unique(id);

主键约束:

主键保证记录的唯一性,主键自动为NOT NULL

每张数据表只能存在一个主键

当一张表没有主键的时候,第一个出现的具有非空,唯一约束的列,会被视为主键。

 create table user02(id int primary key, age tinyint unsigned not null, name varchar(20));

自增长:

AUTO_INCREMENT自动编号,必须与主键组合使用,默认情况下,起始值为1,每次增量为1。在数据表中插入数据时,如果为AUTO_INCREMENT数据列明确指定了一个值,则会出现以下情况:

  • 插入的值与已有的编号重复,则会出现错误信息,因为AUTO_INCREMENT数据列的值必须是唯一的。
  • 如果插入的值大于已有的编号,则会把该数据插入到表中,并且下一个插入的编号将从这个值开始,也就是说,这样插入会跳过一些编号。

默认约束:

为数据表的某一列设置默认值,在插入数据时,如果此列没有指定值,则会将设置的默认值插入对应的列中。

alter table user01  alter age set default 0;

外键约束:

外键约束要求数据表的存储引擎必须是innoDB;只有innoDB引擎支持外键约束。

可以在mysql配置文件中,修改数据库的配置文件,来执行数据表的默认存储引擎:

# 查看当前mysql数据库支持的所有引擎
show engines;

# 打开mysql配置文件
cat /etc/mysql/mysql.cnf

#新增默认配置
default-storage=engine=INNODB
# 保存文件

# 重启mysql服务
sudo service mysql restart

可以通过创建以下两张表,展示外键 约束:

# 创建数据表teacher
create table teacher(id int primary key auto_increment, name varchar(20) not null);

# 创建数据表student
create table student(id int primary key auto_increment, name varchar(20) not null, teacher_id int, foreign key(teacher_id) references teacher(id));

插入老师数据到数据库中:

 insert into teacher(name) values('zhang'), ('lisi'), ('wangwu'), ('lily'), ('tom');

插入学生数据到数据库中:

insert student(name, teacher_id) values ('ql1', 1), ('xsd', 3), ('ghj', 5);

例如,查找某个学校的老师:

select * from teacher where id=(select id from student where name='xsd');

5.13 数据表的关系

举报

相关推荐

0 条评论