运维驿站js全栈工程师

mysql教程。挂一档,起步...

2017-11-08  本文已影响326人  她来听我的演唱会hez
我失去的,我一定要亲手拿来回来 ---小马哥

爱情不过是一种疯 --《罗密欧与朱丽叶》

目录


前言:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,

每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

RDBMS 术语

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:


Mysql数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。


一. mysql的安装

  alias mysql=/usr/local/mysql/bin/mysql
  alias mysqladmin=/usr/local/mysql/bin/mysqladmin
  1. 查看密码,注意,安装成功后,这里会弹出一个通知,给你一个零时的密码。


    Mac通知栏

5.重置密码; 先登录,输入通知栏的密码

localhost:~ hez$ mysql -uroot -p 
Enter password:

登陆成功显示


登陆成功

修改密码,退出数据,再次登陆输入密码123 登陆成功表示成功

mysql> set password for root@localhost = password('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> exit

安装么,就是有点坑!! ! 之前我安装阿里的weex,3天时间才吧安卓的hello,world打印出来


二. 数据库基本操作

localhost:~ hez$ mysql -uroot -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 11221              |
| hez1               |
| mysql              |
| nodesql            |
| performance_schema |
| samp_db            |
+--------------------+
7 rows in set (0.01 sec)

mysql> 
mysql> CREATE DATABASE apps;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 11221              |
| apps               |
| hez1               |
| mysql              |
| nodesql            |
| performance_schema |
| samp_db            |
+--------------------+
8 rows in set (0.00 sec)

mysql> 
mysql>  DROP DATABASE apps;
Query OK, 0 rows affected (0.04 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 11221              |
| hez1               |
| mysql              |
| nodesql            |
| performance_schema |
| samp_db            |
+--------------------+
7 rows in set (0.00 sec)

mysql> 
mysql> use apps
Database changed
mysql> create table music(singer char(100) not null,song char(100),play char(100) not null);
Query OK, 0 rows affected (0.04 sec)

mysql> 

数据库的解码一定要是utf8,才能支持中文。不难,但是步骤多。我就不写了,推荐:mysql设置为utf8格式

mysql> DESCRIBE music;
+--------+-----------+------+-----+---------+-------+
| Field  | Type      | Null | Key | Default | Extra |
+--------+-----------+------+-----+---------+-------+
| singer | char(100) | NO   |     | NULL    |       |
| song   | char(100) | YES  |     | NULL    |       |
| play   | char(100) | NO   |     | NULL    |       |
+--------+-----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> 
mysql> select * from music;
+-----------+--------------------------+------+
| singer    | song                     | play |
+-----------+--------------------------+------+
| 张学友    | 吻别                     | 100  |
| 张学友    | 她来听我的演唱会         | 100  |
+-----------+--------------------------+------+
2 rows in set (0.01 sec)

mysql> 

三. 安装navicat for mysql

连接数据库

安装的时候会有点麻烦,激活。破解什么的。命令行可以连接成功,在这里一定会成功的。注意看端口号,3306。密码。


四.mysql数据类型

太啰嗦,又太长,么什么好弄的,下面的链接都不错,自己看去!!!

比较完整,好阅读的数据类型文字(整理也不容易),请打开
菜鸟教程的数据类型

js是什么,一切皆为对象。数组,字符串,nums,date。mysql常用数据类型。 常用,好用,话不多的mysql数据类型


五.基本的增删改查

心累,写文档真实好累。MMP

增删改查,后端的核心技能
create table 表名(
    表字段名1,
    表字段名2,
    表字段名3
)表数据类型,语言;

# 栗子
create table music(
    singer char(100) not null,
    song char(100),
    play char(100) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 命令行代码
mysql> create table music(                                                          ->     singer char(100) not null,
    ->     song char(100),
    ->     play char(100) not null
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.08 sec)
mysql>
mysql> show tables;
+----------------+
| Tables_in_apps |
+----------------+
| music          |
| music1         |
+----------------+
2 rows in set (0.01 sec)

mysql> 
DROP TABLE 表名;

栗子
mysql> DROP TABLE music1;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------+
| Tables_in_apps |
+----------------+
| music          |
+----------------+
1 row in set (0.00 sec)

mysql> 
INSERT INTO 表名
      (表字段名)
       VALUES
      (添加的数据值);

#栗子
mysql> INSERT INTO music(singer,song,play) VALUES('张学友','吻别','200');
Query OK, 1 row affected (0.01 sec)

# 添加一条数据
INSERT INTO music(singer,song,play) VALUES('周杰伦','稻香','343');
Query OK, 1 row affected (0.01 sec)
mysql> 
# 查询表里全部数据
mysql> SELECT * from music;
+-----------+--------------------------+------+
| singer    | song                     | play |
+-----------+--------------------------+------+
| 张学友    | 她来听我的演唱会         | 100  |
| 张学友    | 吻别                     | 200  |
| 周杰伦    | 稻香                     | 343  |
+-----------+--------------------------+------+
3 rows in set (0.00 sec)

mysql> 


#查询某一表字段名的数据
mysql> SELECT song from music;
+--------------------------+
| song                     |
+--------------------------+
| 她来听我的演唱会         |
| 吻别                     |
| 稻香                     |
+--------------------------+
3 rows in set (0.00 sec)

mysql> 

#多条件查询 (使用,分隔开条件)
mysql> SELECT song,singer from music;
+--------------------------+-----------+
| song                     | singer    |
+--------------------------+-----------+
| 她来听我的演唱会         | 张学友    |
| 吻别                     | 张学友    |
| 稻香                     | 周杰伦    |
+--------------------------+-----------+
3 rows in set (0.00 sec)

mysql> 

本章讲了 数据表的增删改查

人狠,钱多,废话少的Api


六.数据的各种骚

他曾为了你的逃离,颓废痛苦,也为了破镜重圆,抱着你哭...《情书》

新建一张用户表
mysql> use apps
Database changed
mysql> create table muser(
    ->     name char(100) not null,
    ->     age char(100) not null,
    ->     love char(100) not null
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+----------------+
| Tables_in_apps |
+----------------+
| muser          |
| music          |
+----------------+
2 rows in set (0.00 sec)

mysql> 

INSERT INTO muser(name,age,love) VALUES('慧子','23','周杰伦');

#添加2条数据
mysql> INSERT INTO muser(name,age,love) VALUES('hez','23','张学友');
Query OK, 1 row affected (0.02 sec)
mysql>

mysql> INSERT INTO muser(name,age,love) VALUES('慧子','23','李代沫');
Query OK, 1 row affected (0.01 sec)
mysql> 

#查询表里的数据
mysql> SELECT * from muser;
+--------+-----+-----------+
| name   | age | love      |
+--------+-----+-----------+
| hez    | 23  | 张学友    |
| 慧子   | 22  | 李代沫    |
+--------+-----+-----------+
2 rows in set (0.00 sec)

mysql> 

小技巧:
or和and,or表示两者取其一,and表示两者皆是;

SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:

# 查询年龄23的用户
mysql> select * from muser where age='23';
+--------+-----+-----------+
| name   | age | love      |
+--------+-----+-----------+
| hez    | 23  | 张学友    |
| 小红   | 23  | 张学友    |
+--------+-----+-----------+
2 rows in set (0.00 sec)

# 查询喜欢张学友的用户
mysql> select * from muser where love='张学友';
+--------+-----+-----------+
| name   | age | love      |
+--------+-----+-----------+
| hez    | 23  | 张学友    |
| 小明   | 22  | 张学友    |
| 小红   | 23  | 张学友    |
+--------+-----+-----------+
3 rows in set (0.00 sec)

mysql> 

多表,多条件读取数据

select 表字段名1,表字段名2,表字段名3,表字段名4 from 表名1,表名1 where 条件1 and 条件2;

(select) 读取 用户姓名,年龄,喜欢,音乐表歌曲
(from)从用户表,音乐表
(where)并且年龄大于18,喜欢张学友的数据;

#栗子
mysql> select name,age,love,song from muser,music where age>18 and love='张学友';
+--------+-----+-----------+--------------------------+
| name   | age | love      | song                     |
+--------+-----+-----------+--------------------------+
| hez    | 23  | 张学友    | 她来听我的演唱会         |
| 小明   | 22  | 张学友    | 她来听我的演唱会         |
| 小红   | 23  | 张学友    | 她来听我的演唱会         |
| hez    | 23  | 张学友    | 吻别                     |
| 小明   | 22  | 张学友    | 吻别                     |
| 小红   | 23  | 张学友    | 吻别                     |
| hez    | 23  | 张学友    | 稻香                     |
| 小明   | 22  | 张学友    | 稻香                     |
| 小红   | 23  | 张学友    | 稻香                     |
+--------+-----+-----------+--------------------------+
9 rows in set (0.00 sec)


把慧子喜欢的歌手,修改为李代沫

# 栗子
mysql> update muser set love ='李代沫' where name = '慧子';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> 

把小明的年龄改为19,喜欢的歌手改为gai;

#栗子
mysql> update muser set age='19',love='gia' where name = '小明';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from muser;
+--------+-----+-----------+
| name   | age | love      |
+--------+-----+-----------+
| hez    | 23  | 张学友    |
| 慧子   | 22  | 李代沫    |
| 小明   | 19  | gia       |
| 小红   | 23  | 张学友    |
| 小强   | 22  | 周杰伦    |
+--------+-----+-----------+
5 rows in set (0.00 sec)

mysql> 

删除小明这条数据

#栗子
mysql> delete from  muser  where name ='小红';
Query OK, 1 row affected (0.01 sec)

mysql> select * from muser;
+--------+-----+-----------+
| name   | age | love      |
+--------+-----+-----------+
| hez    | 23  | 张学友    |
| 慧子   | 22  | 李代沫    |
| 小明   | 19  | gia       |
| 小强   | 22  | 周杰伦    |
+--------+-----+-----------+
4 rows in set (0.00 sec)

mysql> 

通用语法:
select 表字段1 from 数据表1
union
select 表字段1 from 数据表2
order by 表字段1;

描述:
用以连接多个select语句,
表字段必须是相同的
union 数据不重复
union ALL 数据重复

select singer from muser
union 
select singer from music
order by singer; 

#栗子

重复的数据
mysql> select singer from muser
    -> union all
    -> select singer from music
    -> order by singer;
+-----------+
| singer    |
+-----------+
| gai       |
| 周杰伦    |
| 周杰伦    |
| 张学友    |
| 张学友    |
| 张学友    |
| 李代沫    |
+-----------+
7 rows in set (0.01 sec)


不重复数据
mysql> select singer from muser
    -> union 
    -> select singer from music
    -> order by singer;  
+-----------+
| singer    |
+-----------+
| gai       |
| 周杰伦    |
| 张学友    |
| 李代沫    |
+-----------+
4 rows in set (0.00 sec)

mysql> 
 

通用语法:

select * from muser order by age asc;

描述:
muser: 数据表
order by: 排序
age: 排序条件
asc:升序
desc: 降序

#栗子
年龄(数值)升序
mysql> select * from muser order by age asc;
+--------+-----+-----------+-----------+
| name   | age | love      | singer    |
+--------+-----+-----------+-----------+
| 小明   | 19  | gia       | gai       |
| 慧子   | 22  | 李代沫    | 李代沫    |
| 小强   | 22  | 周杰伦    | 周杰伦    |
| hez    | 23  | 张学友    | 张学友    |
+--------+-----+-----------+-----------+
4 rows in set (0.00 sec)

mysql>

年龄(数值)降序
mysql> select * from muser order by age desc;
+--------+-----+-----------+-----------+
| name   | age | love      | singer    |
+--------+-----+-----------+-----------+
| hez    | 23  | 张学友    | 张学友    |
| 慧子   | 22  | 李代沫    | 李代沫    |
| 小强   | 22  | 周杰伦    | 周杰伦    |
| 小明   | 19  | gia       | gai       |
+--------+-----+-----------+-----------+
4 rows in set (0.00 sec)

mysql>  

语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

通用语法:
select singer, count(*) from music group by singer;

描述*
count(*): 新的分组(临时)
music: 数据表
group by: 分组语法
singer: 计算分组的数据表字段(歌手)

查看音乐表,获得每个歌手都歌曲数量

#栗子
mysql> select singer, count(*) from music group by singer;
+-----------+----------+
| singer    | count(*) |
+-----------+----------+
| 周杰伦    |        1 |
| 张学友    |        4 |
+-----------+----------+
2 rows in set (0.00 sec)

mysql> 

查看用户表,获取每个歌手背喜欢的次数
mysql> select love, count(*) from muser group by love;
+-----------+----------+
| love      | count(*) |
+-----------+----------+
| 周杰伦    |        2 |
| 张学友    |        3 |
| 李代沫    |        1 |
+-----------+----------+
3 rows in set (0.00 sec)

mysql> 

这部分内容有点多,懵逼了。等我理一下
1.读取数据;当张表,多个条件中,多张表,多个条件的读取。
2.修改数据; 修改一个字段名,多个字段名 & 修改条件。
3.删除数据; 删除数据&删除条件
4.集合数据; 集合两张或多张表的数据到一个集合中,数据可选择重5.复或不重复
6.数据排序;升序降序
7.数据分组;根据一个表字段,或多个表字段的结构进行分组

这些知识只是骚操作,看,我脱衣服了....


7. JOIN连接 【内,左,右】

多表数据联动。上下滑动累,来这看看省力的....

  1. INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
  2. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录
  3. RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录

通用语法:
select a.name, a.love,b.singer from muser a inner join music b on a.love = b.singer;

描述:

a .name, b .name ;返回数据字段名
muser a,music b;a,b数据表名称的替代符号
nner join;内连接
on; 筛选条件

功能:
获取两个表中字段匹配关系的记录。

内连接

获取用户名,喜欢,歌曲加入判断条件用户喜欢的歌手,和曲库里有的歌手

#栗子
mysql> select a.name, a.love,b.singer from muser a inner join music b on a.love = b.singer;
+--------+-----------+-----------+
| name   | love      | singer    |
+--------+-----------+-----------+
| hez    | 张学友    | 张学友    |
| hez    | 张学友    | 张学友    |
| hez    | 张学友    | 张学友    |
| hez    | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小强   | 周杰伦    | 周杰伦    |
| 小灰   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| 阿狗   | 周杰伦    | 周杰伦    |
+--------+-----------+-----------+
14 rows in set (0.00 sec)

mysql> 

通用语法:
select a.name, a.love,b.singer from muser a left join music b on a.love =b.singer;

描述:
a .name,a.love, b .singer ;返回数据字段名
muser a,music b;a,b数据表名称的替代符号
left join;左连接
on; 筛选条件

功能
该语句会读取左边的数据表 muser 的所有选取的字段数据,即便在右侧表 music中 没有对应的 singer 字段值 没有为null。

返回 左表全部,右表于左表重合的数据
以用户表为左表,歌曲表为右表。查询用户喜欢的歌手,歌曲库里也有的数据
#栗子
mysql> select a.name, a.love,b.singer from muser a left join music b on a.love =b.singer;
+--------+-----------+-----------+
| name   | love      | singer    |
+--------+-----------+-----------+
| hez    | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| hez    | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| 小强   | 周杰伦    | 周杰伦    |
| 阿狗   | 周杰伦    | 周杰伦    |
| hez    | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| hez    | 张学友    | 张学友    |
| 小明   | 张学友    | 张学友    |
| 小灰   | 张学友    | 张学友    |
| 慧子   | 李代沫    | NULL      |
+--------+-----------+-----------+
15 rows in set (0.01 sec)

mysql> 

通用语法
select a.love,b.singer,b.song from muser a right join music b on a.love =b.singer;

描述
a .a.love, b .singer,b .song ;返回数据字段名 muser a,music b; a,b数据表名称的替代符号
right join;左连接
on; 筛选条件

功能:
该语句会读取右边的数据表 music 的所有选取的字段数据,即便在左侧表 muser 中没有对应的 love 字段值。

返回 左表于右表重合的数据,右表全部数据
mysql> select a.love,b.singer,b.song from muser a right join music b on a.love =b.singer;
+-----------+-----------+--------------------------+
| love      | singer    | song                     |
+-----------+-----------+--------------------------+
| 张学友    | 张学友    | 她来听我的演唱会         |
| 张学友    | 张学友    | 吻别                     |
| 张学友    | 张学友    | 情书                     |
| 张学友    | 张学友    | 李香兰                   |
| 张学友    | 张学友    | 她来听我的演唱会         |
| 张学友    | 张学友    | 吻别                     |
| 张学友    | 张学友    | 情书                     |
| 张学友    | 张学友    | 李香兰                   |
| 周杰伦    | 周杰伦    | 稻香                     |
| 张学友    | 张学友    | 她来听我的演唱会         |
| 张学友    | 张学友    | 吻别                     |
| 张学友    | 张学友    | 情书                     |
| 张学友    | 张学友    | 李香兰                   |
| 周杰伦    | 周杰伦    | 稻香                     |
| NULL      | gia       | 火锅底料                 |
+-----------+-----------+--------------------------+
15 rows in set (0.00 sec)

mysql> 

看到这里,你应该发现两个问题
1 join是干什么用的
2 这些数据多是重复的,实际开发的时候怎么用呢
别急,join在实际开发中很长见,也是必须的。数据重复,去重下下章我们讲。


转身离开,有爱说不出来...《珊瑚海》

8.去重

累了,写不动...

9.正则表达式

讲真,我没有怎么研究过...你感兴趣就去看看吧 菜鸟教程,正则表达式


上一篇 下一篇

猜你喜欢

热点阅读