MySQL常用操作

1. 表复制

复制表结构+复制表数据(推荐)
mysql>create table t2 like t1; mysql>insert into t2 select * from t1; 

直接复制表数据,但无索引和约束 
mysql>create table t3 select * from t1; 

2. 函数

数学

ABS(x)               --- 返回x的绝对值 
BIN(x)               --- 返回x的二进制(OCT返回八进制,HEX返回十六进制) 
CEILING(x)           --- 返回大于x的最小整数值 
FLOOR(x)             --- 返回小于x的最大整数值 
GREATEST(x1,x2,...,xn) --- 返回集合中最大的值 
LEAST(x1,x2,...,xn)  --- 返回集合中最小的值 
LN(x)                --- 返回x的自然对数 
LOG(x,y)             --- 返回x的以y为底的对数
MOD(x,y)             --- 返回x/y的模(余数)
PI()                 --- 返回pi的值(圆周率) 
RAND()               --- 返回0到1(不含1)的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。 
ROUND(x,y)           --- 返回参数x的四舍五入的有y位小数的值 
SIGN(x)              --- 返回代表数字x的符号的值 
SQRT(x)              --- 返回一个数的平方根 
TRUNCATE(x,y)        --- 返回数字x截短为y位小数的结果

聚合(常用于GROUP BY从句的SELECT查询中)

AVG(col)     --- 返回指定列的平均值 
COUNT(col)   --- 返回指定列中非NULL值的个数 
MIN(col)     --- 返回指定列的最小值 
MAX(col)     --- 返回指定列的最大值 
SUM(col)     --- 返回指定列的所有值之和 
GROUP_CONCAT(col) --- 返回由属于一组的列值连接组合而成的结果

字符串函数

ASCII(char)                     --- 返回字符的ASCII码值 
BIT_LENGTH(str)                 --- 返回字符串的比特长度 
CONCAT(s1,s2...,sn)             --- 将s1,s2...,sn连接成字符串 
CONCAT_WS(sep,s1,s2...,sn)      --- 将s1,s2...,sn连接成字符串,并用sep字符间隔 
LCASE(str)或LOWER(str)          --- 返回将字符串str中所有字符改变为小写后的结果 
LEFT(str,x)                     --- 返回字符串str中最左边的x个字符 
LENGTH(s)                       --- 返回字符串str中的字符数 
LTRIM(str)                      --- 从字符串str中切掉开头的空格 
POSITION(substr,str)            --- 返回子串substr在字符串str中第一次出现的位置 
REPEAT(str,srchstr,rplcstr)     --- 返回字符串str重复x次的结果 
REVERSE(str)                    --- 返回颠倒字符串str的结果 
RIGHT(str,x)                    --- 返回字符串str中最右边的x个字符 
RTRIM(str)                      --- 返回字符串str尾部的空格 
TRIM(str)                       --- 去除字符串首部和尾部的所有空格 
UCASE(str)或UPPER(str)          --- 返回将字符串str中所有字符转变为大写后的结果

日期和时间函数

CURDATE()或CURRENT_DATE()   --- 返回当前的日期 
CURTIME()或CURRENT_TIME()   --- 返回当前的时间 
DATE_FORMAT(date,fmt)       --- 依照指定的fmt格式格式化日期date值 
FROM_UNIXTIME(ts,fmt)       --- 根据指定的fmt格式,格式化UNIX时间戳ts 
HOUR(time)                  --- 返回time的小时值(0~23) 
MINUTE(time)                --- 返回time的分钟值(0~59)
MONTH(date)                 --- 返回date的月份值(1~12) 
NOW()                       --- 返回当前的日期和时间 
WEEK(date)                  --- 返回日期date为一年中第几周(0~53) 
YEAR(date)                  --- 返回日期date的年份(1000~9999)

加密函数

MD5(str)        --- 计算字符串str的MD5校验和 
PASSWORD(str)   --- 返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。 
SHA(str)        --- 计算字符串str的安全散列算法(SHA)校验和

格式化函数

FORMAT(x,y)     --- 把x格式化为以逗号隔开的数字序列,y是结果的小数位数 
INET_ATON(ip)   --- 返回IP地址的数字表示 
INET_NTOA(num)  --- 返回数字所代表的IP地址

系统信息函数

DATABASE()               --- 返回当前数据库名 
BENCHMARK(count,expr)    --- 将表达式expr重复运行count次 
CONNECTION_ID()          --- 返回当前客户的连接ID 
FOUND_ROWS()             --- 返回最后一个SELECT查询进行检索的总行数 
USER()或SYSTEM_USER()    --- 返回当前登陆用户名 
VERSION()                --- 返回MySQL服务器的版本

以上函数全部使用select调用输出,以下为常用show操作

SHOW CHARACTER SET       --- 显示所有可用的字符集 
SHOW COLLATION           --- 输出包括所有可用的校对字符集 
SHOW COLUMNS             --- 显示在一个给定表中的各列的信息,对于视图,本语句也起作用。 
SHOW CREATE DATABASE     --- 显示用于创建给定数据库CREATE DATABASE语句。 
SHOW DATABASES           --- SHOW DATABASES可以在MySQL服务器主机上列举数据库。 
SHOW ENGINES             --- 检查一个存储引擎是否被支持,或者对于查看默认引擎是什么 
SHOW INDEX               --- 会返回表索引信息。 
SHOW TABLES              --- 列举了给定数据库中的非TEMPORARY表。 
SHOW VARIABLES           --- 列举当前环境变量

3. 预处理

预先处理SQL的语法,通过传值完成SQL。
优势:提高效率(重用),防止SQL注入(安全)。 PDO中的prepare就是调用该方法!!!

1、设置stmt1预处理,传递一个数据作为一个where判断条件 
mysql>prepare stmt1 from 'select * from t1 where id>?'; 
2、设置一个变量 
msyql>set @i=1; 
3、执行stmt1预处理 
mysql>execute stmt1 using @i; 
4、删除预处理 
mysql>drop prepare stmt1;

4. 事务

多个步骤为一个过程的事物(整体),中间有任何一个环节出问题,都会造成事物的回滚
表类型(引擎):innodb

1、 关闭自动提交功能或开启事务 
mysql>set autocommit=0; mysql>begin; 
2、 删除记录 
mysql>delete from t1 where id = 2; 
3、 创建还原点 
mysql>savepoint p1; 
4、 删除记录 
mysql>delete from t1 where id = 3; 
5、 再创建还原点 
mysql>savepoint p2; 
6、 删除记录 
mysql>delete from t1 where id = 4; 
7、 退回还原点 
mysql>rollback to p1; 
mysql>rollback to p2; 
8、 退回起始点 
mysql>rollback; 
9、 确认提交 
mysql>commit;

5. 存储

批量的有规律的mysql操作可以事前存在procedure中,后期调用。

1、 创建一个存储p1() 
mysql>\d // //将结束符修改为”//” 或者delimiter // 
mysql>create procedure p1() 
->begin
->set @i=1; 
->while @i<6 do 
->select * from t1 where id=@i; 
->set @i=@i+1; 
->end while; 
->end// 
2、 执行存储p1() 
mysql>\d ; //将结束符修改回; 
mysql>call p1; 
3、 查看所有procedure的status信息 
mysql>show procedure status\G 
4、 查看procddure p1()的具体信息 
mysql>show create procedure p1\G 
5、 删除procedure 
mysql>drop procedure p1;

6. 触发器

监视某种事件,并触发某种操作。(商品添加,订单消除等连贯表操作时使用)
触发四要素:
1、监视地点(table)
2、触发时间(after/before)
3、监视事件(insert/update/delete)
4、触发事件(insert/update/delete)

1、 修改delimiter为// 
mysql>\d // 
2、 创建一个名为tg1的触发器,当向t1表中插入数据前,就向a表中插入一条数据 
mysql>create trigger tg1 before insert on t1 for each row   #固定写法 
->begin 
-> insert into a values (4); 
->end//
3、 修改delimiter为; 
mysql>\d ; 
4、 插入数据测试 
insert into t1 values (null,'tom');

7. 视图

mysql>insert into t1 (name) select t1.name from t1; 
创建视图: 
  mysql>create view v_t1 as select * from t1 where id>1 and id<5; 
视图帮助信息: 
  mysql>? view 
        ALTER VIEW 
        CREATE VIEW 
        DROP VIEW 
查看视图: 
  mysql>show tables; 
  mysql>select * from v_t1; 
删除视图: 
  drop view v_t1; 
  视图相当于表查询的快捷方式,表数据改变,视图也跟着变。

8. 临时表

仅在当前session有效的存在于内存中的临时表。

create temporary table tmp1 (id int) ;

只对当前会话(连接)有效,断开后,临时表自动清除,也可以自己drop table tmp1;临时表在销毁前,文件暂存/tmp下。

9. 虚拟表

dual 在Oracl中有虚拟表技术,MySQL也效仿设置虚拟表。MySQL中直接查数据或者调用函数可以不用from表,但为了照顾select from 的习惯固设立

虚拟表 dual

mysql>select now(); //实际操作为下句 
mysql>select now() from dual;

10. 重置自增

MySQL数据库自增ID如何恢复

清空表
    delete from tablename //只能清空数据,不能重置ID 
修改表
    alter table tablename auto_increment=1; 
或者 
    truncate table tablename; //推荐

11. 数据导入导出

完整备份:

[root@localhost ~]# /usr/local/mysql/bin/mysqldump -uroot -p -l -F test>'/tmp/test.sql' 

导出一个数据库中每一个表的相关SQL语句,包含建表、增删改查等导入导出速度慢!
完整导入:

create database test2; 
[root@localhost ~]# /usr/local/mysql/bin//mysql -uroot -p123 test2</tmp/test.sql 

单表数据备份:

mysql>select * from t1 into outfile '/tmp/t1.txt'; 

仅仅是导出表数据,查什么就导出什么。
导入数据:

truncate t1;   #准备工作,先清空表,或自己创建一个表 
mysql>load data infile '/tmp/t1.txt' into table t1; 

可以指定某一些列,空置字段为NULL或者默认值 
mysql>load data infile '/test/users.txt' into table users(id,name);

12. 索引操作

什么是索引? 就像是书的目录,能够提高查询速度,降低写入速度,占用磁盘空间

分类:主键、唯一、普通、全文(sphinx等检索引擎代替)
ALTER TABLE ADD //增 
ALTER TABLE table_name ADD INDEX idx_name(column_list) 
ALTER TABLE table_name ADD UNIQUE uk_name (column_list) 
ALTER TABLE table_name ADD PRIMARY KEY (column_list) 
ALTER TABLE DROP //删 
ALTER TABLE table_name DROP INDEX idx_name/uk_name //唯一和普通都用此方式 
ALTER TABLE table_name DROP PRIMARY KEY show index from table_name //查 

注意: 删除主键索引,该字段不能有auto_increment,如果有先修改掉再删。
修改索引:先增再删

13. root密码丢失找回

丢失时的密码重置
1、 停止服务 
    pkill mysqld 
2、 重启服务,但需要跳过授权表限制 
    /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql & 
3、 登录 
    mysql -uroot 不用密码即可 
4、 查看现有用户 
    select user,host,password from mysql.user; 
5、 修改密码 
    update mysql.user set password=password('123') where user='root' and host='localhost' 
6、 退出 
    exit 
7、 重启MySQL 
    pkill mysqld /usr/local/mysql/bin/mysqld_safe --user=mysql & 
正常修改密码方式:
方法一: 
  正常登陆mysql后, 
  mysql> set password for root@localhost=password("123"); 

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