DBA成长之路---mysql数据库服务(二)

管理表记录 

增加

insert into 库.表 values(字段值列表);

insert into 库.表(字段值列表) values(字段值列表);

insert into 库.表 values(字段值列表),(字段值列表);

查询

单表查询

select 字段名列表 from 库.表 where 条件;

条件匹配的表示方法

数值比较

字段名 符号 值 符号:>  >=  <  <=  =  !=

字符比较

字段名 符号 "值"   符号: =  !=

范围内匹配

字段名 in (值列表) 在...里

select id,name from user where name in ("apache","root","bob");

select id,name,uid from user where uid in (1,2,3,4);

字段名 not in(值类表) 不在...里

select name from user where uid not in(0,1,2,3,4,5);

字段名 between 值  and 值 在...之间(数值类型)

select * from user where id between 10 and 15;

select name from user where uid between 1 and 10;

匹配空  is null

字段名 is null

匹配非空  is not null

字段名  is not null

select id from user where name is null;

空的定义

insert into user(name) values (""),("null"),(null);

select id,name from user where name="";

select id,name from user where name="null";

select id,name from user where name is null;

mysql> select id,name from user where id between 45 and 47;

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

| id      | name    |

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

|  45    |               |

| 46     | null       |

| 47     | NULL   |

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

3 rows in set (0.00 sec)

不显示重复值

distinct 字段名

select shell from user;

select distinct shell from user;

mysql> select distinct shell from user;

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

| shell                           |

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

| /bin/bash                   |

| /sbin/nologin             |

| /bin/sync                    |

| /sbin/shutdown         |

| /sbin/halt                    |

| /bin/false                    |

| NULL                          |

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

7 rows in set (0.00 sec)

逻辑匹配: 有多个条件时

逻辑与  and   多个条件必须都成立

逻辑或 or 多个条件有一个成立即可

逻辑非  ! 取反

select id,name from user where name="zhangsan"and uid=500 and shell="/bin/bash";

运算操作  +  -  *  /  %

字段名 符号  字段名

select uid+gid as heid from user where name='root';

select uid+gid  heid from user where name='root';

模糊查询

where 字段名 like '表达式'

_匹配任意一个字符 % 0个或多个字符

select name from user where name like '____' and uid <= 10;

select name from user where name like '%a%';

正则匹配

where 字段名 regexp '正则表达式';

. ^  $   [ ]  *

mysql> select name,uid from user where uid regexp '^..$';

函数

简单筛选/统计

avg() 集合平均值

sum() 对集合的各参数求和

min() 集合中的最小值

max() 集合中的最大值

count() 记录的各数

查询排序

sql查询 order by 字段名 asc/desc(降序)

select name,uid from user where uid between 10 and 50 order by uid ;

查询分组

sql查询 group by 字段名

select shell from user where uid between 10 and 50 group by shell;

和不显示重复相似

查询限制显示行数 limit

select shell from user where uid between 10 and 50 limit 1;

select * from user limit 1; #显示查询的前一行

select * from user limit 2,3; #设置显示行范围  从第2行显示(行数开始为0行) 显示3行

多表查询

select 字段名列表 from 表名列表;笛卡尔集

select 字段名列表 from 表名列表 where 条件;

create table studb.t1 select name,uid,shell from user limit 3;

create table studb.t2 select name,uid,homedir from user limit 4;

select t1.*,t2.homedir from t1,t2 where t1.uid =t2.uid;

嵌套查询

where 嵌套查询:把内层的查询结果做为外层查询的查询条件

select 字段名列表 from 表名 where 条件 (select 字段名列表 from 表名 where 条件)

select name,uid from user where uid > (select avg(uid) from user);

select name from user where name in (select user from mysql.user);

复制表:作用:快速建表,备份表

create table 库.表 sql查询;

复制表

create database dbbak;

create table dbbak.user2 select * from user;

复制表没有源表的属性和键值

复制表结构

create table dbbak.user3 select * from user where 1=2;

连接查询

左连接查询

select 字段列表 from  表A left join 表B on 条件

右连接查询

select 字段列表 from  表A right join 表B on 条件

create table studb.t3 select name,uid,shell from user limit 3;

create table studb.t4 select name,uid,shell from user limit 5;

mysql> select * from t3 left join t4 on t3.uid=t4.uid; #以左为主 显示

mysql> select * from t3 right join t4 on t3.uid=t4.uid; #以右为主 显示

修改

    批量修改

update 库.表 set 字段名=值,字段名='值'

mysql> update user set age="18";

修改指定记录字段的值

update 库.表 set 字段名=值,字段名='值' where 条件

mysql> update user set name="zhangsan" where id=48;

删除

以行为删除单位

delete from 库.表 where 条件;

mysql> delete from user where shell is NULL;

mysql 键值(限制如何给字段赋值)

普通索引 index

什么是索引 : 类似“一个书的目录” 树型目录结构

索引的优点 : 加快查询的速度

索引的缺点 : 减慢写的速度 (insert update delete);占用物理存储空间

使用普通索引  索引index

        索引的使用规则

默认可以重复,可以赋NULL值

可以由多个index字段

把查询条件做为索引

查看 decs 表名;

show index from 表名;

标志 MUL

        创建

建表时创建索引:

mysql> create table t25(

-> name char(10),

-> age int,

-> sex enum("boy","girl"),

-> index(sex) #索引名 默认和字段名相同

-> index(name)

-> );

在已有表创建索引 create index 索引名 on 表名(被赋索引的字段名)

mysql> create index age on t21(age);

mysql> show index from t21\G;

Table: t21

Non_unique: 1

Key_name: age

Seq_in_index: 1

Column_name: age

Collation: A

Cardinality: 4

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

默认使用的索引类型(Index_type):BTREE(二叉树)

还支持 hash B+TREE

删除 drop index 索引名 on 表名;

mysql> drop index a1 on t21;

fulltext 全文索引


unique 唯一索引

一个表中有多个unique字段

可以为空 但是有值不能重复

mysql> create table t211( stu_id char(9), name char(10), sex enum('boy','girl'), unique(stu_id) );

mysql> desc t211;

key标识是UNI

mysql> alter table t211 modify stu_id char(9) not null;

mysql> desc t211;

key标志是PRI 但是不是主键

mysql> drop index stu_id on t211;

创建 unique index

mysql> create unique index stu on t211(stu_id);

主键

主键使用规则

一个表中只能有一个primary key

不允许重复 不能为空

   查看 decs 表名;

标志 PRI

创建 建表时创建主键:

mysql> create table t26(

-> name char(10),

-> age int,

-> likes set("a","b","c"),

-> primary key(name)

-> );

mysql> create table t22(

-> id int primary key,

-> name char(10)

-> );

在已有表创建主键:

mysql> alter table t25 add primary key(name);

  删除 alter table 表名 drop primary key;

mysql> alter table t25 drop primary key;

复合主键 多个字段一起做主键 字段的值不允许同时重复

查看

mysql> desc t28;

建表时创建主键:

mysql> create table t28(

-> cip char(15),

-> port smallint,

-> status enum("allow","deny") defualt "deny",

-> primary key(cip,port)

-> );

在已有表创建主键:

mysql> alter table t28 add primary key (cip,port);

删除

mysql> alter table t28 drop primary key;

 主键一般 与auto_increment 连用

字段值自动增长

满足条件 主键 数值类型

创建表

mysql> create table t27(

-> id int(2) zerofill primary key auto_increment,

-> name char(10),

-> class char(4),

-> index (name)

-> );

删除自动增长的主键

mysql> alter table t27 modify id int(2) unsigned zerofill not null;

mysql> alter table t27 drop primary key;

外键 

作用:限制给字段赋值的。值必须在指定表中指定字段值的范围里选择

表的存储引擎必须是 innodb

字段类型要一致

被参照字段必须要是索引类型的一种

创建命令

foreign key(字段名) references 表名(字段名)

on update cascade 同步更新

on delete cascade 同步删除

update 表名 set 字段名=值  where 条件;

delete from 表名 where 条件

删除外键

mysql> show create table xsb; #查看建表命令

可以查看外键名

alter table 表名 drop foreign key 外键名

在已经创建的表上添加外键

alter table 表名 add foreign key(字段名) references 表名(字段名)

on update cascade 同步更新

on delete cascade 同步删除

mysql 服务的体系结构:(8个功能模块)

连接池:检查是否可以连接mysql

       sql接口: 执行的命令 传递给mysqld

分析器:分析语法错误

优化器:优化执行命令

查询缓存:数据库的物理内存划分出的 每次查询 先找查询缓存

存储引擎

文件系统

      管理工具:安装mysql给提供的一些软件工具

mysql存储引擎:

存储引擎介绍

mysql 数据库服务软件自带的程序。

不同的存储引擎有不同的功能和数据存储方式

查看数据库服务支持的存储引擎

mysql> show engines;

| InnoDB             | DEFAULT | #default 默认存储引擎

| MyISAM             | YES     |

常用的存储引擎

myisam

表.frm 表结构

表.MYI 索引信息

表.MYD 数据

支持表级锁(锁一张表)

不支持事务 不支持事务回滚

innodb

表.frm 表结构

表.ibd 表结构 索引信息

支持行级锁(只给当前被访问的行加锁)

支持事务 事务回滚

事务日志文件 :记录对innodb存储引擎的表执行过的操作

/var/lib/mysql/ib_logfile*

锁类型:读锁 select

写锁 insert delete update

锁粒度:行级锁  表级锁

锁作用:解决并发访问冲突问题

事务:一次从开始访问到访问结束的过程

事务回滚:一次数据访问 任意一步执行失败,恢复所有操作。

事务的特性:一致性,原子性,隔离性

最典型的事务操作:银行转账

工作如何决定表使用的存储引擎

接收写操作多的表适合使用innodb存储引擎。(并发访问大)

接收读操作多的表适合使用myisam存储引擎。(节省资源)

设置数据库服务的存储引擎

设置服务的默认存储引擎

[mysqld]

defaulf-storage-engine=myisam

mysql> create table tt1(id int(2));

mysql> show create table tt1;

...

| tt1   | CREATE TABLE `tt1` (

`id` int(2) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

...

修改表的存储引擎

alter table 表名 engine=存储引擎;

设置表的存储引擎

creat table 表名(...)engine=存储引擎;

数据管理

数据导入:把系统文件的内容存储到数据库的表里

/etc/passwd studb.user

用户名 密码占位符 UID GID  描述信息  家目录   shell

create database studb;

create table studb.user(

name char(50),

password char(1),

UID int(2),

GID int(2),

comment varchar(100),

homedir char(100),

shell char(25)

)engine=innodb;

select * from studb.user;

load data infile '目录/文件名' into table '库.表名' fields terminated by "字段间隔符号" lines terminated by "行间隔符号"

查看默认使用目录及目录是否存在

mysql> show variables like "secure_file_priv";

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

| Variable_name            | Value                                          |

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

| secure_file_priv           | /var/lib/mysql-files/                    |

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

[[email protected] ~]# cp /etc/passwd /var/lib/mysql-files/

[[email protected] ~]# setenforce 0

mysql> load data infile '/var/lib/mysql-files/passwd' into table user fields terminated by ":" lines terminated by "\n";

Query OK, 44 rows affected (0.04 sec)

Records: 44  Deleted: 0  Skipped: 0  Warnings: 0

修改默认使用目录

[[email protected] ~]# mkdir /myfile

[[email protected] ~]# chown mysql /myfile/

[[email protected] ~]# vim /etc/my.cnf

[mysqld]

secure_file_priv="/myfile"

[[email protected] ~]# systemctl restart mysqld

mysql> show variables like "secure_file_priv";

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

| Variable_name    | Value    |

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

| secure_file_priv | /myfile/ |

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

1 row in set (0.00 sec)

数据导出:把表记录存储到系统

sql 查询 into outfile "目录/文件名";

sql 查询 into outfile "目录/文件名" fields terminated by "字段间隔符号" lines terminated by "行间隔符号";

mysql> select name,UID from user limit 5 into outfile "/myfile/user1.txt";

[[email protected] ~]# ls /myfile/

user1.txt

[[email protected] ~]# cat /myfile/user1.txt #默认字段间隔符号为<tab>  默认行间隔符号"\n"

root 0

bin 1

daemon 2

adm 3

lp 4

mysql> select name,UID from user limit 5 into outfile "/myfile/user2.txt" fields terminated by "#" lines terminated by ":";

[[email protected] ~]# ls /myfile/

user1.txt  user2.txt

[[email protected] ~]# cat /myfile/user2.txt

root#0:bin#1:daemon#2:adm#3:lp#4:

原文地址:http://blog.51cto.com/13558754/2057391

时间: 2024-11-07 12:41:02

DBA成长之路---mysql数据库服务(二)的相关文章

DBA成长之路---mysql数据库服务基础(三)

mysql 密码恢复及设置 [[email protected] ~]# grep password /var/log/mysqld.log#mysql 启动后随机生成的初始密码 2017-12-20T02:36:18.623330Z 1 [Note] A temporary password is generated for [email protected]: 5h)>QAdqbI7t #使用初始密码登录 并重置密码   初始密码不能对数据库进行操作 需要重置密码 [[email prote

DBA成长之路---mysql数据备份与恢复

数据备份与恢复 备份方式: 物理备份:直接拷贝备份库和表对应的文件 cp -r /var/lib/mysql/mysql  /mysql.bak tar -zcvf /mysql.tar.gz  /varlib/mysql/mysql/* 逻辑备份:执行备份时,根据已有的库和表生成对应的sql命令,把生成的sql命令存储到指定的备份文件里 备份策略: 完全备份: 备份所有数据(表,库,服务器) 差异备份:备份自完全备份后所新产生(备份新产生的数据) 增量备份:备份自上一次备份后,所有新产生(备份

DBA成长之路---mysql主从同步,读写分离

主从同步 什么是主从同步: 让其他的数据库服务器自动同步正在提供服务的数据库服务器上 的数据. 1 添加授权用户 mysql> grant replication slave on *.* to [email protected]"192.168.4.4" identified by '123456'; 2启用binlog日志 [[email protected] ~]# vim /etc/my.cnf [mysqld] server_id=3 log-bin=master11

DBA成长之路---MySQL-MMM集群部署

MySQL-MMM集群部署 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的). mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动.此脚本需要在监管机上运行. mmm_agentd:运行在每个mysql服务器上的代理

DBA成长之路数据库设计之软件开发周期

软件开发周期介绍 大家要想学好sql语句,我们必须知道这些表怎么来的.怎么设计出来的,所以大家想学好数据库就必须先学数据库设计.本篇文章主要是引导学习数据库设计,描述大概的开发周期 软件开发周期介绍1:需求分析阶段...该阶段主要是分析客户的业务和数据处理需求此阶段尤其重要,如果需求分析没搞好到了开发阶段就麻烦了甚至推到整个项目从新分析需求. 软件开发周期介绍2:概要设计阶段:这里就开始数据库设计-E-R模型图,确认需求信息的正确完整: 软件开发周期介绍3: 详细设计阶段:将E-R图转为多张表,

python之路-----MySql操作二

一.主键 1.每个 表只有一个主键 2.每个主键可以由多个列组成.(如果主键由多个组成,只要有一行列值不等即可) CREATE TABLE NAME ( id INT auto_increment, NAME CHAR (20), sid int, PRIMARY KEY (id, sid) ); 插入数据(1,'a',1),主键值为:(1,1) ,插入(1,'b',2),主键为(1,2),两个主键值不完全相等即可 主键示例 二.唯一索引 唯一索引也是一种约束,约束内容为: 1.可以为空,但是不

大二女生web开发成长之路——讲述我从软妹子到女汉子的进阶过程

学习和实践前端一年时间,几乎天天在工作室和一群屌丝男程序员一起学习.开发.这种潜移默化的环境下,编码提高了,节操也细碎了. 一年前,娇滴滴的还是工作室里面小师妹一枚,软软的软件工程妹子,做不到人见人爱,但在这个据说男女比例8比1的学校中,仍是比较受欢迎群体——女生中的一员. 然而,    回想过去这一年,跟一帮大老爷们坐在一起讲蛋疼的笑话: 工作室聚餐中满怀“邪”意地企图把师兄们灌醉: 为了赶项目,可以经常和某位苦逼男一起debug到两三点,不亦乐乎: 男生唤我作欣姐,各种玩笑各种开,因为都不拿

二次元码农的成长之路(二)json到底有什么用途

写的有问题请指出 一.什么是json 1json指的是javaScript的表示方法 2JSON是轻量级的文本数据交换格式 3 Json是独立语言 4 json具有自我描述性 更易理解 二.语法规则 1对象表示为键值对 2数据由逗号分隔 3花括号保存对象 4方括号保存数组 比如{"name","Tom","age":"19"},{"student"=[{"name":"Tom&

苏宁人工智能研发中心智能创意平台架构成长之路(二)--大数据架构篇

苏宁人工智能研发中心智能创意平台架构成长之路(一)--长篇开篇 https://www.cnblogs.com/laoqing/p/11326132.html   我们接着第一篇继续. (这是第二篇大数据架构篇,成长之路序列会包含多篇,笔者作为这个平台的架构兼技术经理,充分讲述其中的迭代心酸之路以及中间遇到的问题和解决方案) 声明:文章不涉及公司内部技术资料的外泄,涉及的图片都是重画的简易架构图,主要通过架构的演进,讲述分享技术的迭代之路和过程. 在第二轮迭代完成后,第三轮迭代中,我们就开始做平