mysql数据误改怎么还原_MYSQL插入数据,修改数据,误操作怎么恢复实例

往表里插入数据

mysql> insert into student(id,name) values(1,‘xxx‘);

Query OK, 1 row affected (0.00 sec)

mysql> select * from student;

+----+------+-----+------+

| id | name | age | dept |

+----+------+-----+------+

|  1 | xxx  |   0 | NULL |

+----+------+-----+------+

1 row in set (0.00 sec)

id列是自增的

备份数据库

mysqldump -uroot -p -B xiaohu >/opt/xiaohu_bak.sql

过滤 查看备份数据 grep -E -v "#|\/|^$|--" /opt/xiaohu_bak.sql

备份数据注意要是备份全的数据库知识点

mysqldump -uroot -p -A   -B xiaohu >/opt/xiaohu_bak.sql  会报错为什么因为-A是备份所有数据库而你后边有指定了数据库所以报错

插入数据 批量插入

查询数据优化  这样的话就会查出你想要的字符段

mysql> select id,name from student;

+----+------+

| id | name |

+----+------+

|  1 | xxx  |

+----+------+

条件查询select id,name from student where id=你想要的id; 可以根据你的字符段的名字查询这就是name  字符串查询如(asdfsdf) 一定要加‘’否则不走索引

多条件查询

select id,name from student where id=   and和   name=   select id,name from student where id=   or或者   name=

如果要查询id大于2小于5的语句

select id,name from stundent where id>2 and id<5;

查询语句的计划如走索引 explain 判断语句走索引

mysql> explain select * from student where name=‘xiaohu‘\G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: student

type: ref

possible_keys: index_name,ind_name_dept

key: index_name 索引的表明

key_len: 60 索引长度

ref: const

rows: 1 读了一行

Extra: Using where

1 row in set (0.01 sec)

修改表中的数据 update

mysql> update student set name=‘gongli‘ where id=2;  语法update 表名 set 改的名字  条件 哪里?

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

注意误操作

如mysql> update student set name=‘gongli‘  后面没加条件,那么结果就会将你所有数据的表名都改成gongli

MYSQL备份

前面的那个怎么解决呢?

log-bin一定要备份 打开就会自动生成

log-bin对修改的东西记录

恢复数据库怎么恢复 ?如何在不停库的情况下恢复?

切割

防止数据库误操作如update

来个案例

mysql> use xiaohu;

Database changed

mysql> select * from student;

+----+--------+-----+------+

| id | name   | age | dept |

+----+--------+-----+------+

|  1 | xxx    |   0 | NULL |

|  2 | gongli |   0 | NULL |

|  6 | qqq    |   0 | NULL |

+----+--------+-----+------+

3 rows in set (0.01 sec)      现在这个数据是正确的,那么我想把第2个id改为gongli,方法前面有

那么如果我误操作呢,比如我想把第二行改了,但是忘了加条件都改成gongli

mysql  -U 这样就会防止你误操作

mysql> update student set name=‘gongli‘;

ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

那么怎么每次启动会自动成为-U 状态呢?

alias mysql=‘mysql -U’

案例如果把表中的数据都删除了呢?怎么办

mysql> delete from student where id=1; 逻辑删除

Query OK, 1 row affected (0.00 sec)

mysql> truncate table student;  直接清空

Query OK, 0 rows affected (0.01 sec) 这两个都是删除 表的语句,后者更快

增删改表的字段

命令语法  alter table 表明 add 字段  类型 其他;

mysql> alter table student add sex char(4);

Query OK, 0 rows affected (0.02 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;

+-------+-------------+------+-----+---------+----------------+

| Field | Type        | Null | Key | Default | Extra          |

+-------+-------------+------+-----+---------+----------------+

| id    | int(11)     | NO   | PRI | NULL    | auto_increment |

| name  | char(20)    | NO   | MUL | NULL    |                |

| age   | tinyint(2)  | NO   | MUL | 0       |                |

| dept  | varchar(16) | YES  | MUL | NULL    |                |

| sex   | char(4)     | YES  |     | NULL    |                |

+-------+-------------+------+-----+---------+----------------+

5 rows in set (0.00 sec)

默认会添加到最后一列

那么我想添加到 qiqi列到name列后面呢?      after后列

mysql> alter table student add qiqi int(4) after name;

Query OK, 0 rows affected (0.02 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;

+-------+-------------+------+-----+---------+----------------+

| Field | Type        | Null | Key | Default | Extra          |

+-------+-------------+------+-----+---------+----------------+

| id    | int(11)     | NO   | PRI | NULL    | auto_increment |

| name  | char(20)    | NO   | MUL | NULL    |                |

| qiqi  | int(4)      | YES  |     | NULL    |                |

| age   | tinyint(2)  | NO   | MUL | 0       |                |

| dept  | varchar(16) | YES  | MUL | NULL    |                |

| sex   | char(4)     | YES  |     | NULL    |                |

+-------+-------------+------+-----+---------+----------------+

6 rows in set (0.00 sec)

那添加到第一行呢?

mysql> alter table student add   meng varchar(22) first;

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;

+-------+-------------+------+-----+---------+----------------+

| Field | Type        | Null | Key | Default | Extra          |

+-------+-------------+------+-----+---------+----------------+

| meng  | varchar(22) | YES  |     | NULL    |                |

| id    | int(11)     | NO   | PRI | NULL    | auto_increment |

| name  | char(20)    | NO   | MUL | NULL    |                |

| qiqi  | int(4)      | YES  |     | NULL    |                |

| age   | tinyint(2)  | NO   | MUL | 0       |                |

| dept  | varchar(16) | YES  | MUL | NULL    |                |

| sex   | char(4)     | YES  |     | NULL    |                |

+-------+-------------+------+-----+---------+----------------+

7 rows in set (0.00 sec)

怎么去修改表名呢? rename  表  表名 更改 更改的名字

mysql> rename  table student to student2;

Query OK, 0 rows affected (0.01 sec)

原文:http://10966380.blog.51cto.com/10956380/1750411

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值