mysql 数据库常用技巧

mysql 数据库常用技巧

1. 关于备份数据库

register数据库中有user表和logs表
  1. 备份整个数据库
mysqldump -uroot -p register > register.sql
// 备份register数据库并生成register.sql数据库文件
  1. 备份数据库中单张表
mysqldump -u root -p register user > backups.sql
// 备份register数据库中user表到backups.sql数据库文件中
  1. 将sql文件写入数据库中
mysql -u root -p register < backups.sql
// 将backups.sql文件写入到register数据库中,这里请注意:mysql -u root -p 后面只能跟数据库,而不能跟sql文件!
这里backups.sql中如果只含有user中的数据,那么执行这个写入过程的时候,不会对logs有任何影响。
  1. 导出数据库的表结构(如果数据库中含有数据,不会导出数据,只会导出字段名)
mysqldump -d -uroot -p register user > user.sql
// 将register数据库中的user表结构导出
  1. 备份所有的数据库
mysqldump -u root -p --all-databases > database_dump.txt
// 将所有的数据库都备份到database_dump.txt文件中去
  1. 复制表
    使用 SHOW CREATE TABLE 命令获取创建数据表(CREATE TABLE) 语句,该语句包含了原数据表的结构,索引等。
// 显示创建 user 表的 sql 语句
SHOW CREATE TABLE workflow_oa

2. 常用命令

  1. 连接数据库
mysql -h[主机地址] -u[用户名] -p[用户密码] 

//举例:连接本地数据库 mysql -h 127.0.0.1 -u root -p 123456 (有些情况下可以不需要输入主机地址):mysql -u root -p
  1. 创建数据库
create database [库名];

//举例:创建thinkcms数据库 create database thinkcms;

create database [库名] charset utf8; //创建数据库并存储字符集为utf8

create database [库名] DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # utf8编码

create database [库名] DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk编码
  1. 显示所有数据库
show databases;
  1. 打开数据库
use [库名];

//举例:使用thinkcms数据库 use thinkcms
  1. 删除数据库
drop database [库名]; 

//举例:删除thinkcms数据库 drop database thinkcms
  1. 创建数据表
CREATE TABLE [表名] ([字段名] [字段类型] [字段参数]);

//举例:创建reg数据表并将id设置成自增主键,并将innodb设置成存储引擎,字符集设置成utf8
mysql> CREATE TABLE reg(
   -> id INT NOT NULL AUTO_INCREMENT,
   -> user VARCHAR(100) NOT NULL,
   -> pwd VARCHAR(40) NOT NULL,
   -> create_time DATE,
   -> PRIMARY KEY (id)
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
   
  1. 显示数据表字段名(以及字段名备注)
desc [表名];    (或者使用:show columns from [表名];)

// 举例:显示reg表的字段名 
desc reg;  
show columns from reg;  
// 显示字段名包含备注
show full columns from reg;
  1. 显示当前数据库下所有的数据表
show tables;
  1. 删除数据表
drop table [表名];

//举例:删除reg表 drop table reg;
  1. 清空表内容
truncate [表名];

//举例:清除 reg 表中所有内容, truncate reg;
  1. 对数据表重命名
alter table [旧表名] rename as [新表名];

//举例:将register表名称修改为users
alter table register rename as users;
  1. 修改表
  • 添加列:
alter table 表名 add 列名 类型
// 举例: ALTER TABLE menus ADD status TINYINT(1) DEFAULT 1 COMMENT '是否显示' 
  • 删除列:
alter table 表名 drop column 列名
  • 修改列:
alter table 表名 modify column 列名 类型;  -- 类型

alter table 表名 change column 原列名 新列名 类型; -- 列名,类型
ALTER TABLE students CHANGE COLUMN birth birthday VARCHAR(20) NOT NULL;
  • 添加主键:
alter table 表名 add primary key(列名);
  • 删除主键:
alter table 表名 drop primary key;

alter table 表名  modify  列名 int, drop primary key;
  • 添加外键:
alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);

// 例子
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);

其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)
  • 删除外键:
alter table 表名 drop foreign key 外键名称

// 例子 (不会删除外键字段)
ALTER TABLE students
DROP FOREIGN KEY fk_class_id;
  • 修改默认值:
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
  • 删除默认值:
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
  1. 对数据表的CURD
插入数据:
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
                       
//举例:在register表中插入一行数据:
insert into register (`user`,`time`,`pwd`) values ('小明', '2016-04-22 15:25:33', '1');
//插入多行数据:
INSERT INTO employee_tbl (`pid`,`user`,`time`,`pwd`) VALUES 
('1', '小明', '2016-04-22 15:25:33', '1'), 
('2', '小王', '2016-04-20 15:25:47', '3'), 
('3', '小丽', '2016-04-19 15:26:02', '2'), 
('4', '小王', '2016-04-07 15:26:14', '4'), 
('5', '小明', '2016-04-11 15:26:40', '4'),
('6', '小明', '2016-04-04 15:26:54', '2');

更新数据:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause];

//举例:在register表中更新第一条数据:
update register set user="王五",pwd=555 where id=1;
// 所有80分以下的同学成绩加10分
UPDATE students SET score=score+10 WHERE score<80;

删除数据:
DELETE FROM table_name [WHERE Clause];

//举例:在register表中删除第一条数据:
delete from register where id=1;

查询语句:
SELECT column_name,column_name
FROM table_name
[WHERE Clause];

=====================where 条件=====================
//举例:在register表中查询id=1的数据:
select * from register where id=1;

select * from 表 where id > 1 and name != 'aylin' and num = 12;
select * from 表 where id between 5 and 16;
select * from 表 where id in (11,22,33)
select * from 表 where id not in (11,22,33)
select * from 表 where id in (select nid from 表)

=====================通配符 like=====================
//在register表中查询所有名字name含有张三的人
select * from register where name like "%张三%";
select * from register where name like '张三_'  # 张三开头的所有(一个字符)

=====================限制 limit=====================
select * from 表 limit 5;            - 前5行
select * from 表 limit 4,5;          - 从第4行开始的5行
select * from 表 limit 5 offset 4    - 从第4行开始的5行

=====================排序 asc,desc=====================
select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序

=====================分组 group by=====================
select num from 表 group by num
select num,nid from 表 group by num,nid
select num,nid from 表  where nid > 10 group by num,nid order nid desc
select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
select num from 表 group by num having max(id) > 10

特别的:group by 必须在where之后,order by之前

3. 其它简单命令

  1. 查询时间:
select now();
  1. 查询当前用户:
select user();
  1. 查询数据库版本:
// 方法01、命令行中直接敲以下命令
mysql -V (大写的V)
// 方法02、命令行中输入以下命令
mysql --help | grep Distrib
// 方法03、连接数据库之后输入
status
// 方法04、直接查询版本
select version();
  1. 查询当前使用的数据库:
select database();
  1. 查询当前日期:
select current_date;
  1. 查询当前时间距离指定时间的天数
SELECT DATEDIFF(CURDATE(), FROM_UNIXTIME(1527782400, '%Y-%m-%d'))
// 1527782400对应的是2018-06-01 00:00的时间戳,如果今天是2018-06-07,那么返回的值就是6
  1. 时间戳和时间互相转换
// 时间戳转换成时间
SELECT FROM_UNIXTIME(1234567890);
SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S')
// 会输出 2009-02-14 07:31:30

// 时间转换成时间戳
SELECT unix_timestamp("2018-6-1 00:00:00");
// 会输出 1527782400

4. 默认数据库

  • 默认数据库有如下:
  1. mysql :用户权限相关数据
  2. test : 用于用于测试数据
  3. information_schema : MySQL本身架构相关数据
  • 用户管理:
  1. 创建用户
create user '用户名'@'IP地址' identified by '密码';
  1. 删除用户
drop user '用户名'@'IP地址';
  1. 修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';
  1. 修改密码
set password for '用户名'@'IP地址' = Password('新密码');
  • 权限管理:
  1. 查看权限
show grants for '用户'@'IP地址'
  1. 授权
grant  权限 on 数据库.表 to   '用户'@'IP地址'

2.1. 创建一个alex用户,并赋予权限

grant all privileges on *.* to  alex@"%" identified by "qazwsx" with grant option;

//grant 是授权命令,其中 alex 是我们连接用的用户名、"qazwsx"是连接密码,用户名后面的 "%" 通用符表示允许各 host 操作。
  1. 取消授权
revoke 权限 on 数据库.表 from '用户名'@'IP地址'
  1. 刷新授权
flush privileges;
  1. 授权示例如下:
grant all privileges on db1.tb1 TO '用户名'@'IP'

grant select on db1.* TO '用户名'@'IP'

grant select,insert on *.* TO '用户名'@'IP'

revoke select on db1.tb1 from '用户名'@'IP'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,865评论 0 9
  • -- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell--*执行DOS各种命令,结果以文本行...
    overad阅读 2,269评论 0 13
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,361评论 1 8
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,699评论 0 30
  • 标签(空格分隔): Linux 运维 MySQL sql文件hellodb.sql 架构 MySQL被设计为一个单...
    uangianlap阅读 672评论 0 1