MySQL高级-02

易管家 提交于 2019-12-03 10:18:02

MySQL高级

  • SQL查询总结

    3、select ...聚合函数 from 表名
    1、where ...
    2、group by ...
    4、having ...
    5、order by ...
    6、limit ...;
  • 聚合函数(铁三角之一)

avg(…) sum(…) max(…) min(…)
count(字段名)  # 空值NULL不会被统计

  • group by(铁三角之二)

给查询结果进行分组
如果select之后的字段名和group by之后的字段不一致,则必须对该字段进行聚合处理(聚合函数)

  • having语句(铁三角之三)

对查询的结果进行进一步筛选
注意
1、having语句通常和group by语句联合使用,过滤由group by语句返回的记录集
2、where只能操作表中实际存在字段,having可操作由聚合函数生成的显示列

  • distinct

select distinct 字段1,字段2 from 表名;

  • 查询时做数学运算

select 字段12,字段23 from 表名;

  • 索引(BTree)

优点 :加快数据检索速度
缺点 :占用物理存储空间,需动态维护,占用系统资源
SQL命令运行时间监测
1、开启 :mysql> set profiling=1;
2、查看 :mysql> show profiles;
3、关闭 :mysql> set profiling=0;

  • 普通(MUL)、唯一(UNI,字段值不能重复,可为NULL)

    创建
    index(字段名),index(字段名)
    unique(字段名),unique(字段名)
    create [unique] index 索引名 on 表名(字段名);

    查看
    desc 表名;
    show index from 表名\G;
    Non_Unique:1 :index
    Non_Unique:0 :unique

    删除
    drop index 索引名 on 表名; (只能一个一个删)

MySQL高级-Day02笔记

外键(见Day01笔记)

多表查询(见Day01笔记)

连接查询(见Day01笔记)

数据导入

作用

把文件系统的内容导入到数据库中
语法(方式一)

load data infile “文件名”
into table 表名
fields terminated by “分隔符”
lines terminated by “\n”
示例
scoretable.csv文件导入到数据库db2的表aid1903中

1、将scoretable.csv放到数据库搜索路径中
show variables like 'secure_file_priv';(/var/lib/mysql-files)
sudo cp /home/tarena/scoreTable.csv /var/lib/mysql-files/ (终端执行)
2、在数据库中创建对应的表
create table scoretab(
rank int,
name varchar(20) not null,
score float(5,2),
phone char(11),
class char(7)
)charset=utf8;

3、执行数据导入语句
load data infile '/var/lib/mysql-files/scoreTable.csv'
into table scoretab
fields terminated by ','
lines terminated by '\n';
4,在表中设置主键自增长,显示宽度为3,位数不够用0填充
数值类型 括号内的数字 表示显示宽度
int(3)  3表示显示宽度为3 与存储空间没有关系
int(3) zerofill  显示宽度为3位,位数不够用0填充

语法(方式二)

source 文件名.sql

数据导出

作用

将数据库中表的记录保存到系统文件里

语法格式

select … from 表名
into outfile “文件名”
fields terminated by “分隔符”
lines terminated by “分隔符”;

练习

把sanguo表中英雄的姓名、攻击值和国家三个字段导出来,放到 sanguo.txt中
select name,attack,country from sanguo
into outfile '/var/lib/mysql-files/sanguo.csv'
fields terminated by ','
lines terminated by '\n';
将mysql库下的user表中的 user、host两个字段的值导出到 user2.txt,将其存放在数据库目录下
select user,host from user
into outfile '/var/lib/mysql-files/user.csv'
fields terminated by '  '
lines terminated by '\n';

注意

1、导出的内容由SQL查询语句决定
2、执行导出命令时路径必须指定在对应的数据库目录下

表的复制

语法

create table 表名 select 查询命令;

练习

1、复制sanguo表的全部记录和字段,sanguo2
create table sanguo2 select * from sanguo;
2、复制sanguo表的前3条记录,sanguo3
create table sanguo3 select * from sanguo limit 3;
3、复制sanguo表的 id,name,country 三个字段的前3条记录,sanguo4
create table sanguo4 select id,name,country from sanguo limit 3;

注意

复制表的时候不会把原有表的 键 属性复制过来

复制表结构

create table 表名 select 查询命令 where false;

锁(mysql自动加锁和释放锁)

目的

解决客户端并发访问的冲突问题

锁类型分类

读锁(共享锁) :select 加读锁之后别人不能更改表记录,但可以进行查询
写锁(互斥锁、排他锁) :加写锁之后别人不能查、不能改

锁粒度分类

表级锁 :myisam  操作某条记录,整张表就锁住了
行级锁 :innodb 操作某条记录,仅这一条记录加锁

存储引擎

基本操作

1、查看所有存储引擎
2、查看已有表的存储引擎
3、创建表时指定存储引擎
4、已有表指定存储引擎

常用存储引擎特点

InnoDB特点

1、支持行级锁
2、支持外键、事务操作
3、表字段和索引同存储在一个文件中

MyISAM特点

1、支持表级锁
2、表字段和索引分开存储

如何决定使用哪个存储引擎

1、执行查操作多的表用 MyISAM
2、执行写操作多的表用 InnoDB

MySQL的用户账户管理

开启MySQL远程连接


添加授权用户

1、用root用户登录mysql
	mysql -uroot -p123456
2、授权
	grant 权限列表 on 库.表 to "用户名"@"%" identified by "密码" with grant option;

权限列表

all privileges 、select 、insert … …

库.表 : * . * 代表所有库的所有表

示例

1、添加授权用户tiger,密码123,对所有库的所有表有所有权限
2、添加用户rabbit,对db2库有所有权限

今日作业

1、把 /etc/passwd 文件的内容导入到数据库的表中

sudo -i
cd /
cp /etc/passwd /var/lib/mysql-files/

# 创建表passwd
mysql> create table passwd(
    -> username varchar(20),
    -> ispasswd char(4),
    -> userid int,
    -> groupid int,
    -> noteinfo varchar(100),
    -> workpath varchar(40),
    -> firstpro varchar(20)
    -> );
# 导入文件
   load data infile '/var/lib/mysql-files/passwd' 
   into table passwd 
   fields terminated by ':' 
   lines terminated by '\n';

原文:https://blog.csdn.net/weixin_45086881/article/details/92573261

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!