版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Stream_who/article/details/86220901
一、数据库的相关操作
1. 创建数据库
1)create database db_name
2. 删除数据库
1)drop database db_name
3. 修改数据库相关信息
1)修改指定数据库的编码方式 alter database db_name character set charset
4. 查询数据库相关信息
1)得到当前打开的数据库 select database()
2)查看指定数据库的详细信息 show create database db_name
3)查看当前服务器下的全部数据库 show databases;
5. 其他
1)打开指定数据库 use db_name
二、数据表相关操作
1. 创建表
1)创建表格式
create table table_name(
字段名 字段类型 [完整性约束条件]
字段名 字段类型 [完整性约束条件]
...
)engine=存储引擎 charset=编码方式;
2)完整性约束条件
(1)not null 非空约束
(2)default 默认值
(3)primary key 主键
(4)auto_increment 自动增长,只能用于数值列
(5)unique_key 唯一性
(6)foreign key 外键约束
2. 删除表
1)drop table talbe_name
3. 修改表结构
1)添加
(1)添加字段 alter table tb_name add 字段名 字段类型 [完整性约束条件]
(2)添加默认值 alter talbe tb_name alter 字段名称 set default 默认值
(3)添加主键 alter talbe tb_name add primary key(字段名)
(4)添加唯一 alter table tb_name add unique| [index_name](字段名)
2)删除
(1)删除字段 alter table tb_name drop 字段名
(2)删除默认值 alter table tb_name alter 字段名 drop default
(3)删除主键 alter table tb_name drop primary key
(4)删除唯一 alter table drop index index_name
3)修改
(1)修改字段类型、字段属性 alter table tb_name modify 字段名 字段类型[字段属性]
(2)修改字段名、字段类型、字段属性 alter table tb_name change 原字段名称 新字段名称 字段类型 字段属性
(3)修改数据库表名称 alter table tb_name rename to new_talbe_name / rename table tb_name to new_table_name
(4)修改auto_increment的值 alter table tb_name auto_increment=值
4)查看
(1)查看当前数据库下已有数据表 show tables
(2)查看表详细信息 show create table tb_name
(3)查看表结构 desc tb_name / decsribe tb_name / show columns from tb_name
三、数据操作
1. 新增
1)指定字段插入 insert into tb_name(字段名1,字段名2, ...) values(值1,值2, ...)
2)不指定字段名称插入(按创建表的字段顺序) insert into tb_name (值1,值2,, ...)
3)insert ... set 形式 insert tb_name set 字段名=值, ...
4)insert ... select 形式 insert tb_name1(字段名1,字段名2, ...) select 字段名1,字段名2,... from tb_name2
2. 删除
1)删除所有记录 delete from tb_name
2)删除指定记录 delete from tb_name [where 条件句]
3)彻底情况数据库表(重置auto_increment的值) truncate tb_name
3. 修改
1)修改所有记录 update tb_name set 字段名=值
2)修改指定记录的数据 update tb_name set 字段名=值 [where条件]
4. 查询
1)简单查询
(1)查询所有记录 select * from tb_name
(2)查询指定字段记录 select 字段1,字段2,... from tb_name
(3)库名.表名 select * from db_name.tb_name
(4)给字段起别名 select 字段名 [as] 字段别名 from tb_name
(5)给表起别名 select * from tb_name [as] 表别名
2)where条件
(1)比较运算符 =, >, <, <=, >=,!=, <>
(2)是否为空 is null / is not null
(3)指定集合 in () / not in()
(4)逻辑运算符 and / or
(5)匹配字符 like / not like (%任意长度 _任意一个)
3)group by (一般配合聚合函数使用)
(1)count() 统计记录总数
(2)sum() 求和
(3)max() 最大值
(4)min() 最小值
(5)avg() 求平均值
4) order by
(1)asc 升序排列,默认
(2)desc 降序排列
5)多表查询
(1)笛卡尔形式
(2)内连接形式 select 字段1, ... from tb_name1 inner join tb_name2 on 条件 (两个表=也属于内连接)
(3)左外连接的形式 select 字段1, ... from tb_name1 left [outer] join tb_name2 on 条件
(4)右外连接的形式 select 字段1, ... from tb_name1 right [outer] join tb_name2 on 条件
6) 子查询(内层语句查询的结果作为外层语句查询的条件)
(1)常见子查询 select 字段名称 from tb_name where col_name=(select col_name from tb_name)
7) 联合查询(将多次查询(多条select语句), 在记录上进行拼接(字段不会增加),联合查询只要求字段一样, 跟数据类型无关)
(1)去掉重复的 select * from tb_name1 union select * from tb_name2
(2)保留所有的 select * from tb_name1 union all select * from tb_name2
四、其他sql操作
1. 视图操作
1)查看创建视图sql show create view view_name
2)创建视图 create view view_name(字段) as [select语句]
3)修改视图 create or replace /alter view view_name(字段) as [select语句]
4)更新视图(通过视图更新数据其实就是在更新基本表中的数据,但是一般视图都不允许更新,而且更新满足的要求有很多)
(1)使用update 语句更新视图 update view_name set 字段=值;
(2)使用insert 语句更新视图 insert into view_name(字段) values(值)
(3)使用delete 语句更新视图 delete from view_name [where条件]
5)删除视图 drop view view_name
2. 存储过程(一组为了完成特定功能的SQL 语句集)
1)创建
create procedure pro_name
@sname varchar(100)
as
begin
select * from where sanme = @sname
end
go
2) 调用
exec pro_name '参数'
五、Mysql常用函数
1. 日期和时间函数
1)curdate() 返回当前日期
2)curtime() 返回当前时间
3)now() 返回当前的日期和时间
4)unix_timestamp(date) 返回日期date的unix时间戳
5)from_unixtime 返回unix时间戳的日期值
6)week/year/hour/minute/monthname(time) 返回一年中的第几周/年份/小时值/分钟值/月份值
7)date_format(date, fmt) 返回按fmt字符串格式化日期date的值
8)date_add(date, interval expr type) 返回一个日期或时间值加上一个时间间隔的时间值
9)datediff(expr, expr2) expr-expr2的值
10)to_days(date) - to_days(date) 一般用来获取某个时间段(比如大于7天)
2. 数学函数
1)ceil() 进一取整
2)floor() 舍掉小数点部分
3)round() 四舍五入
4)truncate() 截取小数点后几位
5)mod() 取余数
6)abs() 取绝对值
7)power() 幂运算
8)pi() 圆周率
3. 字符串函数
1)lower() 将字符串参数值转换为全小写字母后返回
2) upper() 将字符串参数值转换为全大写字母后返回
3) concat() 将多个字符串参数首尾相连后返回
4) concat_ws(separator,str1,str2,...) 将多个字符串参数以给定的分隔符separator首尾相连后返回
5)replace(str, from_str, to_str) 在源字符串str中查找所有的子串form_str(大小写敏感),找到后使用替代字符串
6) repeat(str, count) 将字符串str重复count次后返回
7) format(X, D, [locale]) 以格式‘#,###,###.##’格式化数字X, D指定小数位数,locale指定国家语言(默认的locale为en_US)
4. 流程控制函数
1)if(v,t,f) 如果v为真返回t,否则返回f, 示例: select if(1!=1,'1','2') FROM DUAL,结果为2
2)ifnull(v1,v2) 如果v1不为null返回v1,否则返回v2, select ifnull(NULL,'1') FROM DUAL, 结果为1
3)case when v then v1 end 判断如果v为真返回v1, 示例:select case when 1!=1 then 'true' when 2=2 then 'test' else 'false' end from dual
5. 其他函数
1)database() 返回当前数据库名称
2) version() 返回当前数据库版本
3) md5(s) 返回md5加密的值
4)case(x as type) 将x变成type类型
5) convert(x, type) 将x变成type类型(整数:SIGNED,浮点数:DECIMAL,日期时间型:DATETIME)
6) user() 系统登录的用户
六、Mysql数据类型
1. 整数类型
1)tinint(m) 1个字节 范围(-128~127)
2) smallint(m) 2个字节 范围(-32768~32767)
3)mediumint(m) 3个字节 范围(-8388608~8388607)
4)int(m) 4个字节 范围(-2147483648~2147483647),m显示几位数
5)bigint(m) 8个字节 范围(+-9.22*10的18次方)
2. 浮点型
1)float(m,d) 单精度浮点型 8位精度(4字节) m总位数,d小数位
2) double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位
3. 定点数(浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值)
1)decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位
4. 字符串
1)char(n) 固定长度,最多255个字符
2)varchar(n) 固定长度(可变?),最多65535个字符
3) tinytext 可变长度,最多255个字符
4) text 可变长度,最多65535个字符
5) mediumtext 可变长度,最多2的24次方-1个字符
6) longtext 可变长度,最多2的32次方-1个字符
5. 二进制数据(_Blob)
1)_BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写
2)_BLOB存储的数据只能整体读出
3)_TEXT可以指定字符集,_BLO不用指定字符集
6. 日期时间类型
1)date 3字节,日期 '2008-12-2'
2)time 3字节,时间 '12:25:36'
3) datetime 8字节,日期时间 '2008-12-2 22:06:44'
4) timestamp 4字节,时间戳
7. 数据类型的属性
1)null 数据列可包含NULL值
2) not null 数据列不允许包含NULL值
3) default 默认值
4) primary key 主键
5) auto_increment 自动递增,适用于整数类型
6) unsigned 无符号
7) character set name 指定一个字符集
七、select语句的执行顺序
1. 书写顺序
SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >
2. 执行顺序
1)from 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1
2)on 对虚表VT1进行ON过滤,只有那些符合<join-condition>的行才会被记录在虚表VT2中
3)join 如果指定了OUTER JOIN(比如left join、 rightjoin),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3
4)where 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中
5)group by 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5
6)having 对虚拟表VT5应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT6中
7)select 执行select操作,选择指定的列,插入到虚拟表VT7中
8)distinct 对VT7中的记录进行去重。产生虚拟表VT8
9)order by 将虚拟表VT8中的记录按照<order_by_list>进行排序操作,产生虚拟表VT9
10)limit 取出指定行的记录,产生虚拟表VT10, 并将结果返回
参考网址
步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激