zoukankan      html  css  js  c++  java
  • MySQL数据库--基础简述

    MySQL数据库--基础简述

    1.15.1 MySQL简介

    • Mysql是最流行的RDBMS(Relational Database Management System:关系数据库管理系统),特别是在WEB应用方面。
    • 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
    • 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
    • 所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
    • RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

      • 1.数据以表格的形式出现
      • 2.每行为各种记录名称
      • 3.每列为记录名称所对应的数据域
      • 4.许多的行和列组成一张表单
      • 5.若干的表单组成database
    • 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

        数据库: 数据库是一些关联表的集合。.
        数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
        列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
        行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
        冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
        主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
        外键:外键用于关联两个表。
        复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
        索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
        参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
    
    SQL:
    • SQL: 结构化查询语言(Structured Query Language)简称SQL,是最重要的关系数据库操作语言.
    • 有上百种数据库产品都支持SQL,如:MySQL、DB2、ORACLE、INGRES、SYBASE、SQLSERVER...
    • 结构化查询语言包含6个部分:
        1. 数据查询语言(DQL:Data Query Language):SELECT
        2. 数据操作语言(DML:Data Manipulation Language):INSERT,UPDATE和DELETE
        3. 事务处理语言(TPL):BEGIN TRANSACTION,COMMIT和ROLLBACK
        4. 数据控制语言(DCL):GRANT(授权)或REVOKE(回收权限)
        5. 数据定义语言(DDL):CREATE、ALTER和DROP
        6. 指针控制语言(CCL):DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作
    
    • 在本节中,会让大家快速掌握Mysql的基本知识,并轻松使用Mysql数据库。
    mysql数据库的安装:
    连接数据库:
       mysql -h 主机名 -u 用户名  -p密码  库名
    
       C:>mysql  --采用匿名账号和密码登陆本机服务
       C:>mysql -h localhost -u root -proot   --采用root账号和root密码登陆本机服务
       C:>mysql -u root -p   --推荐方式默认登陆本机
         Enter password: ****
    
       C:>mysql -u root -p mydb  --直接进入mydb数据库的方式登陆
    
       SQL语句中的快捷键
       G 格式化输出(文本式,竖立显示)
       s 查看服务器端信息
       c 结束命令输入操作
       q 退出当前sql命令行模式
       h 查看帮助
    

    1.15.2. SQL的基本操作

    数据库操作:
    mysql> show databases;                              --查看当前用户下的所有数据库
    mysql> create database [if not exists] 数据库名;  --创建数据库
    mysql> use test;                                 --选择进入test数据库
    mysql> show create database 数据库名G               --查看建数据库语句 
    mysql> select database();                           --查看当前所在的数据库位置 
    mysql> drop database [if exists] 数据库名;           --删除一个数据库
    
    数据表操作:
    mysql> show tables;             --查看当前库下的所有表格
    mysql> desc tb1;                  --查看tb1的表结构。
    mysql> show create table 表名G  --查看表的建表语句。
    mysql> create table demo(        --创建demo表格
        -> name varchar(16) not null,
        -> age int,
        -> sex enum('w','m') not null default 'm');
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> show columns from demo;  --查看表结构
    mysql> desc demo;                  --查看表结构
    +-------+---------------+------+-----+---------+-------+
    | Field | Type          | Null | Key | Default | Extra |
    +-------+---------------+------+-----+---------+-------+
    | name  | varchar(16)   | NO   |     | NULL    |       |
    | age   | int(11)       | YES  |     | NULL    |       |
    | sex   | enum('w','m') | NO   |     | m       |       |
    +-------+---------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    mysql>drop table if exists mytab;  -- 尝试删除mytab表格
    
    数据操作:
        --添加一条数据
        mysql> insert into demo(name,age,sex) values('zhangsan',20,'w');
        Query OK, 1 row affected (0.00 sec)
    
        --不指定字段名来添加数据
        mysql> insert into demo values('lisi',22,'m'); 
        Query OK, 1 row affected (0.00 sec)
    
        --指定部分字段名来添加数据
        mysql> insert into demo(name,age) values('wangwu',23); 
        Query OK, 1 row affected (0.00 sec)
    
        --批量添加数据
        mysql> insert into demo(name,age,sex) values('aaa',21,'w'),("bbb",22,'m');
        Query OK, 2 rows affected (0.00 sec)
        Records: 2  Duplicates: 0  Warnings: 0
    
        mysql> select * from demo; --查询数据
    
        mysql> update demo set age=24 where name='aaa';  --修改
        Query OK, 1 row affected (0.02 sec)
        Rows matched: 1  Changed: 1  Warnings: 0
    
        mysql> delete from demo where name='bbb';  --删除
        Query OK, 1 row affected (0.00 sec)
    

    1.15.3 MySQL数据结构类型及操作:

    MySQL的数据类型分为三个类:数值类型、字串类型、日期类型 。 还有一个特殊的值:NULL。
    1 数值类型:
        *tinyint(1字节) 0~255  -128~127
        smallint(2字节)
        mediumint(3字节)
        *int(4字节)
        bigint(8字节)
        *float(4字节)   float(6,2)
        *double(8字节)  
        decimal(自定义)字串形数值
    
    2 字串类型
        普通字串
        *char    定长字串        char(8)  
        *varchar 可变字串 varchar(8)
    
        二进制类型
        tinyblob
        blob
        mediumblob
        longblob
    
        文本类型
        tinytext
        *text      常用于<textarea></textarea>
        mediumtext
        longtext
    
        *enum枚举
        set集合
    
    3 时间和日期类型:
        date  年月日
        time  时分秒
        *datetime 年月日时分秒
        timestamp 时间戳
        year 年
    
    4 NULL值
        NULL意味着“没有值”或“未知值”
        可以测试某个值是否为NULL
        不能对NULL值进行算术计算
        对NULL值进行算术运算,其结果还是NULL
        0或NULL都意味着假,其余值都意味着真
    
    MySQL的运算符:
        算术运算符:+ - * / % 
        比较运算符:= > < >= <= <> != 
        数据库特有的比较:in,not in, is null,is not null,like, between and 
        逻辑运算符:and or not
    
    表的字段约束:
        unsigned 无符号(正数)
        zerofill 前导零填充
        auto_increment 自增
        default    默认值
        not null  非空
        PRIMARY KEY 主键 (非null并不重复)
        unique 唯一性   (可以为null但不重复)
        index 常规索引
    
    建表语句格式:
     create table 表名(
       字段名 类型 [字段约束],
       字段名 类型 [字段约束],
       字段名 类型 [字段约束],
       ...
      );
    
    mysql> create table stu(
        -> id int unsigned not null auto_increment primary key,
        -> name varchar(8) not null unique,
        -> age tinyint unsigned,
        -> sex enum('m','w') not null default 'm',
        -> classid char(6)
        -> );
    Query OK, 0 rows affected (0.05 sec)
    
    
    mysql> desc stu;
    +---------+---------------------+------+-----+---------+----------------+
    | Field   | Type                | Null | Key | Default | Extra          |
    +---------+---------------------+------+-----+---------+----------------+
    | id      | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
    | name    | varchar(8)          | NO   | UNI | NULL    |                |
    | age     | tinyint(3) unsigned | YES  |     | NULL    |                |
    | sex     | enum('m','w')       | NO   |     | m       |                |
    | classid | char(6)             | YES  |     | NULL    |                |
    +---------+---------------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    
    mysql> show create table stuG  --查看建表的语句
    *************************** 1. row ***************************
           Table: stu
    Create Table: CREATE TABLE `stu` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `name` varchar(8) NOT NULL,
      `age` tinyint(3) unsigned default NULL,
      `sex` enum('m','w') NOT NULL default 'm',
      `classid` char(6) default NULL,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `name` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    修改表结构:
    格式: alter table 表名 action(更改选项);
     更改选项:
        1. 添加字段:alter table 表名 add 字段名信息
            例如:
                -- 在user表的最后追加一个num字段 设置为int not null
                mysql> alter table user add num int not null;
    
                -- 在user表的email字段后添加一个age字段,设置int not null default 20;
                mysql> alter table user add age int not null default 20 after email;
    
                -- 在user表的最前面添加一个aa字段设置为int类型
                mysql> alter table user add aa int first;
    
        2. 删除字段:alter table 表名 drop 被删除的字段名
            例如:-- 删除user表的aa字段
                 mysql> alter table user drop aa;
    
        3. 修改字段:alter table 表名 change[modify] 被修改后的字段信息
            其中:change可以修改字段名, modify 不修改
            例如:
            -- 修改user表中age字段信息(类型),(使用modify关键字的目的不修改字段名)
            mysql> alter table user modify age tinyint unsigned not null default 20;
            -- 修改user表的num字段改为mm字段并添加了默认值(使用change可以改字段名)
            mysql> alter table user change num mm int not null default 10;
    
        4. 添加和删除索引
            -- 为user表中的name字段添加唯一性索引,索引名为uni_name;
            mysql> alter table user add unique uni_name(name);
            -- 为user表中的email字段添加普通索引,索引名为index_eamil
            mysql> alter table user add index index_email(email);
            -- 将user表中index_email的索引删除
            mysql> alter table user drop index index_email;
    
        5. 更改表名称:
            ALTER TABLE 旧表名 RENAME AS 新表名
    
        6. 更改AUTO_INCREMENT初始值:
            ALTER TABLE 表名称 AUTO_INCREMENT=1
    
        7. 更改表类型:
            ALTER TABLE 表名称 ENGINE="InnoDB"
    
    MySQL数据库中的表类型一般常用两种:MyISAM和InnoDB
    区别:MyISAM类型的数据文件有三个frm(结构)、MYD(数据)、MYI(索引)
          MyISAM类型中的表数据增 删 改速度快,不支持事务,没有InnoDB安全。
    
          InnoDB类型的数据文件只有一个 .frm
          InnoDB类型的表数据增 删 改速度没有MyISAM的快,但支持事务,相对安全。
    

    1.15.4 数据的DML操作:添加数据,修改数据,删除数据

    添加数据:
        格式: insert into 表名[(字段列表)] values(值列表...);
    
        --标准添加(指定所有字段,给定所有的值)
        mysql> insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lamp138');
        Query OK, 1 row affected (0.13 sec)
    
        mysql>
        --指定部分字段添加值
        mysql> insert into stu(name,classid) value('lisi','lamp138');
        Query OK, 1 row affected (0.11 sec)
    
        -- 不指定字段添加值
        mysql> insert into stu value(null,'wangwu',21,'w','lamp138');
        Query OK, 1 row affected (0.22 sec)
    
        -- 批量添加值
        mysql> insert into stu values
            -> (null,'zhaoliu',25,'w','lamp94'),
            -> (null,'uu01',26,'m','lamp94'),
            -> (null,'uu02',28,'w','lamp92'),
            -> (null,'qq02',24,'m','lamp92'),
            -> (null,'uu03',32,'m','lamp138'),
            -> (null,'qq03',23,'w','lamp94'),
            -> (null,'aa',19,'m','lamp138');
        Query OK, 7 rows affected (0.27 sec)
        Records: 7  Duplicates: 0  Warnings: 0
    
    修改操作:
        格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件 
    
        -- 将id为11的age改为35,sex改为m值
        mysql> update stu set age=35,sex='m' where id=11;
        Query OK, 1 row affected (0.16 sec)
        Rows matched: 1  Changed: 1  Warnings: 0
    
        -- 将id值为12和14的数据值sex改为m,classid改为lamp92
        mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 --等价于下面
        mysql> update stu set sex='m',classid='lamp92' where id in(12,14);
        Query OK, 2 rows affected (0.09 sec)
        Rows matched: 2  Changed: 2  Warnings: 0
    
    删除操作:
        格式:delete from 表名 [where 条件]
    
        -- 删除stu表中id值为100的数据
        mysql> delete from stu where id=100;
        Query OK, 0 rows affected (0.00 sec)
    
        -- 删除stu表中id值为20到30的数据
        mysql> delete from stu where id>=20 and id<=30;
        Query OK, 0 rows affected (0.00 sec)
    
        -- 删除stu表中id值为20到30的数据(等级于上面写法)
        mysql> delete from stu where id between 20 and 30;
        Query OK, 0 rows affected (0.00 sec)
    
        -- 删除stu表中id值大于200的数据
        mysql> delete from stu where id>200;
        Query OK, 0 rows affected (0.00 sec)
    

    1.15.5 数据的DQL操作:数据查询

    格式:
        select [字段列表]|* from 表名
        [where 搜索条件]
        [group by 分组字段 [having 子条件]]
        [order by 排序 asc|desc]
        [limit 分页参数]
    
    各种查询:
        mysql> select * from stu;
        +----+----------+-----+-----+---------+
        | id | name     | age | sex | classid |
        +----+----------+-----+-----+---------+
        |  1 | zhangsan |  20 | m   | lamp138 |
        |  2 | lisi     |  20 | m   | lamp138 |
        |  3 | wangwu   |  21 | w   | lamp138 |
        |  4 | zhaoliu  |  25 | w   | lamp94  |
        |  5 | uu01     |  26 | m   | lamp94  |
        |  6 | uu02     |  28 | w   | lamp92  |
        |  7 | qq02     |  24 | m   | lamp92  |
        |  8 | uu03     |  32 | m   | lamp138 |
        |  9 | qq03     |  23 | w   | lamp94  |
        | 10 | aa       |  19 | m   | lamp138 |
        | 11 | sad      |  35 | m   | lamp94  |
        | 12 | tt       |  25 | m   | lamp92  |
        | 13 | wer      |  25 | w   | lamp94  |
        | 14 | xx       |  25 | m   | lamp92  |
        | 15 | kk       |   0 | w   | lamp94  |
        +----+----------+-----+-----+---------+
        15 rows in set (0.00 sec)
    
        1. where条件查询
        1. 查询班级为lamp138期的学生信息
        mysql> select * from stu where classid='lamp138';
    
        2. 查询lamp138期的男生信息(sex为m)
        mysql> select * from stu where classid='lamp138' and sex='m';
    
        3. 查询id号值在10以上的学生信息
        mysql> select * from  stu where id>10;
    
        4. 查询年龄在20至25岁的学生信息
        mysql> select * from stu where age>=20 and age<=25;
        mysql> select * from stu where age between 20 and 25;
    
        5. 查询年龄不在20至25岁的学生信息
        mysql> select * from stu where age not between 20 and 25;
        mysql> select * from stu where age<20 or age>25;
    
        6. 查询id值为1,8,4,10,14的学生信息
        select * from stu where id in(1,8,4,10,14);
        mysql> select * from stu where id=1 or id=8 or id=4 or id=10 or id=14;
    
        7. 查询lamp138和lamp94期的女生信息
        mysql> select * from stu where classid in('lamp138','lamp94') and sex='w';
        mysql> select * from stu where (classid='lamp138' or classid='lamp94') and sex='w
    

    1.15.6 数据库授权、备份和恢复

    授权:
        格式:grant 允许操作 on 库名.表名 to 账号@来源 identified by '密码';
    
        --实例:创建zhangsan账号,密码123,授权lamp61库下所有表的增/删/改/查数据,来源地不限
        mysql> grant select,insert,update,delete on lamp61.* to zhangsan@'%' identified by '123';
        mysql> grant all on *.* to zhangsan@'%' identified by '123';
        Query OK, 0 rows affected (0.00 sec) 
    
        -- 授权一个用户(zhangsan)密码123,可以对所有的库,所有的表做所有操作。
        mysql> grant all on *.* to zhangsan@'%' identified by '123';
        Query OK, 0 rows affected (0.17 sec)
    
        --刷新生效,否则就要重启MySQL服务才可以。
        mysql> flush privileges;
        Query OK, 0 rows affected (0.00 sec)
    
        --浏览当前MySQL用户信息
        mysql> select user,host,password from mysql.user;
        +----------+-----------------+-------------------------------------------+
        | user     | host            | password                                  |
        +----------+-----------------+-------------------------------------------+
        | root     | localhost       | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
        | root     | 127.0.0.1       |                                           |
        |          | localhost       |                                           |
        | zhangsan | %               | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
        | admin    | 192.168.112.132 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
        +----------+-----------------+-------------------------------------------+
        5 rows in set (0.00 sec)
    
        -- 移除一些权限
        -- revoke:只删除了用户权限,但没有删除这个用户
        mysql> revoke insert,delete on *.* from admin@192.168.112.132 identified by'123';
    
        -- 查看指定用户的权限信息
        mysql> show grants for xbb@localhost;
        +------------------------------------------------------------------------------------------------------------+
        | Grants for xbb@localhost                                                                                   |
        +------------------------------------------------------------------------------------------------------------+
        | GRANT USAGE ON *.* TO 'xbb'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
        +------------------------------------------------------------------------------------------------------------+
    
        --drop user:删除了整个用户及其权限(包括数据字典中的数据)
        mysql> drop user 'xbb'@'localhost';
        Query OK, 0 rows affected (0.00 sec)
    
        mysql> select user,host from mysql.user;
        +------------------+-----------+
        | user             | host      |
        +------------------+-----------+
        | root             | 127.0.0.1 |
        | debian-sys-maint | localhost |
        | root             | localhost |
        | root             | wangxg    |
        +------------------+-----------+
        4 rows in set (0.00 sec)
    
    备份与恢复(导入和导出)
    -- 将lamp138库导出
    D:>mysqldump -u root -p lamp138 >lamp138.sql
    Enter password:
    
    ---- 将lamp138库中的stu表导出
    D:>mysqldump -u root -p lamp138 stu >lamp138_stu.sql
    Enter password:
    
    -- 将lamp138库导入
    D:>mysql -u root -p lamp138<lamp138.sql
    Enter password:
    
    -- 将lamp138库中stu表导入
    D:>mysql -u root -p lamp138<lamp138_stu.sql
    Enter password:
    

    1.15.7 MySQL的多表联查

    • 表之间的关系有:1对1 1对多 多对多
    1. 嵌套查询:一个查询的结果是另外sql查询的条件:
        如:查询stu表中年龄最大的是谁?
        mysql> select * from stu where age=(select max(age) from stu);
        mysql> select * from stu where age in(select max(age) from stu); --(子查询结果是多条时使用in查询)
        +----+------+------+-----+----------+
        | id | name | age  | sex | classid  |
        +----+------+------+-----+----------+
        | 14 | abc  |   33 | w   | python01 |
        +----+------+------+-----+----------+
        1 row in set (0.01 sec)
    
    2. where关联查询
    
        已知:员工personnel表和部门department表,其中员工表中的did字段为部门表id主键关联。
              查询所有员工信息,并显示所属部门名称
        要求:显示字段:员工id  部门 姓名
        mysql> select p.id,d.name,p.name from personnel p,department d where p.did = d.id;
            +----+-----------+-----------+
            | id | name      | name      |
            +----+-----------+-----------+
            |  2 | 人事部    | 李玉刚    |
            | 10 | 人事部    | 阿杜      |
            |  4 | 市场部    | 刘欢      |
            。。。。
    
    
    3. 连接join查询
        左联:left join
        右联:right join
        内联:inner join
    
    已知如下表所示,商品类别信息表(具有两层类别关系,通过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 |
    +----+-----------+------+
    12 rows in set (0.00 sec)
    
    mysql> desc type;
    +-------+------------------+------+-----+---------+----------------+
    | Field | Type             | Null | Key | Default | Extra          |
    +-------+------------------+------+-----+---------+----------------+
    | id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(16)      | NO   |     | NULL    |                |
    | pid   | int(10) unsigned | YES  |     | NULL    |                |
    +-------+------------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)
    
    -- 查询二级类别信息,并关联出他们的父类别名称
    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)
    

    1.15.8 MySQL的其他操作

    1. MySQL的表复制
        复制表结构
        mysql> create table 目标表名 like 原表名;
    
        复制表数据
        mysql> insert into 目标表名 select * from 原表名; 
    
    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日志
        开启日志: 在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;
  • 相关阅读:
    列表标签
    超链接标签
    HTML:如何把一个无序列表转换成横向菜单
    window界面控制
    C++文件读写
    宽度,对齐方式的设置
    取出一个整数的每一位
    求两个数的最大公约数
    判断素数
    天才ACM ---待复习标志
  • 原文地址:https://www.cnblogs.com/qinlongqiang/p/11713242.html
Copyright © 2011-2022 走看看