大数据笔记3—mysql数据库笔记1

纸上得来终觉浅,绝知此事要躬行。

sql很重要!!

数据库作用就是 以结构化的方式存储我们数据。

从事大数据的工作 基本情况就一直在写sql 而在其他的有关程序员的工作基本上多多少少都会接触sql语句。因为这些都是基础,而且基础的东西跟简单还不一样,基础的东西必须都会,而简单就是随便学学就会了。基础不等于简单嗷

一、数据库类型

① 关系型数据库

存储数据也可以存储数据的关系
Mysql Oracle
mysql被Oracle收购 mysql是免费的,开源的,自从被Oracle收购了 mysql6.0之后开始收费。

中小型企业中的主流数据库
DB2 IBM公司 银行中用的比较多

②非关系型数据库

以后我们会用到现在只是mysql 的话使用不到这些,只是一些基础的命令,到后面我们会在学习这些非关系型数据库
redis
Hbase

二 、登录Mysql

在linux中有登录的三种方式
账号:root
密码:123456
第一种:mysql -u root -p123456 这种方式 不推荐 因为密码会暴露出来
第二种:mysql -u root -p 回车 输入密码:123456 密码是隐藏的
exit 退出登录
第三种:mysql -u root -h 192.168.88.100 -P 3306 -p 回车 输入密码:123456
-h 是ip地址 -P 端口号
在本机中操作 在本机中连接本机的mysql
端口号用的是默认的端口号
如果我们在win中连接linux mysql 肯定不能省略 -h 与 -P

2.1 mysql 的存储数据的结构

以结构化的方式存储的数据
数据的存储肯定是以文件的方式进行存储 存储在硬盘中

2.2 sql结构化查询语句

sql语句 结构化的查询语句

标准的sql:普通话 所有的数据库都支持的

非标准sql:方言 某些数据库特有的

不同的数据库使用的sql 差异性并不大

比如说 oracle与mysql 的sql语法基本是一样的 除了一些特定函数 还有一些语法上小区别

只要我们学会了 mysql 的语法 其他数据库上手很快的

2.3 sql的分类

DDL 数据定义语言 定义数据库 表 修改数据库 修改表结构
DQL 数据查询语言 对表记录查询的语言(重要)
DML 数据操作语言 对表记录 增删改
DCL 数据控制语言 定义数据库的访问权限

2.4 字段名:

见名知其意 多个单词 可以使用下划线连接
常用类型:

分类类型名称说明
整数类型int(integer)普通大小的整数
小数类型float单精度浮点数
double双精度浮点数
日期类型yearYYYY 1901~2155
dateYYYY-MM-DD 1000-01-01~9999-12-3
文本、二进制类型char(m)m为0~255之间的整数定长 char(10)
text允许长度0~65535字节

字符串类型
char() 长度不可更改
varchar()规定长度是可以发生变化的
比如说char有5个字节的话 用不完是会空下来 用超了就他也不会加上
但是varchar就是不一样了,是可以变动的,比如说用超了他会给你加上,用少了他会自动缩进,一点都不会浪费
当然,既然是固定的长度 char会比varchar的存储时间要快很多,常常用来存储手机号啊,身份证啊等这些固定长度的东西。

char和varchar的区别

2.5 约束

约束指保证数据的完整行及合理性。
三大约束:主键约束、唯一约束、非空约束
主键约束:非空唯一一个表中只有一个主键,一个主键可以由多个字段组成
唯一约束:可以为空 但是不能重复
非空约束:非空 可以重复但是不能没有 (跟唯一约束刚好相反)

主键约束:primary key 常常配合auto_increment(自增)使用
唯一约束:unique
非空约束:not null

三、操作数据库(增删改查)

3.1查:查询数据库

sql语句 不区分大小写
sql语句要以;结尾 (英文状态下)
show databases; 查询所有的数据库

3.2增:创建数据库

sql语句:create database 库名;

create database 库名 character set 字符集;
create database if not exists 库名; 避免当数据库存在的时候 sql执行报错  没有这个数据库 创建 有这个数据库就不创建

常见的数据库字符集为 UTF—8 GBK iso-8859-1
utf8mb4 完全支持 utf8 但是支持的比utf8多

create database demo;                                                                         
create database demo1 character set gbk;             设种字符集是gbk
show create database demo1;                           查看数据库的字符集(查看数据库的创建过程)
create database if not exists demo1;   

demo1数据库虽然存在了 但是在创建的时候没有报错

3.3 删:删除数据库

drop databsase 库名;

3.4 改:修改数据库

修改数据库的编码

alter database  库名 character set 新字符集;

修demo1的字符集修改为 utf8;

alter  database demo1 character  set  utf8;

3.5 切换数据库

use  database;

3.6 DDL数据库操作总结

DDL的特点 一般都带有 database 或者 table 这两个单词
DDL的特点 一般都带有 database 或者 table 这两个单词

增:

create database 库名;
create database if not exists;
create database [if not exist] 库名 character set 字符集;

删:

drop database 库名;

改:

alter database 库名 chracter set 字符集;

查:

show databases;
show create database 库名;
select database();

四、1、表的操作

增 创建

注意:每次操作表的时候记得切换数据库,如果数据库不同的话,在每一个数据库的表格都不一样,所以会造成错误,每次查看表中数据的时候都要记得查看一下数据库。

语法:

create table [if not exists] 表名 (
	字段名 类型(长度) [约束],
    字段名 类型(长度) [约束],
    ....,
    字段名 类型(长度) [约束],
    字段名 类型(长度) [约束]
);

eg:

create table student(
	id int primary key auto_increment,
	name varchar(20) not null,
	cardID cahr(18) unique
);

查询表、删除表

查询表非常简单
show tables;查看当前数据库下所有的表

desc 表名; 查看表结构
show create table 表名;查看表的字符集(创建过程)

删除用的是drop
drop table 表名;
删除 test表格

drop table  test;

修改表

修改非常容易搞混,所以必须多多练习才行
1、增加一个字段 :add
alter table 表名 add 字段 类型(长度) 约束;

alter table student add  gender varchar2not null

2、删除某个字段:drop

alter table 表名 drop 字段;
删除 gender 字段
alter table student drop gender;

3、修改某个字段:change

主要是修改字段的名字 也可以修改某个字段的类型 以及约束

注意: not null无法省略 — — 省略了就直接变成空了
unique和primary key 省略

alter  table 表名 change  旧字段名 新字段名  类型(长度) 约束;
-- 将 address 修改为 addr
alter table student change address addr varchar(50) not null;

4、修改约束以及数据类型:modify

alter table 表名 modify 字段 类型(长度) 约束;
需求:
将 address 长度改为55 约束改为not null;
alter table student modify address varchar(55) not null;

modify和change的比较

change 的权限要比modify大。

change:1、可以修改类型,字段属性(类型(长度))
                2、可以修改列的名字
modify : 1、 可以修改字符的类型。
              2、 无法修改列的名字

alter table 表名 modify ____字段 ________ 类型(长度) 约束;
alter table 表名 change 旧字段名 新字段名 类型(长度) 约束;

2.表记录之DML语句(增删改)

增:添加表记录

在sql中插入数据的时候

除了数字这种类型 其他类型都要加上单引号 纯数字的字符串可以与数字之间自动转换

语法

方式一:给指定的字段插入值
insert into 表名 (字段1,字段2,...) values (1,2,...);
注意:前后字段与值要匹配 位置 个数 类型
方式二:给所有的字段插入值
insert into 表名 values (1,2,...)
注意:字段与值需要匹配 字段的顺序 个数 类型与表结构中的位置是一致的
方式三:一次性插入多条表记录
insert into 表名 values (1,2,...),(1,2,...),(1,2,...),....

数据准备

create table student(
	id int primary key auto_increment,
    name varchar(20) not null,
    address varchar(50),
    cardID char(18) unique
);

分别使用以上三种方式插入数据

-- 插入第一条数据
id null,name
insert into student (id,name) values (null,'欣欣');
通过 select * from 表名;
查询所有的表记录

在这里插入图片描述

-- 插入数据
id null,为了让id自动增长
name 权权,
address 江西老表,
cardID 454845484548454845,
insert into student values (null,'小权权','江西老表',454845484548454845);

在这里插入图片描述

-- 插入数据
id null,
name '丹丹',
address '河南',
cardID '121212121212121212'

id null,
name '糖糖',
address '河南',
cardID '121212121212121213'


id null,
name '保安哥哥',
address '安徽',
cardID '121212121212121214'

insert into student values (null,'丹丹','河南','121212121212121212'),(null,'糖糖','河南','121212121212121213'),(null,'保安哥哥','安徽','121212121212121214');

在这里插入图片描述

删:删除表记录

语法

delete from 表名 [where 条件]

注意:一般删除都会配合 where 使用

如果不添加where 就是全部删除

-- 删除id 为1的数据
delete from 表名 where 字段 运算符 值
运算符:= > < >= <= [!= <>]
delete from student where id=1;


在这里插入图片描述

-- 删除 name为 保安哥哥的数据
delete from studnet where name='保安哥哥';

在这里插入图片描述

如果你不添加条件的话 会发生什么呢??

delete from student;

在这里插入图片描述

如果不添加任何条件 那就是全部删除

这时候 我们再添加一条记录 来看一下数据

insert into student values (null,'欣欣','安徽','121212121212121212');

在这里插入图片描述

我们发现 id是6 因为前面的1-5已经用过了

说一个问题 这个表他还是原来的表

还有一种删除方式

truncate table 表名;
-- 将数据全部删除后 再次插入数据 查看情况
truncate table student;

在这里插入图片描述

-- 插入一条记录
insert into student values (null,'欣欣','安徽','121212121212121212');

在这里插入图片描述

我们发现id是从1开始的

说明表已经不是原来的表了

delete 与 truncate 删除的区别在哪里??

delete

  1. 是DML语句
  2. delete可以根据条件进行删除
  3. delete是逐条删除 表还是原来的表 删除效率低
  4. delete配合事务使用 数据是可以恢复的

truncate

  1. 是DDL语句
  2. 只能删除全部
  3. 直接将整个表删除掉然后再创建一个一模一样的表 删除效率高
  4. truncate删除的数据无法恢复

删除总结

delete from 表名 [where 条件]
一般来讲 删除都会添加条件 否则就是全部删除
where 字段 运算符 值
关系运算符: = > < >= <= !=

delete from 表名; 全部删除
truncate table 表名; 全部删除
区别:
delete 
1.DML语句
2.删除可以根据条件删除
3.逐条删除 效率低
4.配合事务 数据可以恢复
truncate
1.DDL语句
2.直接将表删除 创建新的表 删除效率高
3.只能全部删除
4.删除的数据无法恢复

改:修改表记录

数据准备:

truncate table student;
insert into student values (null,'欣欣','安徽','121212121212121211');
insert into student values (null,'小权权','江西老表',454845484548454845);
insert into student values (null,'丹丹','河南','121212121212121212'),(null,'糖糖','河南','121212121212121213'),(null,'保安哥哥','安徽','121212121212121214');

语法:

update 表名 set 字段1=新值1,字段2=新值2,... [where 条件]
条件一般不要省略 如果省略 就是全部修改
需求:
修改 id为1 的表记录的 name修改为女神
update student set name='女神' where id=1;

在这里插入图片描述

如果不添加条件 就是全部修改
将所有的name修改为女神or女汉子
update student set name='女神or女汉子';

在这里插入图片描述

-- 将id为2的表记录中的 name修改为老贾 address 修改为 山东
update student set name='老贾',address='山东' where id=2;

在这里插入图片描述
4.表记录之DQL语句(查询,重要)

select 字段1,字段2,... from 表名 [where 条件]
where 如果省略 查询的就是所有的信息
select * 代表查询所有的字段
--查询表格的所有信息
select * from product;

4.表记录之DQL语句(查询,重要)

简单查询

select 字段1,字段2,... from 表名 [where 条件]
where 如果省略 查询的就是所有的信息
select * 代表查询所有的字段

准备数据

#创建商品表 
create table product( 
    pid int primary key,
    pname varchar(20), 
    price double, 
    category_id varchar(32) 
);

插入 测试数据

INSERT INTO product(pid, pname, price, category_id)
VALUES (1, '联想', 5000, 'c001');
INSERT INTO product(pid, pname, price, category_id)
VALUES (2, '海尔', 3000, 'c001');
INSERT INTO product(pid, pname, price, category_id)
VALUES (3, '雷神', 5000, 'c001');
INSERT INTO product(pid, pname, price, category_id)
VALUES (4, '杰克琼斯', 800, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (5, '真维斯', 200, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (6, '花花公子', 440, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (7, '劲霸', 2000, 'c002');
INSERT INTO product(pid, pname, price, category_id)
VALUES (8, '香奈儿', 800, 'c003');
INSERT INTO product(pid, pname, price, category_id)
VALUES (9, '相宜本草', 200, 'c003');
INSERT INTO product(pid, pname, price, category_id)
VALUES (10, '面霸', 5, 'c003');
INSERT INTO product(pid, pname, price, category_id)
VALUES (11, '好想你枣', 56, 'c004');
INSERT INTO product(pid, pname, price, category_id)
VALUES (12, '香飘飘奶茶', 1, 'c005');
INSERT INTO product(pid, pname, price, category_id)
VALUES (13, '海澜之家', 1, 'c002');

简单查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tH1PWsPW-1615712776064)(/E:/%E9%BB%91%E9%A9%AC%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6/%E6%AF%8F%E6%97%A5%E8%A7%86%E9%A2%91%E5%8F%8A%E5%85%B6%E7%AC%94%E8%AE%B0%E4%BD%9C%E4%B8%9A/day04_Mysql/02_%E9%9A%8F%E5%A0%82%E7%AC%94%E8%AE%B0/imgs/image-20210305150204352.png)]

按照条件查询

select 字段1,字段2,... from 表名 where 条件;
需求一:查询商品名称和商品价格
select pname,price from product;
需求二:查询价格大于500的商品信息
select * from product where price > 500;

在这里插入图片描述

取别名

as

select 字段 as 别名,字段 as 别名,... from 表名; -- 给字段取一个别名
select 字段 from 表名 as 别名; -- 给表取的别名 单表上来看意义不大 等到学习到多表查询的时候 我们就可以用到了

去重查询

-- select distinct 字段1,字段2,... from 表名;
distinct 字段 这个字段只保留不重复的记录
distinct 字段1,字段2,... 这两个字段的内容都一样 才算是重复的数据
-- 查询价格 去除重复的数据
select distinct price from product;
-- 查询 价格与分类都不一样的数据
select distinct price,category_id from product;

去重查询就是把相同的价格去掉,只保留一条数据。

查询的结果是表达式

在sql中是支持 简单运算的 + - * /

-- 运算查询:将所有商品的价格+10元进行显示
select price + 10 from product;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ViZiRjO-1615712776071)(/E:/%E9%BB%91%E9%A9%AC%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6/%E6%AF%8F%E6%97%A5%E8%A7%86%E9%A2%91%E5%8F%8A%E5%85%B6%E7%AC%94%E8%AE%B0%E4%BD%9C%E4%B8%9A/day04_Mysql/02_%E9%9A%8F%E5%A0%82%E7%AC%94%E8%AE%B0/imgs/image-20210305153719478.png)]

条件查询

在这里插入图片描述

-- 查询的信息是所有的信息 *
-- 条件 商品名为 '花花公子'
select * from product where pname='花花公子';


-- 示例1:查询商品名称为“花花公子”的商品所有信息
-- 查询的信息是所有的信息 *
-- 条件 商品名为 '花花公子'
select * from product where pname='花花公子';

# 示例2:查询价格为800商品
-- 确定查询的字段 *
-- 确定查询的条件 price 为 800
select * from product where price=800;
-- 示例3:查询价格不是800的所有商品
-- 确定查询的字段 *
-- 确定查询的条件 price 不等于 800
select * from product where price != 800;
# 示例4:查询商品价格大于60元的所有商品信息
-- 确定查询的字段 *
-- 查询条件是 price > 60;
select * from product where price > 60;
# 示例5: 查询商品价格在200到1000之间所有商品
-- 确定查询的字段 *
-- 查询条件200 <= price <= 1000;
--  price between 200 and 1000; 包括前后

-- 00到1000之间所有商品的意思就是 price >= 200 的同时还要 <= 1000
-- 关系表达式 and 关系表达式 这两个关系表达式要同时成立
-- 使用关系运算符连接的式子就叫做 关系表达式

select * from product where price between 200 and 1000;
select * from product where price >= 200 and price <= 1000;

# 示例6:查询商品价格是200或800的所有商品
-- 查询的字段 *
-- 查询的条件 价格要么是200 要么是800的 满足任意一个价格都可以
-- 关系表达式 or 关系表达式
select * from product where price = 200 or price = 800;
-- where price in(200,800) 等价于 where price = 200 or price = 800
select * from product where price in(200,800);

# 示例7:查询含有'霸'字的所有商品
-- 模糊查询
-- where 字段 like '值';
-- 值如何写 _ %
-- _ 一个任意字符
-- % 任意个任意字符
-- where name like '张_'; 两个字 姓张
--  where name like '_张_'; 三个字 中间一个字为张
--  where name like '张%';  只要是以张开头就满足
-- where name like '%张%'; 只要有张就可以
# where pname like '%霸%';
select * from product where pname like '%霸%';

# 示例8:查询以'香'开头的所有商品
select * from product where pname like '香%';
# 示例9: 查询第二个字为'想'的所有商品
select * from product where pname like '_想%';

insert into product values (null,'好想你绿',20,null);

# 查询没有分类的商品
-- is null 为null
-- is not null 不为null
select * from product where category_id is null;
select * from product where category_id is not null;

今天就到这 下次写单表查询以及多表查询的一些内容

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值