shellNote--day18

shellNote

day18

mysql简单介绍

  • mysql安装

    sudo aptitude install mysql-server

    安装过程中,会要求你设置mysql的root账户密码;

  • 连接mysql服务器

    首先可以通过安装过程中的root账户和你设置的密码来连接;

    $mysql -u root -p

    • -u选项

      指定登入账户名

    • -p选项

      提示输入登入用户输入密码

  • mysql命令

    在mysql程序中,分号表明命令的结束;

    所以每个命令后面我们需要添加一个分号;

    如果不用分号,mysql会提示输入更多的数据;

    • status或\s

      查看服务器状态;

      mysql> status
      --------------
      mysql  Ver 14.14 Distrib 5.5.62, for debian-linux-gnu (x86_64) using readline 6.3
      
      Connection id:		51
      Current database:	
      Current user:		root@localhost
      SSL:			Not in use
      Current pager:		stdout
      Using outfile:		''
      Using delimiter:	;
      Server version:		5.5.62-0ubuntu0.14.04.1 (Ubuntu)
      Protocol version:	10
      Connection:		Localhost via UNIX socket
      Server characterset:	latin1
      Db     characterset:	latin1
      Client characterset:	utf8
      Conn.  characterset:	utf8
      UNIX socket:		/var/run/mysqld/mysqld.sock
      Uptime:			21 hours 57 min 18 sec
      
      Threads: 1  Questions: 641  Slow queries: 0  Opens: 189  Flush tables: 1  Open tables: 41  Queries per second avg: 0.008
      --------------
      
      
    • SHOW命令

      • SHOW DATABASES;

        显示mysql的数据库;

        mysql> SHOW DATABASES;
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | mysql              |
        | mytest             |
        | performance_schema |
        +--------------------+
        4 rows in set (0.00 sec)
        
        
      • SHOW TABLES;

        显示连接的数据库的表单; 前提需要连接其中的数据库;

        mysql> SHOW TABLES;
        +---------------------------+
        | Tables_in_mysql           |
        +---------------------------+
        | columns_priv              |
        | db                        |
        | event                     |
        | func                      |
        | general_log               |
        | help_category             |
        | help_keyword              |
        | help_relation             |
        | help_topic                |
        | host                      |
        | ndb_binlog_index          |
        | plugin                    |
        | proc                      |
        | procs_priv                |
        | proxies_priv              |
        | servers                   |
        | slow_log                  |
        | tables_priv               |
        | time_zone                 |
        | time_zone_leap_second     |
        | time_zone_name            |
        | time_zone_transition      |
        | time_zone_transition_type |
        | user                      |
        +---------------------------+
        24 rows in set (0.00 sec)
        
        
    • USE命令

      用来连接到某个数据库;

      连接后就可以用SHOW TABLES;命令来显示数据库的表单;

      mysql> USE mysql
      Reading table information for completion of table and column names
      You can turn off this feature to get a quicker startup with -A
      
      Database changed
      
      
    • CREATE命令

      创建数据库;

      CREATE DATABASE name;

      mysql> CREATE DATABASE mytest;
      Query OK, 1 row affected (0.02 sec)
      
    • 创建用户账户

      一般可以使用root用户来完成各种操作;

      不过最好的方式还是给每个数据库有独立权限的用户账户;

      用GRANT命令来完成;

      mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON mytest.* TO test IDENTIFIED by 'test';
      Query OK, 0 rows affected (0.35 sec)
      
      • SELECT: 表示查询权限;
      • INSERT: 表示插入新数据权限;
      • DELETE: 表示删除已有数据权限;
      • UPDATE: 表示更新已有数据权限;
      • ON mytest.*: 表明前面的权限作用于mytest这个数据库和表上;
      • TO test: 表明mytest数据库和表上的这些权限赋予给那个账号用户,这里账号名为test;
      • IDENTIFIED by: 对账号用户设定默认密码;

      GRANT命令: 如果用户账户不存在,他会创建;

      之后,就可以用新的用户来连接mytest数据库:

      $ mysql mytest -u test –p
      Enter password:
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 42
      Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
      Copyright (c) 2000, 2014, 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>
      

      这里第一个参数直接指明需要连接的数据库;

    • 创建数据表

      CREATE TABLE

      $ mysql mytest -u root -p
      Enter password:
      mysql> CREATE TABLE employees (
      -> empid int not null,
      -> lastname varchar(30),
      -> firstname varchar(30),
      -> salary float,
      -> primary key (empid));
      Query OK, 0 rows affected (0.14 sec)
      mysql>
      

      前面的例子,并没有给test账户CREATE的权限,所以这里使用root来创建表;

      在这里定义了四个数据字段:empid,lastname,firstname,salary;

      • empid数据字段

        除了定义为int整数值外,还限制了not null的数据约束,指明每条记录必须有一个empid值;

      • not null

        数据约束,表明该字段必须有值;

      • primary key

        定义了可以唯一表示每条记录的数据字段;

        表明每条记录的empid是唯一的;

      • 创建后,就可以使用SHOW TABLES;命令来查看表单;

        mysql> show tables;
        +----------------+
        | Tables_in_test |
        +----------------+
        | employees |
        +----------------+
        1 row in set (0.00 sec)
        mysql>
        
    • 插入数据

      INSERT命令格式如下:

      INSERT INFO table VALUES (...)

      每个数字字段的值需要用逗号分开;

      mysql> INSERT INFO employees VALUES (1, 'Bian', 'Damon', 10000.00);
      Query OK, 1 row affected (0.35 sec)
      
    • 删除数据

      DELETE命令格式如下:

      DELETE FROM table

      指定要从中删除的表,不过他会删除所有的记录;

      要想删除一条或指定的多条,需要使用WHERE子句来进行限制;

      DELETE FROM employees WHERE empid = 2;

      这条命令指定删除empid=2的记录;

    • 查询数据

      SELECT命令格式如下:

      SELECT datafields FROM table

      datafields是一个用逗号分开的数据字段名称列表,指明查询返回的数据字段,如果想提取所有,可以使用通配符*;

      mysql> SELECT * FROM employees;
      +-------+----------+-----------+--------+
      | empid | lastname | firstname | salary |
      +-------+----------+-----------+--------+
      |     2 | Bian     | damon     |  10000 |
      +-------+----------+-----------+--------+
      1 row in set (0.00 sec)
      

      另外还可以配合一个或多个修饰符定义数据库返回查询数据:

      • WHERE:显示符合特定条件的数据行子集;
      • ORDER BY: 以指定顺序显示数据行;
      • LIMIT: 只显示数据行的一个子集;
      mysql> SELECT * FROM employees WHERE empid = 2;
      +-------+----------+-----------+--------+
      | empid | lastname | firstname | salary |
      +-------+----------+-----------+--------+
      |     2 | Bian     | damon     |  10000 |
      +-------+----------+-----------+--------+
      1 row in set (0.00 sec)
      
  • 脚本中使用数据库

    • mysql配置文件

      mysql程序使用$HOME/.my.cnf文件来读取特定的启动命令和设置;

      这里我们可以设置启动mysql会话的默认密码;

      $ cat .my.cnf
      password = test
      $ chmod 400 .my.cnf
      $
      

      这里用chmod来设置.my.cnf文件限制为只能本人浏览;

      之后,我们就可以不使用-p选项来登入mysql了:

      mysql mytest -u test

    • 向服务器发送命令

      • 发送单个命令

        对于mysql命令,可以使用-e选项,来指定命令的内容;

        damon@ubuntu:~$ cat mtest 
        #!/bin/bash
        
        MYSQL=$(which mysql)
        
        $MYSQL mytest -u test -e 'select * from employees'
        damon@ubuntu:~$ ./mtest 
        +-------+----------+-----------+--------+
        | empid | lastname | firstname | salary |
        +-------+----------+-----------+--------+
        |     2 | Bian     | damon     |  10000 |
        +-------+----------+-----------+--------+
        damon@ubuntu:~$ 
        
        
      • 发送多个命令

        可以使用重定向来完成;

        定义一个结束字符串,结束字符串指明了重定向数据的开始和结尾;

        注意:结尾的EOF,必须是该行唯一的内容,并且这一行必须以EOF开头,不要进行缩进或空格等等;

        damon@ubuntu:~$ cat mtest 
        #!/bin/bash
        
        MYSQL=$(which mysql)
        
        $MYSQL mytest -u test <<EOF
        show tables;
        select * from employees where salary > 5000;
        EOF
        damon@ubuntu:~$ ./mtest 
        Tables_in_mytest
        employees
        empid	lastname	firstname	salary
        2	Bian	damon	10000
        damon@ubuntu:~$ 
        
        
    • 格式化数据

      mysql标准输出,不太适合脚本提取数据;

      先将mysql的输出重定向到一个变量中,然后在对其中的数据进行自定义的操作;

      damon@ubuntu:~$ cat mtest 
      #!/bin/bash
      
      MYSQL=$(which mysql)
      
      dbs=$($MYSQL mytest -u test -Bse 'show databases')
      for db in $dbs
      do
      	echo $db
      done
      damon@ubuntu:~$ ./mtest 
      information_schema
      mytest
      
      
      • -B选项

        指定mysql程序工作在批处理模式运行;

      • -s选项

        用于禁止输出列标题和格式化符号;

      • -X选项

        可以输出XML格式;

        damon@ubuntu:~$ mysql mytest -u test -X -e 'select * from employees'
        <?xml version="1.0"?>
        
        <resultset statement="select * from employees
        " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <row>
        	<field name="empid">2</field>
        	<field name="lastname">Bian</field>
        	<field name="firstname">damon</field>
        	<field name="salary">10000</field>
          </row>
        </resultset>
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值