您的位置:首页 > 数据库 > MySQL

MYSQL插入数据,修改数据,误操作怎么恢复实例

2016-03-12 23:15 761 查看
往表里插入数据
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息