MySQL是一种关系型数据库 (RDBMS:Relational Database Management System)
RDBMS 术语
数据库:数据库是一些关联表的集合
数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同类型的数据(eg.邮政编码的数据)
行:一行(=元组,一条记录)是一组相关的数据(eg.一条用户订阅的数据)
冗余:存储两倍数据(冗余降低了性能,但提高了数据的安全性)
主键:主键是唯一的。一个数据表中只能包含一个主键。用户使用主键查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
命令语句
登录MySQL
$ mysql -u root -p密码
退出MySQL服务器
exit;
显示所有数据库
show databases;
创建数据库
create database 数据库名称;
切换数据库
use 所要切换的数据库的名称;
显示数据库中的所有表
show tables;
创建数据表
create table 数据表名称 (
列名称 数据类型,
列名称 数据类型,
列名称 数据类型,
…
列名称 数据类型
);
查看数据表结构
describe 数据表名称;
desc 数据表名称;
查询表
select * from 数据表名称;
select * from 数据表名称 where < condition1 > (and/or) < condition2 >…; //按条件查询
select * from 数据表名称 where binary < condition1 > (and/or) < condition2 >…; //binary区分大小写
like语句
select * from 数据表名称 where 字段名 like 对应值(子串)
A: <%> 包含零个或多个字符的任意字符串:
1、like ‘Mc %’ 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、like ’ % inger’ 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、like’ %en% ’ 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
B:_(下划线) 任何单个字符:
like ’ ** _ ** heryl ’ 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
C:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:
1、like ’ [CK]ars[eo]n ’ 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
2、like’[M-Z]inger’ 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
D:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:
like ’ M[^c]% ’ 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
E: 它同于DOS命令中的通配符,代表多个字符:*
c*c代表cc,cBc,cbc,cabdfec等多个字符。
F:?同于DOS命令中的?通配符,代表单个字符 :
b?b代表brb,bFb等
G:# 大致同上,不同的是代只能代表单个数字。k#k代表k1k,k8k,k0k 。
:
eg1,查询name字段中包含有“明”字的。
select * from table1 where name like ‘%明%’
eg2,查询name字段中以“李”字开头。
select * from table1 where name like ‘李*’
eg3,查询name字段中含有数字的。
select * from table1 where name like ‘%[0-9]%’
eg4,查询name字段中含有小写字母的。
select * from table1 where name like ‘%[a-z]%’
eg5,查询name字段中不含有数字的。
select * from table1 where name like ‘%[!0-9]%’
select * from table1 where name like ’ *明 * ’ //列出来的是所有的记录
select * from table1 where name like ‘%明%’ //列出来的是name字段中含有“明”的记录
union语句
union :用于将不同表中相同列中查询的数据展示出来(不包括重复数据)
select 列名称 from 表名称
union
select 列名称 from 表名称
order by 列名称; // order by 根据指定的列对结果集进行排
union all :用于将不同表中相同列中查询的数据展示出来(包括重复数据)
select 列名称 from 表名称
union all
select 列名称 from 表名称
order by 列名称;// order by 根据指定的列对结果集进行排
带有where的union语句
select 列名称 from 表名称
where 列名称 = ‘对应值’
union all
select 列名称 from 表名称
where 列名称 = ‘对应值’
order by 列名称;
排序
select 列名称 from 表名称
(where 列名称 = ‘对应值’
union all
select 列名称 from 表名称
where 列名称 = ‘对应值’)
order by 列名称 (asc升序/desc降序)<默认升序>;
分组
eg. from菜鸟教程
mysql> SELECT * FROM employee_tbl;
±—±-------±--------------------±-------+
| id | name | date | singin |
±—±-------±--------------------±-------+
| 1 | 小明 | 2016-04-22 15:25:33 | 1 |
| 2 | 小王 | 2016-04-20 15:25:47 | 3 |
| 3 | 小丽 | 2016-04-19 15:26:02 | 2 |
| 4 | 小王 | 2016-04-07 15:26:14 | 4 |
| 5 | 小明 | 2016-04-11 15:26:40 | 4 |
| 6 | 小明 | 2016-04-04 15:26:54 | 2 |
±—±-------±--------------------±-------+
6 rows in set (0.00 sec)
mysql> SELECT name, COUNT(* ) <count 函数>FROM employee_tbl GROUP BY name;
±-------±---------+
| name | COUNT(*) |
±-------±---------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
±-------±---------+
3 rows in set (0.01 sec)
with rollup 实现在分组统计数据基础上再进行相同的统计
mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
±-------±-------------+
| name | singin_count |
±-------±-------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| NULL | 16 |
±-------±-------------+
4 rows in set (0.00 sec)
函数 : select coalesce(a,b,c);
说明:如果anull,则选择b;如果bnull,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
增加数据
insert into 数据表名称 values ('value1 ', 'value2 ', ‘value3’ , … , NULL);
修改数据
update 数据表名称 set 要改的列名称 = ‘新数据’
update 数据表名称 set 要改的列名称 = ‘新数据’ where 索引关键词 = ‘索引关键词的数据’ ;
//可以同时更新一个或多个
删除数据
delete from 数据表名称 where 要删除的列名称(索引关键词) = ‘索引关键词的数据’;
//如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除
删除表
drop table 表名称;