活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程。您可以从以下3个方面任选其一着手(不强制),或者按照自己的理解发布专栏学习作品,参考如下:
**
创作计划
**
本人学习sql语句做的笔记
关系型数据库 SQL
数据查询语言 DQL
数据操作语言 DML
数据定义语言 DDL
事务处理语言 TPL
数据控制语言 DCL
引擎
查看MySQL数据库支持的存储引擎
show engines
修改存储引擎
alter table 表名 engine="引擎类型"
索引
创建索引
alter table 表名 add index 索引名(列名)
查看表中已有索引
show index from 表名
删除索引
alter table 表名 drop index 索引名
创建联合索引
alter table 表名 add index (列名1,列名2...)
时间
开启时间监测
set profiling=1
查看执行的时间
show profiles
事务
开始事务
begin 或者 start transaction
临时修改为手动提交事务 #默认自动
set autocommit = 0
提交事务
commit
回滚事务
rollback
清屏
Ubuntu
system clear
windows
system cls
数据类型
主键:primary key
自增:auto_increment
不为空:not null
无符号:unsigned
默认:default
整形
bigint #占8个字节 19
int #占4个字节 9
smallint #占2个字节 5
tinyint #占1个字节 2
浮点型
decimal(总位数,点后位数)
文本
varchar()
枚举类型
enum()
日期时间类型
datetime #允许范围1753-1-1至9999-1-1
smalldatetime #允许范围1900-1-1至2079-1-1
基本操作
启动MySQL:net start MySQL
停止MySQL:net stop MySQL
登入MySQL:MySQL -uroot -p
显示时间:select now()
退出MySQL:exit
查看所有数据库:show databases
创建数据库:create database 名字charset=utf8;
删除数据库:drop database 名字
查看当前使用的数据库:select database()
使用数据库:use 名字
创建表:create table 表名(字段名 数据类型 可选的约束条件...)
删除表:drop table 表名
查看当前数据库中的所有表:show tables
查看表结构:desc 表名
表修改添加字段:alter table 表名 add 列名 类型 约束
表修改字段类型:alter table 表名 modify 列名 类型 约束
表修改字段名和字段类型:alter table 表名 change 原名 新名 类型及约束
表修改删除字段:alter table 表名 drop 列名
查看创表SQL语句:show create table 表名
查看创库SQL语句:show create database 库名
查看表所有数据:select * from 表名
查看表部分列数据:select 列名,列名 from 表名
表添加数据 #字符串加""
全列添加
insert into 表名 values(...) #值的循序与表结构字段循序对应
部分列添加
insert into 表名(列名,列名) values(值1,值2)
全列多行添加
insert into 表名 values(...),(...),(...)
部分列多行添加
insert into 表名(列名,列名) values(值1,值2),(值1,值2)
表修改数据
update 表名 set 列名=值,列名=值 where 条件 #where id=值
表删除数据
delete from 表名 where 条件 #where id=值
as关键字(起别名)#as关键字可以省略
给表起别名
select 列名as别名,列名as别名 from 表名as别名
给字段别名
select 列名as别名,列名as别名 from 表名
distinct关键字(去重)
select distinct 列名,列名 from 表名
运算符
where条件语句比较运算符
,>=,=,!=
where条件语句逻辑运算符
and,or,not()
查询
模糊查询
关键字like
多个任意字符:%
一个任意字符:_
范围查询
连续范围
between 值 and 值
非连续范围
in()
空判断查询
空判断
is
非空判断
is not
排序
升序
order by 列名 asc #默认升序可以不写asc
降序
order by 列名 desc
分页显示
limit 开始行索引默认0 , 查询的条数
select * from 表名 limit (n-1)*m,m;
聚合函数
select 聚合函数 from 表名 #通用(*)
求指定列总行数
count(列名)
求指定列最大值
max(列名)
求指定列最小值
min(列名)
求指定列的和
sum(列名)
求指定列平均值
avg(列名)
保留指定小数
round(,值)
ifnull函数判断指定字段是否是空值,如果是空值使用默认值
分组
分组查询 #select 列名1,列名2 from 表名 group by 列名1,列名2
group by
分组数据过滤
having 条件表达式
统计指定分组的信息集合(聚合函数)
group_concat(列名)
#select 列名1,group_concat(列名)from表名 group by 列名1
汇总
with rollup
#select 列名1,聚合函数(列名)from表名group by列名1with rollup
连接查询
内连接查询 #on:表示连接查询条件
inner join
select表.列,表.列from 表1 inner join 表2 on 表1.列名1=表2.列名2
左连接查询
left join
select表.列,表.列from 表1 left join 表2 on 表1.列名1=表2.列名2
右连接查询
right join
select表.列,表.列from 表1 right join 表2 on 表1.列名1=表2.列名2
自连接查询
select值.列,..from表名as值1 inner join表名as值2 on值1.列1=值2.列2
子查询
一个完整的select语句放到括号里面
外键约束
对已存在的字段添加外键约束 #foreign key()references
alter table表名add foreign key(列名)references表名(列名)
创建表是添加外键约束
foreign key(列名)references表名(列名)
删除外键约束
alter table 表名 drop foreign key 外键名
pyMySQL
导包
import pymysql
创建连接对象
conn=pymysql.connect(
host="服务器主机地址", #localhost
port=端口号,
user="用户名",
password="密码",
database="操作的数据库",
charset="操作数据库的编码格式")
获取游标 #目的就是要执行sql语句
cursor=conn.cursor()
准备sql语句
变量="sql语句"
异常语句
try:
执行sql语句
cursor.execute(准备的sql语句)
提交数据到数据库
conn.commit()
捕获异常
except Exception as e:
conn.rollback() #回滚的意思
无论是否异常都要执行的代码
finally:
关闭游标
cursor.close()
关闭连接
conn.close()
获取查询的结果集
变量=游标.fetchone() #一条数据 元组类型
变量=游标.fetchall() #多条数据 元组类型
防止sql语句注入
%s #用(元组,列表,字典) 传参