MYSQL的增、删、查、改
 
注册、授权
#创建一个对数据库中的表有一些操作权限的用户,其中OPERATION可以用all privileges替换,DBNAME、TABLENAME可以用*替换,表示全部
mysql> grant OPERATION on DBNAME.TABLENAME to 'USERNAME'@'IP_ADDR' [identified by 'PASSWD'];
mysql> create user 'USERNAME'@'IP_ADDR' identified by 'PASSWD';
mysql> revoke OPERATION on DBNAME.TABLENAME from USERNAME;     #收回用户的某些权限
mysql> show grants for 'USERNAME'[@'IP_ADDR'];     #查询用户权限
$ mysqladmin -u USERNAME -p [OLD_PWD] password NEW_PWD     #更新密码(注:如果原来没有密码OLD_PWD就不要写)
 
mysql字段的数据类型
int[(M)]      #整型
double[(M,D)]     #双精度浮点型
date     #日期类型 格式YYYY-MM-DD 范围1000-01-01——》9999-12-31
char(M)     #字符类型
blob text    #定长字符串(会用空格填满)
varchar     #变长字符串类型
timestamp     #时间戳
 
mysql数据类型相关函数
INET_ATON(expr)     #将一个表示ip地址的字符串转换为整数
INET_NTOA(expr)     #将一个整数转换为表示ip地址的字符串
NOW()     #获取当前时间戳
TO_DAYS(timestamp)     #一年中的哪一天
DAYOFWEEK(expr)     #一周中的哪一天,周日开始,从1计数
WEEKDAY(expr)     #一周中的哪一天,周一开始,从0计数
DAYOFMONTH(expr)     #一月中的哪一天,从1计数
DAYOFYEAR(expr)     #一年中的哪一天,从1计数
MONTH(expr)          #月份1-12
DAYNAME(expr)          #星期的名字
MONTHNAME(expr)       #月份的名字
QUARTER(expr)     #一年中季度1-4
WEEK(expr)          #一年中的周数0-52
YEAR(expr)     #年份
HOUR(expr)     #小时0-23
MINUTE(expr)     #分钟0-59
SECOND(expr)          #秒0-59
PERIOD_ADD(expr1, expr2)     #增加N个月,expr1为日期字符串,expr2为增加的时间(与expr1最小单位一样)
PERIOD_DIFF(expr1, expr2)     #两个最小单位相同的日期字符串比较
DATE_ADD(expr1, INTERVAL expr2 date_type)     #增加以date_type为单位的expr2个时间间隔
DATE_SUB(expr1, INTERVAL expr2 date_type)     #减少以date_type为单位的expr2个时间间隔
 
DATA_FROMAT(expr1, format)     #将expr1表示的时间以format格式输出,其中format的相关字符含义如下:
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
 
数据库的增、删、查
mysql> create database DBNAME;     #创建数据库
mysql> use DBNAME;     #连接数据库
mysql> select database();     #查看当前连接的数据库
mysql> show databases;     #查看所有的数据库
mysql> drop database DBNAME;     #删除数据库
 
表的增、删、查、改
mysql> drop table if exists TABLENAME; create table if not exists TABLENAME (KEY1 varchar(128) TYPENAME1, KEY2 TYPENAME2, ....); #建表
mysql> show tables;     #查看当前连接数据库中所有的表名
mysql> desc TABLENAME;     #查看表结构
mysql> rename table TABLENAME_OLD to TABLENAME_NEW;     #表的重命名
mysql> drop table TABLENAME;     #删除表
mysql> alter table TABLENAME add KEY TYPENAME;     #表中增加一列
mysql> alter table TABLENAME modify column KEY1 TYPENAME1 [(befor | after) KEY2] ;     #修改字段类型
mysql> alter table TABLENAME drop KEY;     #删除表的一个字段
mysql> insert into TABLENAME [(KEY1, KEY2, ....)] values(VALUE1, VALUE2, ....);     #表中插入数据
mysql> select KEY1, KEY2, ... from TABLENAME where EXPRESSION;     #查询表中数据
mysql> delete from TABLENAME where EXPRESSION;     #删除表中数据
mysql> update TABLENAME set KEY1=VALUE1, KEY2=VALUE2, .... where EXPRESSION;     #更新表中数据
注:由于mysql中不支持datetime字段设置默认值,所以只能采用timestamp,但是timestamp只能到2038年
 
表查询的高级用法
谓词:ALL(符合条件的全部)、DISTINCT(相同字段数据只返回一条)、DISTINCTROW(相同记录只返回一条)、TOP(头尾的若干记录,当使用百分比的时候,为TOP N PERCENT,N为数字)、AS(为结果字段取别名,AS前面是原名、后面为别名)
 
比较符:
= #等于      > #大于      < #小于      >= #大于等于
<= #小于等于     <> #不等于      !> #不大于      !< #不小于     NOT #用于比较表达式前表示相反
 
模式匹配(必须在LIKE之后):
%     #替代一个或者多个字符
-     #仅替代一个字符
[charlist]     #字符列中任何单一字符
[^charlist]     #不在字符列中的任何单一字符
 
[NOT] BETWEEN ... AND .. #指定要搜索的闭区间[之外]的范围
[NOT] IN     #用于[不]匹配列表中的任何一个值
ORDER BY KEY1 (ASC|DESC), KEY2 (ASC|DESC) ...    #将结果以KEY的(升/降)序排列,默认是ASC
... AND ...     #同时满足两个条件
GROUP BY KEY1, KEY2... [HAVING CONDITION]     #以KEY1、KEY2等进行分组,HAVING 调用一些聚集函数来过滤分组的查询结果
 
聚集函数:
SUM(KEY)     #求和
AVG(KEY)     #求均值
COUNT(KEY)     #计数
COUNT(*)     #所有记录计数
MAX(KEY)          #最大值
MIN(KEY)          #最小值
VAR(KEY)          #方差
STDEV(KEY)     #标准差
FIRST(KEY)     #第一个
LAST(KEY)     #最后一个
CONCAT(KEY1, KEY2, ...)     #将keys连接起来成为字符串
 
#将查询结果写入到另一个表TABLENAME1中
mysql> select KEY1, KEY2, ... into TABLENAME1 from TABLENAME2 where EXPRESSION;
 
#将从TABLENAME1、TABLENAME2两个表中的查询数据合并展示
mysql> select KEY1, KEY2, ... from TABLENAME1 where EXPRESSION1 union select KEY3, KEY4, .. from TABLENAME2 where EXPRESSION2;
 
#TABLENAME1表中key3大于子查询结果的记录
mysql> select KEY1, KEY2, ... from TABLENAME1 where KEY3 (>|=|<|<>) (ANY|ALL|SOME) (select KEY3 from TABLENAME2 where EXPRESSION);
 
#TABLENAME1表中key3[不]属于子查询结果列表中的记录
mysql> select KEY1, KEY2, ... from TABLENAME1 where KEY3 [NOT] IN (select KEY3 from TABLENAME2 where EXPRESSION);
 
#根据子查询的结果来决定是否执行从TABLENAME1表中进行查询
mysql> select KEY1, KEY2, ... from TABLENAME1 where exists (select KEY3 from TABLENAME2 where EXPRESSION);
 
 
查询(删除)5min之前的内容
select * from email_info where minute(now() - c_time) > 5;  该方法如果跨整点就会有问题
select * from email_info where timestampdiff(minute, c_time, now()) > 5;
delete from email_info where  timestampdiff(minute, c_time, now()) > 5;
注:minute是将时间转换成分钟的函数,类似的还有year、dayofyear、month、monthname、dayofmonth、week、weekday、dayname、hour、minute、second等
 

索引、视图、触发器、存储过程、游标、事务
 
视图是虚拟表,相当于一个sql语句的别名,特定情况下可以对视图进行增、删、改操作,前提是:没有group by分组、没有union连接、没有子查询、没有并、没有聚集函数、没有DISTINCT、导出(计算)列
索引、视图的增、删、改
mysql> create index INDEX_NAME on TABLENAME(KEY);     #创建索引
mysql> show index from TABLENAME;     #查询索引
mysql> drop index INDEX_NAME;     #删除索引
 
mysql> create view VIEW_NAME(KEY1, KEY2, ...) as select KEY3, KEY4 from TABLENAME;     #创建视图
mysql> drop view VIEW_NAME;     #删除视图
 
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。存储过程3个主要的好处:简单、安全、高性能。
存储过程的创建、删除、调用
#创建一个存储过程PROC_NAME, 其中DELIMITER//告诉命令行实用程序使用//作为新的语句结束符,可以看到表示存储过程结束的END定义END//而不是END;作为语句结束。最后使用DELIMITER; 恢复原来的语句结束符,因为mysql中;默认为结束符,为了存储过程正常使用,所以需要替换procedure中的存储过程。
#参数中的IN/OUT表示参数是传入的还是输出的,参数是无类型的,可以是一个简单变量,也可以是一个表名(此时可以直接select @arg来查询结果),通常存储过程使用select ... into ... 语句将结果保存到输出变量中
 
delimiter //
create procedure PROC_NAME([IN/OUT] ARG1 TYPENAME, [IN/OUT]ARG2 TYPENAME, ...)
BEGIN
     SQL_SENTENCES;
END//
delimiter ;
 
mysql> call PROC_NAME(@arg1, @arg2, ...);     #调用存储过程,mysql中变量前面需要加@
mysql> drop procedure PROC_NAME if exists;     #删除存储过程
mysql> show create procedure PROC_NAME;          #查看创建存储过程的sql语句
mysql> show procedure status like 'EXP';     #查看存储过程的相关信息
 
游标是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结构集。在存储了游标之后,应用程序可以根据需要滚动或浏览或更改其中的数据。
游标使用步骤:
  1. 使用前需要先声明
  2. 使用时必须打开游标(执行相关的sql查询语句),游标打开后使用FETCH语句分别访问每一行、FETCH指定检索什么数据、存储在何地,同时会将游标指向下一行(即下一条FETCH就会检索下一行)
  3. 根据需要行数据,使用完毕后必须关闭
declare CURSOR_NAME cursor for select KEY1, KEY2, ... from TABLENAME;     #声明一个游标
open CURSOR_NAME;     #打开游标
FETCH CURSOR_NAME into TABLENAME2;     #将游标获取的一行记录存到数据表中。
close CURSOR_NAME;      #关闭游标
 
触发器是MySQL响应INSERT、UPDATE、DELETE三个中的任意一个语句而自动执行的一条sql语句。触发器创建条件:名称唯一、有具体表关联(视图、临时表不行)、与相关的操作(INSERT/UPDATE/DELETE)关联响应、在关联语句执行前/后执行。
触发器的创建、删除
mysql> create trigger TRI_NAME (before/after) (INSERT/UPDATE/DELETE) on TABLENAME for each row BEGIN SQL_SENTENSE END;
mysql> drop trigger TRI_NAME;
 
事务处理可以用来维护数据库的完整性,它保证成批的mysql操作要么完全执行,要么完全不执行。管理事务处理的关键在于将sql语句组分解成逻辑快,并明确规定数据何时应该回退、何时不回退。 start transaction 表示事务的开始。
事务的创建
start transaction;     #事务开始
SQL_SENTENCE1;
SQL_SENTENCE2;
...
(commit/rollback);     #事务提交/回滚
#注:通常情况下是判断上一条sql语句的执行结果,如果执行失败,则执行rollback进行回滚操作,若事务中所有的sql语句成功执行,则执行commit将更改实际写到数据库中。
 

数据导入、导出
 
导入txt格式的数据
mysql> load data local infile 'FILENAME.txt' into table TABLENAME; #注:txt中各字段用tab分隔
 
导入sql格式的数据库 (注:这里的sql文件是包含建表语句和表中数据)
mysql> use DBNAME; source FILENAME.sql     #方法一
$ mysqldump -u USERNAME -p DBNAME <FILENAME.sql  #方法二
$ mysql -u USERNAME -p -D DBNAME <FILENAME.sql     #方法三
 
导出整个数据库中所有的表结构
$ mysqldump -uUSERNAME -p [-hIP_ADDR] DBNAME>FILENAME.sql #包含建表语句以及插入数据的insert语句
$ mysqldump -uUSERNAME -p -d [-hIP_ADDR] DBNAME >FILENAME.sql #仅包含建表语句
$ mysqldump -uUSERNAME -p [-hIP_ADDR] --no-create-info DBNAME>FILENAME.sql #仅包含插入数据的insert
$ mysqldump -uUSERNAME -p [-hIP_ADDR] DBNAME TABLENAME >FILENAME.sql #导出一张表的全部内容

mysql 学习总结的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  3. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  6. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  9. 我的MYSQL学习心得(九) 索引

    我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  10. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

随机推荐

  1. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  2. 阿里巴巴直播内容风险防控中的AI力量

    直播作为近来新兴的互动形态和今年阿里巴巴双十一的一大亮点,其内容风险监控是一个全新的课题,技术的挑战非常大,管控难点主要包括业界缺乏成熟方案和标准.主播行为.直播内容不可控.峰值期间数千路高并发处理. ...

  3. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  4. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  5. CRC、反码求和校验 原理分析

    3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...

  6. PHP的学习--RSA加密解密

    PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...

  7. scanf类型不匹配造成死循环

        int i = 0; while (flag) { printf("please input a number >>> "); scanf("% ...

  8. 手机游戏渠道SDK接入工具项目分享(二)万事开头难

    一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...

  9. IOS之Objective-C学习 ARC下的单例模式

    单例模式是我常用的一种设计模式,最常见的用途就是用来保存数据并且传递数据.这都归功于单例模式的特性,首先就让我为大家简单介绍一下单例模式的特性. 单例模式的三大特性: 1.某个类只能有一个实例: 2. ...

  10. SpringMVC入门

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...