数据分析中的mysql基础

引言:
之前的博客对mysql的一些入门知识进行了讲解,该博客将对sql的四个分类进行讲解。之前博客地址:https://blog.csdn.net/weixin_45696161/article/details/106310108

1.DDL

1.1 ddl操作

1.1.1 数据库操作
  • 创建数据库
 create database [if not exists] dbname
  • 销毁数据库
 drop database [if exists] dbname
1.1.2 数据类型和表操作

数据库中的数据存放在数据库表中,以二维表格的形式存在。

一行代表一条数据记录,称为记录。

一列代表同一域的数据,表示同一属性,称为字段

  • 数据类型

在这里说一下在数据库为啥要声明数据类型:

  • 1.对数据进行一种约束,保证数据的准确性。比如在输入时间时,声明不同的数据类型就会有不同的输入方式,就导致输入数据不统一,不方便进行处理。
  • 2.对底层来说是节省存储空间。因为类型的不同就会对字节的大小有要求,下面会进行说明。
1)	数值类型
	TINYINT      1 Byte =8 bit   -128-127
	SMALLINT    2 Byte =16 bit  -2^15-2^15-1
	MEDIUMINT  3
	INT         4字节  -21亿 - 21亿
	BIGINT      8
	float(n,m)     4   n代表总长度,m代表小数点后位数
	double(n,m)   8 
	decimal(n,m)    与金钱相关的数据,不会产生精度丢失

2)	日期类型
	date:日期
	time:时间
	datetime:日期时间 范围:0000-9999
	timestamp:时间戳. 范围:1970-2038
	year:年
	
3)	字符串类型
	char(n):定长字符串,n代表长度,存入不足n,会用空格补全
	varchar(n):可变长字符串,不足n,就是字符串长度
	
4)  其他类型	
	binary:定长二进制
	varbinary:可变长二进制
	blob:二进制
	text:大对象,字符,文本
	enum:枚举
	set:集合
  • 创建表
 create table `user`(
   userid int,
   username varchar(20),
   `password` varchar(20),
   birthday date
 )
  • 修改表
 A.添加字段
 alter table tname add [column] col_name col_definition [after|first]
 
     添加列(默认最后一列)
     alter table tname add colname colType
 
     添加到指定列后
     alter table tname add colname2 colType after colname1
 
     添加到首列
     alter table tname add colname colType first;
 
 B.	修改字段
     alter table tname change/modisc fy col_name new_col_name col_definition;
     修改字段名称
     alter table tname change colname1 colname2 colType
     修改数据类型
     alter table tname change colname colname colType
     alter table tname modify colname colType
     修改字段位置
     alter table tname modify colname colType after colname2;
 
 C.	删除字段
 alter table tname drop colname;
 
 D.	重命名
 rename table tname to newname;
 
 E.	清空表
 truncate table tname;
 
 F.重命名
 alter table tname rename to newName;
  • 销毁表
 drop table tname;

1.2 数据完整性

数据完整性指代数据的准确性和可靠性

1.2.1 实体完整性

保证记录是唯一的,不重复的

  • 主键约束(primary key)

主键字段唯一且不能为空

创建表时声明主键
create table user(
 userid int primary key,
 username varchar(20)
);

#或者下面方法
create table user(
 userid int,
 username varchar(20),
 primary key(userid,username)
);

修改表结构添加约束(创建表的时候就应该添加上)
alter table user add CONSTRAINT PK_USERID primary key(userid,username);

1.每张表必须有且只有一个主键
2.允许有联合主键(多个字段整体作为主体)
3.尽量选择非业务字段(选择无意义的字段)

销毁:
alter table user drop primary key;
  • 唯一约束(unique)

唯一约束字段值不能重复

 创建表时声明唯一约束
 create table user(
 userid int primary key,
 username varchar(20),
 card varchar(18) unique
 );
 create table user(
 userid int primary key,
 username varchar(20),
 card varchar(18),
 unique(card) 
 );
 
 修改表结构添加唯一约束
 alter table user add CONSTRAINT UN_CAED unique(card);
 
 销毁:
 drop index UN_CARD on user;
  • 主键自增(auto_increment)
 create table user(
 userid int primary key auto_increment,   # 从1开始每次增加1
 username varchar(20),
 card varchar(18)
 );
1.2.2 域完整性
保证列的数据正确性
  • 类型约束
  • 非空约束(not null)
  • 默认值(default)
1.2.3 引用完整性

多张表的引用

  • 外键约束(foreign key)

表中外键字段的取值需要依赖于另张表的主键的取值
添加外键约束会降低表的性能

alter table emp add CONSTRAINT PK_DEPTNO foreign key(deptno) REFERENCES dept(deptno);    emp中的deptno参照dept里面的deptno

alter table emp drop foreign key;

1.3运算符

1.3.1 算术运算符
select 1+2;
select 1-2;
select 3*4;
select 3/4;  #0.75
select 3/0;  #null
select 3 div 4; #整除
1.3.2 比较运算符

表达式为真结果为1,否则为0

select 1>1;
select 1<1;
select 1<>1;
select 1!=1;
is true,is not true,
is null,is not null,
between and,not between and,
in, not in
1.3.3 逻辑运算符

表达式为真结果为1,否则为0

select 1=1 and 1=2;   # 两边都是1
select 1=1 or 1=2;    # 两边都是0
select !(1<>1);  # 1-->0  0-->1
1.3.4 位运算符

先将数据转化为2进制

select 1&0; #按位与
select 1 | 1; #按位或 
select 1^2; #按位异或

2.DML

对表数据的操作,会更改数据,不改变结构

2.1 插入
  • 向表中所有字段添加数据
 insert into tname values(col1,col2...)
 value值的个数和顺序必须和表中字段的个数和顺序保持一致
  • 向表中部分字段添加数据
 前提是不添加值得字段允许为空。
 insert into tname(col1,col2...) values(val1,val2...)
 value值得顺序必须和前面字段名称的顺序一致
  • 批量数据插入
 insert into tname[(col1,col2...)] values(val1,val2...),(val1,val2...)... 
  • 复制表数据
 insert into tname([col1,col2...]) select col1,col2...from tname2
2.2 修改
update tname set col1=val1,col2=val2... [where...]
如果update没有使用where则代表对整张表所有记录修改
2.3 删除
delete from tname [where...]
不使用where将删除整张表中所有的记录

delete,truncatedrop的区别?
 delete只删除数据,不修改表结构,不重置自增,逐行删除
 truncate清空表数据,不修改表结构,重置自增,删除速度比deletedrop清空表结构,表结构文件和数据文件全部删除

3.DCL

3.1 管理用户

3.1.1 查询用户

MySQL把用户的数据存放在 “mysql” 数据库的 “user” 表中。

SELECT * FROM user;
3.1.2 查询用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; /* 
    主机名为 localhost 时仅限本地登陆,填写 % 时任何机器都可以登陆 */
3.1.3 删除用户
DROP USER '用户名'@'主机名';
3.1.4 修改用户密码
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名'; -- 普通方式
  SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码'); -- 特有的简化方式
3.1.5 重置root用户密码
  1. 命令提示符在管理员模式下停止 MySQL 服务: net stop mysql

  2. 管理员模式下使用无验证方式启动MySQL服务: mysqld --skip-grant-tables

  3. 开启新的命令行窗口进入MySQL: mysql

  4. 进入 ‘mysql’ 数据库: USE mysql;

  5. 使用修改用户密码语句对root密码进行重置。

  6. 启动"运行"窗口,运行命令结束"mysqld"进程: taskkill /im mysqld.exe /f

  7. 命令提示符在管理员模式下启动 MySQL 服务: net start mysql

  8. 可以用新密码登陆 root 用户。

3.2 权限管理

3.2.1 查询用户权限
SHOW GRANTS FOR '用户名'@'主机名';
3.2.2 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  GRANT ALL ON *.* TO '用户名'@'主机名'; -- 使用通配符给用户授予全部权限
3.2.2 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机号';

4.DQL

4.1 dql语法
select cols #查询并展示的数据(字段,表达式等)
from tables #查询的数据来源(表,结果集,视图等)
where condition #条件语句
group by  #分组
having    #分组之后的条件判断
order by  #排序(asc升序   desc降序)
limit     #限制结果查询
4.2 基本查询语句(emp表为例)
  • 查询所有字段的数据
 select * from emp
  • 查询部分字段的数据
 # 查询emp表中empno和ename的值
 select empno,ename from emp
  • 单一条件查询
 # 查询emp表中薪水>2000的员工信息
 select * from emp where sal > 2000
  • 组合条件查询
 # 查询薪水>2000的20号部门的员工信息
 select * from emp where sal > 2000 and deptno = 20
 # 查询薪水>2000或者20号部门的员工信息
 select * from emp where sal > 2000 or deptno = 20
  • 范围查询
 # 查询薪水在1000到2000之间的员工信息
 select * from emp where sal >= 1000 and sal <= 2000
 select * from emp where sal between 1000 and 2000
  • 集合查询
 # 查询员工编号为7369,7521,7788的员工信息
 select * from emp where empno=7369 or empno=7521 or empno=7788
 select * from emp where empno in(7369,7521,7788)
  • 别名
 select empno [as] 编号,ename [as] 名称 from emp
 select e.ename,e.deptno from emp e
  • 去重
 # 在emp表中查询所有的职位信息
 select distinct job from emp
  • 非空验证
 # 查询员工奖金为空的员工信息
 select * from emp where comm is [not] null
  • 排序
 # 按照薪水升序排序
 select * from emp order by sal [asc]
 # 按照薪水升序排序,如果薪水一样则按照编号降序排序
 select * from emp order by sal [asc],empno desc 
  • 模糊查询
 % 代表匹配0到多个字符
 _ 代表匹配1位字符
 
 #查询以a打头的员工信息
 select * from emp where ename like 'a%';
 #查询以n结尾的员工信息
 select * from user where ename like '%n';
 #查询包含l的员工信息
 select * from user where ename like '%l%';
 #查询第二个字为l的员工信息
 select * from user where ename like '_l%'
  • 限制结果查询
 limit offset,length: 
    offset指代起始位置,0开始
    length指代获取的长度
    
 # 查询前五条记录
 select * from emp limit 0,5;
 select * from emp limit 5;
 
 常用于分页查询
 

5. 总结

比较常用的是DQL、DML、DDL,需熟练掌握,DCL不常用,知道即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值