MySQL学习日志

2018 / 7 / 5


《mysql必知必会》


1.基础概念

(1)数据库软件:DBMS(数据库管理系统)。 DBMS
(2)数据库:保存有组织的数据的容器。 DATABASE

二者关系:通常我们口头常说的mysql其实是指数据库软件。数据库是通过数据库软件创建和操纵的容器,数据库是文件还是别的什么东西并不重要,因为我们都是通过DBMS来操作数据库的,我们下达的指令由DBMS接收,它替我们完成对数据库的相应操作

(3)表:某种特定类型的数据的结构化清单。 TABLE

这里的特定类型的数据我理解为每张表都应该是用来描述同一类型的事物,比如说A部门有一个用来描述订单的表,B部门也要有一个这样的表,A和B就是不属于统一类型的,如果强行将这两张表结合在同一个表中,会造成检索困难,十分不方便。注意:同一个数据库不能有两张名字一样的表,但是不同的数据库的表可以有相同的名字。

(4)模式:关于数据库和表的布局及特性的信息。schema

表具有一些特性,这些特性定义了数据在表中如何存储,比如可以存储什么样的数据,各部分信息如何命名等。描述表的这组信息就是所谓的模式,模式可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)。这里描述很长,我也不是特别懂,这里我暂且将这个所谓的模式定义为每一个表的第一行,因为建立一个表,首先要规定每一列是属于什么类型的(数据类型、是否是主键、是否是自动增长等等),这样后面的数据就遵守这个规律填写。

(5)列:表中的一个字段。所有的表都是由一个或者多个列组成。 column
(6)行:表中的一个记录,也称为数据库记录。 row

我认为数据库就是利用一组数据来描述一个事物,有点类似于对象。列定义了该组数据的模式,行就是用来存储这一事物的,列于行的结合就定义并且存储了一个事物对象。而且一般对数据库查询操作时,列作为操作条件,行作为结果

(7)主键:一列(或一组列),其值能够唯一区分表中的每一行。 primary key

主键的关键定义就是该列里面没有相同的数据,只要满足这个定义就可以在一个表中设置多个主键,比如如果你以人的名字列作为主键,很可能会遇到两个叫张伟的人,这样对于查询数据很不方便,但是你可以用员工编号列和身份证列作为主键,因为这两个列都不可能存在相同的数据。

  • 不更新主键列中的值;
  • 不重用主键列的值;
  • 不在主键列中使用可能会更改的值

(8)其它

  • 每条sql语句必须以分号( ; )结尾
  • sql语句不区分大小写
  • 在处理sql语句时,其中所有的空格都被忽略,所以sql语句可以在一行或者多行给出,只要记住每一条后面要加结束符分号。

2.基础操作

登陆MySQL服务:

mysql -u 你的用户名 -p你的密码 -h 你的主机名 -P 你的端口号;

寻求帮助:

help;

(1)选择use

use yourDatabas;
use yourTable;

(2)了解数据库和表:show

show databases;          --列出可用的数据库
show tables;             --列出可用的数据表
show columns from yourTable;  --这就是显示上面提到的模式信息
desc yourTable;          --和上面一条命令相同
show errors;             --列出错误
show warnings;           --列出警告
show grants;             --用来显示授予用户(所有用户或者特定用户)的安全权限
show status;             --用于显示广泛的服务器信息
help show;               --用于显示show指令更多的信息

(3)检索数据库: select

select column1 from table1;  --检索单列
select distinct column1 from table1;  --在列名前面加入关键字distinct(如果有多列就作用于后面的所有列),使返回结果过滤掉值相同的数据,只显示不相同的数据。
select column1,column2,column3 from table1;  --检索多列
select * from table1; -- 使用通配符检索所有列,及其不推荐,影响效率

限制结果:

select column1 from table1 limit 5;  -- 只返回结果的前五行
select column1 from table1 limit 3,4 ;-- 返回从行3开始的4行
/*
 表的第一行为行0
 指定检索的最大行超过实际有的行数时,返回实际存在的行
 为了取消行0带来的困扰,有新的语法 limit 4 offset 3  == limit 3,4
 */
 select table1.column1 from database1.table1 ;
 /*
 如果你位于A数据库,但是想查看B数据库的C表D列就可以用这条语法:
 select c.d from b.c;   
 好处就是不用跳转数据库
 同理,如果你位于A数据库的E表,想查看同数据库下的F表G列:
 select F.G from F
 */

排序检索:

select column1 from table1 order by column2; --返回列1,排列顺序是按照列2的字母从小到大。
select column1,column2 from table1 order by column2 desc; --加上关键字desc表示倒序,返回列1和列2,排列顺序按照列2的从大到小。
/*
在mysql最近的版本里面以及取消了大小写的不同即a==A,如果你要
设置顺序a-z-A-Z可以让管理员修改相应的配置。
*/
select column1 from table1 order by column2 desc ,column3; --desc只作用于直接位于其前面的列。
select column from table1 order by column limit 1 ; --limit关键字应该位于order关键字后面。 

(4)过滤数据:

  • where 子句
select column1,column2 from table1 where column1 = 'xxx'; --返回列1和列2,条件是列1的某行=字符串xxx
select column1,column2 from table1 where column1 = 2.5; --注意这里没有单引号了,因为这里条件是数字类型不是字符串类型。
/*
如果你使用脚本语言,可能会习惯从服务器的数据库里面模糊的获取大量数据,然后再下载到
客户端,再在脚本里面过滤掉你不需要的值,这种做法不适合,因为这样不仅会降低脚本的效率
而且服务器传输了不必要的数据,使得网络带宽浪费。
*/
操作符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
between在两个指定值之间

不匹配检查:

select column from table where column2 <> 2.5;
--列出所有不等于2.5的列 

范围值检查:

select column1 from table1 where column2 between 2 and 5;
--列出行1,条件是行2的值只能在2到5之间

空值检查:

select column1 from table1 where column1 is NULL;
--列出行是空值null(一个列不包含值)的行
/*
在搜索时候,如果该列有空值null,也不会返回,因为null具有不确定性,因此在过滤数据时,
一定要验证返回数据中确实给出了被过滤列具有null的行,最好是使用上面一条命令。

操作符:and / or / in / not

select column1 from table1 where column2 !=2 and column3 = 3;
select column1 from table1 where column2 !=2 or column3 = 3;
select column1 from table1 where column2 !=2 or column3 = 3 and column >3;
/* 
这里同时具有andor,但sql语句里面计算次序是优先and而后是or,所以这里等同于
select column1 from table1 where column2 !=2 or (column3 = 3 and column >3);
*/
--为了消除计算次序的歧义,强烈建议使用圆括号进行分组计算。
select column1 from table1 where column2 in ('xxx',2,3);
--in操作符会作用于后面的集合,只要满足集合的列都会被列出来。这里列出column2='xxx',column2=2,column2=3的列
--效果等同于or操作符,但是它的处理效率高于or操作符
--not和in组合一起使用

like操作符

% :匹配0或多个

select column1 from table1 where column2 like 'js%' order by column3;
 --匹配列1的值以js开头的列2的值,比如 Js123 , jshhh ,Jsx5 ,js 并且按列3的大小进行排序
 --(如果不进行设置。默认是不区分大小写的)
select column1 from table1 where column2 like '%js%';
--匹配 12js25 ,axJsk,kjs,jsk
select column1 from table1 where column2 like '%js';
--注意 % 匹配不到null,但是可以匹配到空格

_ : 下划线匹配一个字符,不能多也不少

select column1 from table1 where column2 like '_js';
--匹配 1js , ajs ,3Js 等

正则表达式 regexp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值