Mysql的基础学习(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql的基础学习(下)

1对1

已知如下表所示,商品类别信息表(具有两层类别关系,通过pid表示,0表示一级类别)
mysql> select * from type;
+----+-----------+------+
| id | name      | pid  |
+----+-----------+------+
|  1 | 服装      |    0 |
|  2 | 数码      |    0 |
|  3 | 男装      |    1 |
|  4 | 手机      |    2 |
|  5 | 相机      |    2 |
|  6 | 电脑      |    2 |
|  7 | 女装      |    1 |
|  8 | 童装      |    1 |
|  9 | 食品      |    0 |
| 10 | 零食      |    9 |
| 11 | 特产      |    9 |
| 12 | 休闲装    |    1 |
+----+-----------+------+
-- 查询二级类别信息,并关联出他们的父类别名称
mysql> select  t1.id,t1.name,t2.name  from type t1,type t2 where t1.pid!=0 and t1.pid=t2.id;
+----+-----------+--------+
| id | name      | name   |
+----+-----------+--------+
|  3 | 男装      | 服装   |
|  4 | 手机      | 数码   |
|  5 | 相机      | 数码   |
|  6 | 电脑      | 数码   |
|  7 | 女装      | 服装   |
|  8 | 童装      | 服装   |
| 10 | 零食      | 食品   |
| 11 | 特产      | 食品   |
| 12 | 休闲装    | 服装   |
+----+-----------+--------+
9 rows in set (0.01 sec)
--统计每个一级类别下都有多少个子类别。
mysql> select t1.id,t1.name,count(t2.id) from type t1,type t2 where t1.pid=0 and t1.id=t2.pid group by t1.id;
+----+--------+--------------+
| id | name   | count(t2.id) |
+----+--------+--------------+
|  1 | 服装   |            4 |
|  2 | 数码   |            3 |
|  9 | 食品   |            2 |
+----+--------+--------------+
3 rows in set (0.00 sec)

数据库的备份和导入

-- 数据库mydb备份
[root@localhost mnt]# mysqldump -u root -p mydb > mydb.sql
password:
-- 备份 mydb库中的stu表
[root@localhost mnt]# mysqldump -u root -p mydb stu > stu.sql
password:
-- 恢复数据(导入)注:mydb库要存在
[root@localhost mnt]# mysql -u root -p mydb < mydb.sql
[root@localhost mnt]# mysql -u root -p mydb < stu.sql

数据库日志的备份和导入

mysql日志
    vim /etc/my.cnf       产看下面这句话56行
    开启日志: 在mysql配置文件中开启:log-bin=mysql-bin
    查看bin-log日志:
    mysql>show binary logs;
    查看最后一个bin-log日志:
    mysql>show master status;
    此时就会多一个最新的bin-log日志
    mysql>flush logs;
    查看最后一个bin日志.
    mysql>show master status;
    mysql>reset master;
    清空所有的bin-log日志
    执行查看bin-log日志
    备份数据:
    mysqldump -u 用户名 -p 库名 -l -F 库名> 库名.sql
    其中:-F即flush logs,可以重新生成新的日志文件,当然包括log-bin日志 
    // Linux关闭MySQL的命令
    $mysql_dir/bin/mysqladmin -uroot -p shutdown
    // linux启动MySQL的命令
    $mysql_dir/bin/mysqld_safe &

MySql的其他操作


1 表复制           2表的索引           3视图
4 内置函数         5 事务处理           6 触发器
7 日志            8 有关慢查询操作      9 数据库的恢复


1. MySQL的表复制
    复制表结构
    mysql> create table 目标表名 like 原表名;
    复制表数据
    mysql> insert into 目标表名 select * from 原表名; 
create table stu2 like stu;
复制stu 名为stu2 ;  只复制结构不复制内容
insert into stu2 select * from stu limit 5;
赋值stu数据前五条添加到 stu2;
2. 数据表的索引
    创建索引
    CREATE INDEX index_name ON table_name (column_list)
    CREATE UNIQUE INDEX index_name ON table_name (column_list)
    删除索引
    DROP INDEX index_name ON talbe_name
3. mysql视图
    创建视图:
    mysql> create view v_t1 as select * from t1 where id>4 and id<11;
    Query OK, 0 rows affected (0.00 sec)
    view视图的帮助信息:
    mysql> ? view
    ALTER VIEW
    CREATE VIEW
    DROP VIEW
    查看视图:
    mysql> show tables;
    删除视图v_t1:
    mysql> drop view v_t1;
4. MySQL的内置函数
    字符串处理函数
    ---------------------------------------------
    *concat(s1,s2,…Sn) 连接s1,s2..Sn为一个字符串
    insert(str,x,y,instr)将字符串str从第xx位置开始,y字符串的子字符串替换为字符串str
    lower(str)将所有的字符串变为小写
    upper(str)将所有的字符串变为大写
    left(str,x)返回字符串中最左边的x个字符
    rigth(str,y)返回字符串中最右边的x个字符
    lpad(str,n,pad)用字符串pad对str最左边进行填充,直到长度为n个字符串长度
    rpad(str,n,pad)用字符串pad对str最右边进行填充,直到长度为n个字符串长度
    trim(str)  去掉左右两边的空格
    ltrim(str) 去掉字符串str左侧的空格
    rtrim(str) 去掉字符串str右侧的空格
    repeat(str,x)   返回字符串str重复x次
    replace(str,a,b)将字符串的的a替换成b
    strcmp(s1,s2)   比较字符串s1和s2
    substring(s,x,y)返回字符串指定的长度
    *length(str)  返回值为字符串str 的长度    
    数值函数
    -----------------------------------------------------
    *abs(x)    返回x的绝对值
    ceil(x)   返回大于x的最小整数值
    floor(x)  返回小于x的最大整数值
    mod(x,y)  返回x/y的取余结果
    rand()    返回0~1之间的随机数
    *round(x,y)返回参数x的四舍五入的有y位小数的值
    truncate(x,y) 返回x截断为y位小数的结果
    日期和时间函数
    ---------------------------------------------------
    curdate()  返回当前日期,按照’YYYY-MM-DD’格式
    curtime()  返回当前时间,当前时间以'HH:MM:SS' 
    *now()      返回当前日期和时间,
    *unix_timestamp(date) 返回date时间的unix时间戳
    from_unixtime(unix_timestamp[,format])  返回unix时间的时间
    week(date)      返回日期是一年中的第几周
    year(date)      返回日期的年份
    hour(time)      返回time的小时值
    minute(time)    返回日time的分钟值
    monthname(date) 返回date的月份
    *date_fomat(date,fmt) 返回按字符串fmt格式化日期date值
    date_add(date,INTERVAL,expr type) 返回一个日期或者时间值加上一个时间间隔的时间值
    *datediff(expr,expr2)   返回起始时间和结束时间的间隔天数
    //统计时间戳647583423距离当前时间相差天数(生日天数(不考虑年份))
    mysql> select datediff(date_format(from_unixtime(647583423),"2017-%m-%d %h:%i:%s"),now());
    其他常用函数
    ------------------------------------------------------
    *database() 返回当前数据库名
    version()   返回当前服务器版本
    user()      返回当前登陆用户名
    inet_aton   返回当前IP地址的数字表示 inet_aton("192.168.80.250");
    inet_ntoa(num) 返回当前数字表示的ip   inet_ntoa(3232256250);
    *password(str)  返回当前str的加密版本
    *md5(str)      返回字符串str的md5值
5. MySQL的事务处理
    关闭自动提交功能(开启手动事务)
    mysql> set autocommit=0;
    从表t1中删除了一条记录
    mysql> delete from t1 where id=11;
    此时做一个p1还原点:
    mysql> savepoint p1;
    再次从表t1中删除一条记录:
    mysql> delete from t1 where id=10;
    再次做一个p2还原点:
    mysql> savepoint p2;
    此时恢复到p1还原点,当然后面的p2这些还原点自动会失效: 
    mysql> rollback to p1;
    退回到最原始的还原点:
    mysql> rollback;
    回滚
    开启自动事务提交(关闭手动事务)
    mysql> set autocommit=1;
6. MySQL的触发器
    格式:1、触发器的定义:
      CREATE TRIGGER trigger_name trigger_time trigger_event
        ON tbl_name FOR EACH ROW trigger_stmt
      说明:
      # trigger_name:触发器名称
      # trigger_time:触发时间,可取值:BEFORE或AFTER
      # trigger_event:触发事件,可取值:INSERT、UPDATE或DELETE。
      # tb1_name:指定在哪个表上
      # trigger_stmt:触发处理SQL语句。
    示例:
        mysql> delimiter $$
    mysql> create trigger del_stu before delete on stu for each row
      -> begin
      ->  insert into stu_bak values(old.id,old.name,old.sex,old.age,old.addtime);
      -> end;
      -> $$
        Query OK, 0 rows affected (0.05 sec)
        mysql> delimiter ;
7. mysql日志
    进入 /usr/my.cnf
    开启日志: 在mysql配置文件中开启:log-bin=mysql-bin
    查看bin-log日志:
    mysql>show binary logs;
    查看最后一个bin-log日志:
    mysql>show master status;
    此时就会多一个最新的bin-log日志
    mysql>flush logs;
    查看最后一个bin日志.
    mysql>show master status;
    mysql>reset master;
    清空所有的bin-log日志
    执行查看bin-log日志
    备份数据:
    mysqldump -uroot -pwei test -l -F '/tmp/test.sql'
    其中:-F即flush logs,可以重新生成新的日志文件,当然包括log-bin日志 
    // Linux关闭MySQL的命令
    $mysql_dir/bin/mysqladmin -uroot -p shutdown
    // linux启动MySQL的命令
    $mysql_dir/bin/mysqld_safe &


8、有关慢查询操作:
    开户和设置慢查询时间:
    vi /etc/my.cnf
    log_slow_queries=slow.log
    long_query_time=5
    查看设置后是否生效
    mysql> show variables like "%quer%"; 
    慢查询次数:
    mysql> show global status like "%quer%";
9 数据库的恢复
    1. 首先恢复最后一次的备份完整数据
    [root@localhost mnt]# mysql -u root -p mydemo<mydemo_2017-7-26.sql 
    Enter password: 
    2. 查看bin-log日志
    [root@localhost data]# mysqlbinlog --no-defaults mysql-bin.000009;
      查找到恢复的节点
    3. 执行bin-log日志文件,恢复最后一块的增量数据。 
    [root@localhost data]# mysqlbinlog --no-defaults --stop-position="802" mysql-bin.000009|mysql -u root -p123456 mydemo;

Python3 Mysql数据库连接

    Python3 MySQL 数据库连接
======================================================
1. 什么是 PyMySQL?
    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
    PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
2. PyMySQL安装
    PyMySQL下载地址:https://github.com/PyMySQL/PyMySQL。
    2.1 使用pip命令进行安装:
    $ pip install PyMySQL
    2.2 使用 git 命令下载安装包安装(你也可以手动下载):
    $ git clone https://github.com/PyMySQL/PyMySQL
    $ cd PyMySQL/
    $ python3 setup.py install
3. 数据库连接
   通过如下代码测试数据库连接
----------------------------------------------------------------------
    #!/usr/bin/python3
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","123456","mydb" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
    print ("Database version : %s " % data)
    # 关闭数据库连接
    db.close()
4. 执行数据查询:
-------------------------------------------------------------------
    #!/usr/bin/python3
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","","mydemo" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # SQL 查询语句
    sql = "select * from stu limit %d" % (3)
    #sql = "select * from stu"
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 获取所有记录列表
       results = cursor.fetchall()
       for row in results:
          id = row[0]
          name = row[1]
          sex = row[2]
          age = row[3]
          classid = row[4]
           # 打印结果
          print ("id=%d,name=%s,sex=%s,age=%d,classid=%s" % (id,name,sex,age,classid))
    except:
       print ("Error: unable to fetch data")
    # 关闭数据库连接
    db.close()
5. 执行数据添加
---------------------------------------------------------------------
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","","mydemo" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 插入语句
sql = "INSERT INTO stu(name,sex,age,classid) values('%s','%c','%d','%s')" % ('uu142','m',22,'lamp180') 
try:
   # 执行sql语句
   cursor.execute(sql)
   # 执行sql语句
   db.commit()
   print("ok: %d " % (cursor.rowcount))
except:
   # 发生错误时回滚
   db.rollback()
# 关闭数据库连接
db.close() 
6. 执行删除操作
---------------------------------------------------------------------
    #!/usr/bin/python3
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","","mydemo" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # SQL 删除语句
    sql = "delete from stu where id = '%d'" % (13)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交修改
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
    # 关闭数据库连接
    db.close()
数据库查询操作:  
    Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
        fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
        fetchall(): 接收全部的返回结果行.
        rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
pip命令
------------------------------------------------------------
列出已安装的包:
    $ pip list
    $ pip freeze     # 查看自己安装的
安装软件(安装特定版本的package,通过使用==, &gt;=, &lt;=, &gt;, &lt;来指定一个版本号)**
    $ pip install SomePackage
    $ pip install 'Markdown<2.0'
    $ pip install 'Markdown>2.0,<2.0.3'
卸载软件pip uninstall SomePackage
    $ pip uninstall SomePackage
下载所需的软件包:
    $ pip download SomePackage -d directory 
    例如下载PyMySQL软件包
    $ pip download PyMySQL -d D:/pypackage
安装下载好的软件包文件
    $ pip install 目录/软件包文件名
    如安装PyMySQL软件包
    $ pip install D:/pypackage/PyMySQL-0.7.11-py2.py3-none-any.whl

修改完结符


\d  $$     把最后的完结符号由;改为$$ 用于写代码时用


python3 Mysql数据库连接

    Python3 MySQL 数据库连接
======================================================
1. 什么是 PyMySQL?
    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
    PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
2. PyMySQL安装
    PyMySQL下载地址:https://github.com/PyMySQL/PyMySQL。
    2.1 使用pip命令进行安装:
    $ pip install PyMySQL
    2.2 使用 git 命令下载安装包安装(你也可以手动下载):
    $ git clone https://github.com/PyMySQL/PyMySQL
    $ cd PyMySQL/
    $ python3 setup.py install
3. 数据库连接
   通过如下代码测试数据库连接
----------------------------------------------------------------------
    #!/usr/bin/python3
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","123456","mydb" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
    print ("Database version : %s " % data)
    # 关闭数据库连接
    db.close()
4. 执行数据查询:
-------------------------------------------------------------------
    #!/usr/bin/python3
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","","mydemo" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # SQL 查询语句
    sql = "select * from stu limit %d" % (3)
    #sql = "select * from stu"
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 获取所有记录列表
       results = cursor.fetchall()
       for row in results:
          id = row[0]
          name = row[1]
          sex = row[2]
          age = row[3]
          classid = row[4]
           # 打印结果
          print ("id=%d,name=%s,sex=%s,age=%d,classid=%s" % (id,name,sex,age,classid))
    except:
       print ("Error: unable to fetch data")
    # 关闭数据库连接
    db.close()
5. 执行数据添加
---------------------------------------------------------------------
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","","mydemo" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 插入语句
sql = "INSERT INTO stu(name,sex,age,classid) values('%s','%c','%d','%s')" % ('uu142','m',22,'lamp180') 
try:
   # 执行sql语句
   cursor.execute(sql)
   # 执行sql语句
   db.commit()
   print("ok: %d " % (cursor.rowcount))
except:
   # 发生错误时回滚
   db.rollback()
# 关闭数据库连接
db.close() 
6. 执行删除操作
---------------------------------------------------------------------
    #!/usr/bin/python3
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","","mydemo" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # SQL 删除语句
    sql = "delete from stu where id = '%d'" % (13)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交修改
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
    # 关闭数据库连接
    db.close()
数据库查询操作:  
    Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
        fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
        fetchall(): 接收全部的返回结果行.
        rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

pip

pip命令
------------------------------------------------------------
列出已安装的包:
    $ pip list
    $ pip freeze     # 查看自己安装的
安装软件(安装特定版本的package,通过使用==, &gt;=, &lt;=, &gt;, &lt;来指定一个版本号)**
    $ pip install SomePackage
    $ pip install 'Markdown<2.0'
    $ pip install 'Markdown>2.0,<2.0.3'
卸载软件pip uninstall SomePackage
    $ pip uninstall SomePackage
下载所需的软件包:
    $ pip download SomePackage -d directory 
    例如下载PyMySQL软件包
    $ pip download PyMySQL -d D:/pypackage
安装下载好的软件包文件
    $ pip install 目录/软件包文件名
    如安装PyMySQL软件包
    $ pip install D:/pypackage/PyMySQL-0.7.11-py2.py3-none-any.whl


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
48 3
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
66 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
25 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
18 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
173 0
|
2月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
43 3
|
2月前
|
SQL 关系型数据库 MySQL
如何学习 MySQL?
如何学习 MySQL?
38 3
|
3月前
|
SQL 关系型数据库 MySQL
学习mysql基础操作
【8月更文挑战第20天】学习mysql基础操作
40 1
|
4月前
|
SQL 关系型数据库 MySQL
学习mysql中使用inner join,left join 等
学习mysql中使用inner join,left join 等