首发于 点滴技术

Mysql数据库基本介绍

1、mysql不分大小写, 他是存放数据的数据库管理系统字符集使用utf-8,python分大小写,r也分大小写,常用的数据库是关系型数据库,workbench编辑工具,Ctrl+回车执行;

2、一个数据库管理系统下有多个数据库,一个数据库下可以有个数据表,一个数据表下可以有多个不同的字段,同一个数据表的不同的字段数据维度要一样,一个字段只能有一个数据类型;

3、数据库的默认编码是utf-8,excel中的默认编码是ansi格式,一种是二进制文件,二进制文件用记事本打开后不是文字,一种是文本文件,文本文件包括csv格式、txt格式,CSV文件是用逗号隔开的,TXT文件是用空格隔开的;

4、create database +数据库名称;

show create database+数据库名称;

show databases; 查看所有数据库 show tables; 查看所有表

use + 数据库名称;每次使用数据库之前,都要先执行使用数据库命令

drop + database +数据库名称;drop + table + 表名; 删除整个表或者数据库

delete from 表名;删除表中的数据 delete from fruits where f_id = 'b5';删除一部分数据;

5、创建数据表时,包括类型和约束条件;时间类型是time,日期类型叫date,timestamp是时间戳,datetime和timestamp的显示格式相同,但是存储的字节和支持的范围不同,并且datetime没有时区的差别,输入什么就是什么,但是时间戳有时区的区别,不同的区域有不同的时间,是按世界标准时间格式保存的,时间戳的取值范围小于datetime的取值范围,

浮点数类型包括float、double。double的精度比float的精度高,如果进行数值比较最好使用decimal类型,

char是固定长度字符,varchar是可变长度字符,char会自动删除插入尾部的空格,varchar不会删除尾部空格,

常见的运算符

6、算数运算符、比较运算符、逻辑运算符、位操作运算符

算数运算符:+、-、*、/、%

比较运算符:在进行判断时,如果两个数的类型不一致,mysql 会自动将类型转换成一致的,比较运算符的结果显示有三种,一种是0,一种是1,一种是null,当判断结果正确时则输出1,否则输出0;“=”不能用于null的判断,因此结果仍然是null ;当比较运算符为“<=>”安全运算符时,则会输出1;

约束条件

7、primary key:主键约束;一个表里面必须只有一个主键,一个主键可以有多个字段组成;not null:非空约束,这样可以把空值过滤出去;unique:唯一约束;auto_increment:自增字段一个表中只能有一个自增字段,并且必须是逐渐的一部分,在写自增字段之前必须先写上数据类型和主键约束,起到了非空不重复的目的;default:默认值;

8、导入数据:

load data local infile "文件路径.txt" 一定要写上扩展名 路径里面不可以有中文,左斜杠\变成右斜杠/

into table 表名

fields terminated by '\t' 如果是.txt文档就用\t格式,如果是.csv文档就用逗号‘,’格式 ignore 1 lines; 如果第一行是标题行就用这个命令,如果第一行不是标题行就不需要这个命令。

如果在安装或者导入数据时,并没有设置为utf8格式,这个时候需要写上命令语句,将导入的带有中文的数据不至于乱码:CREATE DATABASE market DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

验证数据的准确性

直接打开数据表,跟文本文档对比一下,查看一下内容和行数,再查看一下表结构,

检查导入的内容:select* from 表名;

查看数据的行数:select count(*) from 表名;

查看一下数据的结构:desc 表名;

修改数据表

修改表名:alter table (原始表名)emp rename empdep;

修改类型:alter table (表名)empdep modify (字段名)(修改后的字段类型);注意是类型

修改字段名:alter table (表名)empdep change (旧字段名)(新字段名,类型);

添加新字段:ALTER TABLE empdep ADD maname VARCHAR(10) NOT NULL;

将字段名放在第一行:ALTER TABLE empdep MODIFY maname VARCHAR (10) FIRST;

alter table bingovalue1 modify rownumbers int(只写个类型就可以) first;

将字段放在某一行:ALTER TABLE empdep MODIFY maname VARCHAR(10) AFTER depid;

删除字段:alter table empdep drop maname;

删除主键:alter table empdep drop primary key;

添加自增字段:alter table 表名 add 字段名 int primary key auto_increment;添加自增字段时,这列数据需要时整数且为主键;

sql的数据查询功能

select * from 表

where 对总表的原始数据加条件

group by

having 对分组后的数据进行加条件

order by (desc降序的方式进行排序)

select中的运算符包含:算数运算符、比较运算符、逻辑运算符、聚合函数

连接方式

方向性:left join;right join; inner join 可以确定主附表,

对应关系:一对一,一对多,多对多 一对一的最不会出现;

select * from A left join B on A.key=B.key; 如果两个表中的字段相同时,一定要注意在用的时候写上表名;

横向合并:left join;right join; inner join

纵向合并:追加查询,下表分别表示当主键相同时和主键不同的时候

联合查询:union和union all的用法:union是合并后回去重,union all是合并后不会去重;

(select *from a) union (select from * b); (select *from a) union all (select from * b);

查询操作符,逻辑运算符

-- 用and操作符查询s_id为101并且f_id为a1的水果记录

select * from fruits

where s_id = '101' and f_id = 'a1';

-- 用or操作符查询苹果或者橙子的相关记录

select * from fruits

where f_name = 'apple' or f_name = 'orange';

-- 用in操作符查询苹果和橙子的相关记录

select * from fruits

where f_name in('apple','orange');

-- 用not in操作符查询苹果和橙子之外的水果的相关记录

select * from fruits

where f_name not in('apple','orange');

-- 用between...and操作符查询f_price在10元到20元之间的水果记录

select * from fruits

where f_price between 10 and 20;

-- 用is null操作符查询所有f_name为空的水果记录

select * from fruits

where f_name is null;

like 操作符

-- 用like操作符查询所有f_name由a开始的水果记录

select * from fruits

where f_name like 'a%';

select * from fruits

where f_name like "%a%";

-- 用like操作符查询所有f_id由b开始且字符长度为两位的水果记录

select * from fruits

where f_id like 'b_';

distinct 操作符

-- 查询fruits表中所有不重复的s_id

select distinct s_id from fruits;

子查询

-- 用 in 操作符与子查询语句来查询所有f_id对应的f_price在10元到20元之间的水果记录

select * from fruits where f_id in

(select f_id from fruits where f_price between 10 and 20);

select f_id from fruits where f_price between 10 and 20;

-- 用 any 操作符与子查询语句来查询任意f_price大于20元的水果记录

select * from fruits where f_price > any

(select f_price from fruits where f_price < 20); 找最小的 ,并且只要大于这个值就可以

-- 用 all 操作符与子查询语句来查询所有f_price大于20元的水果记录

select * from fruits where f_price > all

(select f_price from fruits where f_price < 20); 找最大的,要找大于所有的值得值

-- 用 exists 操作符与子查询语句来查询是否存在f_price大于30元的水果记录

select * from fruits where exists

(select * from fruits where f_price > 30);

as 重命名和limit限制查询

-- 用as将fruits表名重命名为f后使用

select f.* from fruits as f;

-- 显示f_price金额最大的前三名水果记录

select * from fruits

order by f_price desc

limit 3;

常用函数

-- 使用abs函数求所有水果平均值与最大值差值的绝对值

select abs(avg(f_price)-max(f_price)) from fruits;

-- 使用length函数求每个f_name的名字与他们的字符长度

select f_name, length(f_name) from fruits;

select f_name, length(f_name) from fruits group by f_name;

-- 使用now函数求当前的日期和时间

select now();

GROUP_CONCAT,将分组后的所有值显示出来

-- 使用group_concat函数查询不同s_id下对应的所有f_name信息

SELECT s_id, GROUP_CONCAT(f_name) FROM fruits

GROUP BY s_id;

update..set 更新和delete删除

-- 使用concat函数在f_name字段值前添加'fruit_'信息

SET SQL_SAFE_UPDATES = 0;#1175错误,意思是默认是1,不能任意更新

update fruits set f_name = concat ('fruit_',f_name);

select * from fruits;

-- 删除f_id为'b5'的数据记录

delete from fruits where f_id = 'b5';

select * from fruits;

案例分析中的笔记

set @allcount = (select count(*) from final);#用set函数创建新的变量

set @allsum = (select count(*)*5 from final);

select count(bingovalue)/@allcount as 中奖张数占比,sum(bingovalue)/@allsum as 中奖金额占比 from final

where bingovalue > 0;

编辑于 2019-09-16 20:30

文章被以下专栏收录