mysql 学习总结

时间:2021-07-26 21:04:12
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. java9-6 内部类

    1. 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部类的成员,包括私有. B:外部类要访问内 ...

  2. 通过PHP连接MYSQL数据库 创建数据库 创建表

    通过PHP连接MYSQL数据库  $conn = mysql_connect("localhost","root","password") ...

  3. 2048 swift

    AppearanceProvider.swift import UIKit protocol AppearanceProviderProtocol:class { func tileColor(val ...

  4. OpenStack开启sshd

    修改配置sshd的文件 1.      修改sshd配置文件 /etc/ssh/sshd_config 2.      将#PasswordAuthentication no的注释去掉,并将no改为y ...

  5. Session 转台服务器的使用方法

    Session的缺陷:为了保持自身的稳定,IIS在访问量大的时候,可能会不自觉的重启,这时候Session就会丢失用户就会*下线 解决方案1:将Session放到一个专门的转台服务器上 方案2:将S ...

  6. &lbrack;Swift&rsqb;LeetCode95&period; 不同的二叉搜索树 II &vert; Unique Binary Search Trees II

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  7. Bear &plus; Reminders 是完美的Thing 3 的替代品

    如今同类功能的APP在AppStore上呈现泛滥之势,尤其是时间管理.任务管理之类的APP.其中比较出名的就有“Things 3”这款APP,这是一款多年不更新,一更新就获奖的APP.目前在AppSt ...

  8. xadmin邮箱验证码 标题 EmailVerifyRecord object

    [修改users-models模块] 1.如果这样不生效 def __unicode__(self): return '{0}({1})'.format(self.code, self.email) ...

  9. 性能测试-Gatling&lpar;一&rpar;

    背景说明转自 : http://www.infoq.com/cn/articles/new-generation-server-testing-tool-gatling/ 以前Jmeter用的多,如文 ...

  10. zipimport&period;ZipImportError&colon; can&&num;39&semi;t find module &&num;39&semi;encodings&&num;39&semi;

    环境说明:windows 7.python 3.7.0.pyinstaller 3.1. 解决方案:升级pyinstaller 到 3.4.