mysql 学习总结

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 #导出一张表的全部内容

时间: 2024-10-25 15:05:09

mysql 学习总结的相关文章

MySQL学习笔记-基础入门

MySQL学习笔记

我的MYSQL学习心得(八)

我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 这一篇<我的MYSQL学习心得(七)>将会讲解MYSQL的插入.更新和删除语句 同样的,只会讲解跟SQLSERVER不同的地方 插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (

我的MYSQL学习心得(一)

我的MYSQL学习心得(一) 使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多 管理起来比较吃力,在学习MYSQL期间我一直跟SQLSERVER进行对比 第一期主要是学习MYSQL的基本语法,陆续还有第二.第三.第四期,大家敬请期待o(∩_∩)o 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFA

MySql学习笔记(一)之DQL常用查询

MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前,我们先做一些准备工作. 需要安装的软件如下: 1.mysql,版本可以选择5.1或者5.5,安装过程可以参考博客:http://www.cnblogs.com/ixan/p/7341637.html 2.mysql图形化管理软件:Navicate,sqlyog(二选一,推荐使用sqlyog). 本文

MySQL学习笔记-自定义函数

MySQL学习笔记-自定义函数 1.自定义函数简介 自定义函数:用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同 自定义函数的两个必要条件:(1)参数  (2)返回值 自定义函数: 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body 关于函数体: 1.函数体可以由合法的SQL语句构成: 2.函数体可以是

Mysql学习实践---基本设置

此文为慕课网MySql学习笔记,地址:http://www.imooc.com/learn/122 一.在my.ini中配置默认字符集为utf8 a.客户端:[mysql]   default-character-set=utf8 b.服务端:[mysqld]   character-set-server=utf8 二.启动停止mysql服务 a.在windows环境计算机管理-服务里面找到mysql服务,右键点击启动或停止 b.使用命令,打开cmd,使用net start mysql启动服务:

Mysql 学习1

? Mysql学习 ? 一.数据库 ? 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整性: 安全,可共享: 通过组合分析,可产生新数据. ? 1.2 数据库的发展历程 没有数据库,使用磁盘文件存储数据: 层次结构模型数据库: 网状结构模型数据库: 关系结构模型数据库:使用二维表格来存储数据: 关系-对象模型数据库: ? MySQL就是关系型数据库! ? 1.3 常见数据库 Oracl

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对

mysql 学习笔记(一)

查询:show databases;show status;show tables; desc  table-name: 更改root密码:方法一:mysqladmin -uroot -poldpassword  password newpassword方法二:mysql -uroot -puse mysqlupdate user set password=password("newpasswd") where user="root";select host,use

我的MYSQL学习心得(四)

我的MYSQL学习心得(四) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) MYSQL里的BLOB数据类型 BLOB是一个二进制大对象,用来存储可变数量的数据.BLOB类型分为4种:TinyBlob.Blob.MediumBlob.LongBlob, 这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型     类型 大小(单位:字节) TinyBlob                            最大 255