mysql基础

1.数据库的简介

数据库定义
         持续化存储
         读写速度极高
         保持数据的有效性
         对程序支持非常好,容易扩展
        

2.分类

    关系型数据库  mysql oracle sqlite
​    非关系型数据库   MongodDB

sql 结构化查询语言  操作关系性数据库  不区分大小写
    DQL    查询        select 
    DML    增、删、改  insert  delete  update 
mysql 关系型数据库管理系统  属于Oracle公司的
    特点   开源   免费  使用范围广  支持多平台 给多种语言提供API接口
2.数据库的安装
详细请看 https://www.cnblogs.com/winton-nfs/p/11524007.html

3.创建一个数据库

连接mysql 
mysql -u root -ptest
退出mysql
quit  exit ctrl+d
查询命令
select version();   查看数据库版本号
select now();       查看当前时间

查看数据库
show databases;
创建数据库 
create database 1906c charset=utf8;
使用数据库
use 1906c;
查看当前使用的数据库
select database();
删除数据库的
drop database 库名;

4.表

查看数据库里的所有表
show tables;
查看表结构
desc 表名;
创建表
create table 表名()
给表添加字段
alter table 表名  add  字段名 类型
重命名表里的字段名
alter table 表名 change  旧名 新民  类型 约束
修改表里的字段类型及约束(不需要重命名)
alter table 表名 modify  字段名 新类型 约束
删除字段
alter table 表名 drop 字段名
删除表
drop table 表名
查看创建表的语句
show  create table 表名
修改表名
alter table 旧表名 rename to 新表名

表的数据类型
使用数据类型的原则
够用就行,尽量使用范围小的  为了节省存储空间
数值        int            decimal(4,1)   987.6
字符串     char(3)  'ab '   varchar(3) 'ab'   text  当字符数大于4000的时候使用
日期      date  年月日   time  时分秒    datetime   年月日时分秒

需求 
创建一个英雄联盟LOL表
id    int   primary key  auto_increment not null
name  varchar(20)
age   int 
attack  decimal(5,3)
sex     enum("男","女","妖")
date    datetime

约束
primary key   主键
auto_increment 自增
not null      非空
foreign key   外键
unique        唯一
default       默认
unsigned      无符号约束

5.表的增删改查

1、查
查询表的所有数据
select *  from  表名;
查询指定的列
select 列名1,列名2  from  表名;
增
全列插入
insert  into  表名 values(id int primary key auto_increment )
指定列插入  
插入的数据和列名对应
insert into  表名(列名1,列名2) values (         )
指定列一行一行插入
insert into 表名( 列名)  values ( ..........)
改
修改表里的数据
update 表名 set  列名=新的值   where id = **;
删
delete from 表名  where id = ** ;

起别名
select  列名 as 新列名, 列名1 as 新列名1   from 表名
去重  单列
select  distinct  列名 from 表名

数据条件查询
where 
1、比较语句

>  =  < >= <= != 
>  2、逻辑运算符
>  and or not
>  3、模糊查询
>  like 
>  % 匹配任意多个字符
>  _ 匹配任意一个字符
>  4、范围查询
>  in  表示在一个不连续的范围内
>  between ......and ... 表示在一个连续的范围内
>  null 
>  is null    判断是空
>  is not null  判断不是空

优先级:
由高到低的顺序
小括号>not>比较运算符>逻辑运算符
在逻辑运算符里 and > or  
如果想要先执行or 就得加括号


排序
order by  
asc  升序
desc  降序

分组
group by    在查询结果后面进行分组
select gender from students group by gender;

1、group by + group_concat(字段名)  可以查出该字段的信息
select gender,group_concat(name) from students group by gender;
2、group by + 聚合函数    avg()  sum()  count(*)
select gender,count(*) from students group by gender;
3、group by + having
having 条件表达式  用来分组查询后再根据条件进行查询
having和where的用法是一样的 只不过having只能在group by 后使用
mysql> select gender,count(*) from students group by gender having count(*)>2;
4、group by + with rollup
作用就是在最后一行 记录当前列里所有记录的总和

6.聚合函数

1、count(*) 获取总行数
select count(*) from students;
2、max 查询最大值
3、min 查询最大值
4、sum 求和
5、avg 求平均值
5、round(avg(列名),2) 求平均值保留两位小数

一个汉字占多少长度与编码有关:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节

分页
1、limit start(开始,从第几行开始查) ,count(从开始行下一行,往后查几行数据)
select * from 表名 limit start,count; 
select * from 表名 limit 9,5; 

7.外键

定义、连接两个表的
1、先建主表  插入数据
2、再建子表
注意  一定要先创建与与主表关联的列
foreign key(列名) references 主表(id)
3、插入数据

两张表创建之后添加外键
alter table 表名  add  foreign key 列名 references 主表名(id)

查看外键
show create table 表名

删除外键   
首先要知道外键的名称
show create table 表名
删除外键约束的命令
alter table 子表名 drop foreign key 外键名称

8.修改mysql密码

一、在windows 下修改密码
1、进入mysql 
2、use mysql
3、update user set password = password('1234') where user='root'
4、关闭mysql 
5、重启电脑

二、在linux下修改密码          密码一定要记住
1、进入mysql 
2、use mysql
3、update user set authentication_string = password('1234') where user='root'
4、关闭mysql
5、重启虚拟机

9.连接查询

1、内连接 就是两张表的交集  
select * from 表1 inner join 表2 on 表1.列名=表2.列名
2、左连接
select * from 表1 left join 表2 on 表1.列名=表2.列名
3、右连接
select * from 表1 right join 表2 on 表1.列名=表2.列名

自关联
一个表自己查询自己
inner join on 

子查询
定义:一个select语句里面嵌入另一个select语句
主查询和子查询的关系
1、子查询是嵌入在主查询里
2、子查询是辅助主查询 充当条件或者数据源的
3、子查询是一个完整的select语句,可以被单独拿出来使用
子查询分类
1、标量子查询  返回的是数据(一行一列)
2、列级子查询    返回的是一列(一列多行)
3、行级子查询    返回的是一行(一行多列)

10.视图

1、定义 select 语句的结果集,是一张虚拟的表
2、创建视图语句
create view 视图名 as select语句
3、查看视图
show tables;
4、使用视图
select * from 视图名
5、删除视图
drop view 视图名
视图的作用
方便操作 减少复杂的SQL语句,增强可读性

11.事务

应用场景: 
银行的订单系统
定义:
是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位
四大特性:
原子性
一致性
隔离性
持久性

1、开启 
begin
2、插入数据
3、提交 
commit


1、rollback 回滚


索引
定义:数据库的索引好比就是一本书的目录
作用:优化查询速度
查看索引
show index from 表名
创建索引
create index 索引名 on 表名(字段名(长度))
删除索引
drop index 索引名 on 表名



import pymysql

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    password = '1234',
    db = 'jing_dong',
    charset = 'utf8',


)

'''
Connection对象
?	用于建立与数据库的连接
?	创建对象:调用connect()方法
conn=pymysql.connect(参数列表)
?	参数host:连接的mysql主机,如果本机是'localhost'
?	参数port:连接的mysql主机的端口,默认是3306,可以不写?
?	参数db:数据库的名称
?	参数user:连接的用户名
?	参数password:连接的密码
?	参数charset:通信采用的编码方式,建议是'utf8',要求与数据库创建时指定的编码一致。
conn对象的方法
? ?当连接成功后可以做如下操作:
?	close()关闭连接
?	commit()事务,所以需要提交才会生效;
?	rollback()事务,放弃之前的操作
?	cursor()返回Cursor对象,用于执行sql语句并获得结果
Cursor对象
?	创建对象:调用 Connection对象的cursor()方法 cursor=conn.cursor()
?	执行sql语句
Cursor对象的方法
?	close()关闭
?	execute(operation [, parameters ])执行语句,返回受影响的行数。
?	fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组。
?	next()执行查询语句时,获取当前行的下一行
?	fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
———————————————


posted @ 2020-12-30 10:47  小王小王ii  阅读(92)  评论(0编辑  收藏  举报