2019-02-27MySQL基本指令一目了然版
2019-02-27 本文已影响0人
Little茂茂
数据库排名:
Oracle(关系型)
MySQL(关系型)
SQLServer(关系型)
PostgreSQL(关系型)
MongoDB(非关系数据库)
DB2(关系型)
Redis(非关系数据库)
ElasticSearch(非关系数据库)
行(记录)
列(字段)
关系型数据库:想
#SQL语句(结构化查询语言)
DDL(数据定义语言): create / drop / alter
DML(数据操作语言 - Data Manipulation Language): insert / delete / update / select
DCL(数据控制语言): grant / revoke
##1. DDL
###1. 创建数据库
create database 数据库名字;
create database 数据库名字 default charset utf8; ;-- 创建数据库的时候指定数据库中的字符集编码方式
create database if not exists 数据库名字;          -- 当指定数据库不存在的时候创建数据库
use 数据库名;          -- 切换数据库
###2. 删除数据库
drop database 数据库名字;          -- 删除数据库
drop database if exists 数据库名字;          -- 当数据库存在的时候删除数据库
###3. 创建表
create table 表名(字段名1 字段类型1 约束1, 字段名2 字段类型2 约束2, ...);          - 创建表
create table if not exists 表名(字段名1 字段类型1 约束1, 字段名2 字段类型2 约束2, ...);          -- 当指定表不存在的时候创建表
###4. 删除表
drop table 表名;          -- 删除指定表
drop table if exists 表名;          -- 删除已经存在的指定表
###5. 修改表
alter table 表名 add column 字段名 字段类型 约束;          -- 添加列
alter table 表名 drop column 字段名;          --删除列
## 2.DML
###1. 插入数据
insert into 表名 values(值列表);          -- 按表中字段的顺序依次给每一列赋值,添加一行记录
insert into 表名(字段列表) values(值列表);          -- 按字段列表顺序依次给每一列赋值,添加一行记录
###2. 删除数据
delete from 表名;          -- 删除整张表(删除后表不存在了)
truncate table 表名;          -- 清空指定表中的所有数据(表还在)
delete from 表名 where 条件语句;          -- 删除满足条件的行
###3.更新数据
update 表名 set 字段1=新值1,字段2=新值2,...;          --更新全表的指定字段(一般不用)
update 表名 set 字段1=新值1,字段2=新值2,... where 条件;          --更新满足条件的行的指定字段
###4.查询数据
#####1.直接查询
select * from 表名;          -- 查询指定表的所有行所有列
select 字段1,字段2,... from 表名;          --查询表中所有行的指定列(投影)
#####2.列重命名
select 字段1 as 新字段名1,字段2 as 新字段2,... from 表名;          --查询表中所有行的指定列,并且给相应的字段重命名(这儿的as可以省略)
#####3.对查询结果重新赋值
select 字段1,if(字段2, 值1,值2),... from 表名 where 条件;          --查询表中满足条件的行指定的列的数据
注意: 在字段选中查询字段的位置可以通过`if(字段条件,值1,值2)`的方式来通过条件修改获取到的值。通过`case 字段 when 值 then 值1 else 值2 end`的方式能达到同样的效果。if的方式只在MySQL有效
#####4.对列做运算
select concat(字段1,字段2) from 表名 where 条件;          -- 将查询到的指定列合并在一起返回数据
#####5.模糊查询
查询的时候通过like条件可以对数据库进行模糊查询
#####6.排序
select * from 表名 order by 字段名;          --查询结果按指定字段的值升序排列
select * from 表名 order by 字段名 desc;          --查询结果按指定字段的值降序排列;如果把des换成asc就会变成升序
注意: 排序的时候还可以通过加逗号指定多个排序关键字,例如:`select * from td_student order bg gender asc, stuid desc -- 对查询结果先按性别升序排序,然后再按学号降序排序`
#####7.限制
select * from 表名 limit 数量;          --只获取前指定数量条结果
select * from 表名 limit 数量1 offset 数量2;          --跳过前数量2条数,获取数量1条数据
#####8. 去重
select distinct 字段 from 表名;
**sql条件语句:**
- =          -- 等于
- <>          -- 不等于
- `>`          -- 大于
- <          -- 小于
- >=          -- 大于等于
- <=          -- 小于等于
- and          -- 逻辑与运算
- or          -- 逻辑或运算
- in          -- 集合运算; 例如: stuid in(1001, 1002); 选中stuid值是1001和1002的行
- between 值1 and 值2          -- 在值1和值2之间
- like --通常配合通配符`%`和`_`一起使用
注意: 如果条件是判断某个字段是否为空,不能使用`=null`和`<>null`要用`is null` 和 `is not null`
**SQL数据类型:**
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。 一下是MySQL中常见的数据类型。[MySQL数据类型](http://www.w3school.com.cn/sql/sql_datatypes.asp)
- char(size)          -- 定长字符串
- varchar(size)          -- 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符
- text          -- 存放最大长度为 65,535 个字符的字符串。
- int(size)           -- -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
- FLOAT(size,d)          --带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
- DOUBLE(size,d)           --带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
- bit          -- 相当于bool类型,只有0和1两个值
- date          -- 日期。格式:YYYY-MM-DD, 支持的范围是从 '1000-01-01' 到 '9999-12-31'
- DATETIME          -- 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP          -- 时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
- TIME          -- 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
**SQL约束:**
not null -- 不能为空
default 值 -- 设置默认值
primary key -- 主键约束(主键是表中能够唯一标识一条记录的列)
unique -- 值唯一
##5.约束管理
#####1.添加约束/索引
alter table 表名 add constraint 索引名 约束(字段名);          --给指定字典添加指定约束
#####2.删除索引
alter table 表名 drop index 索引名;          --移除指定索引对应的约束
#####3.添加外键约束
alter table 表名 add constraint 外键索引名 foreign key (字段1) references 表名2 (字段2)
#####4.删除外键约束
alter table 表名 drop foreign key 外键索引名;
##6.高级操作
#####1.聚合
max() -- 最大值
min() -- 最小值
sum() -- 求和
avg() -- 求平均值
count() -- 求个数
#####2.分组
group by(字段) -- 按照指定字段的值进行分组
注意: 如果是对分组后的结果进行筛选不能使用`where`而是使用`having`
#####3.连接
内连接: inner join 表名 on 连接条件
左外连接就是把左表不满足连接条件的记录也查出来对应的记录补上null
左外连接: left outer join 表名 on 连接条件
右外连接: right outer join 表名 on 连接条件
#####4.添加索引
create index 索引名 on 表(字段);
alter table 表名 drop index from 索引名;
##7.DCL - grant/revoke
#####1.创建用户
create user '用户名'@'登录地址' identified by '密码'; -- 登录地址可以是`localhost`表示本机登录,也可以是指定的ip地址,还可以是`%`表示任意地址
#####2.授权
grant 权限类型 on 数据库.对象 to 用户; -- 为指定用户添加指定数据库的指定对象的指定权限
revoke 权限类型 on 数据库.对象 from 用户; -- 撤销/召回指定用户对指定数据库的指定对象的指定权限
权限类型: select(查看), insert(添加),delete(删除),update(更新),creat(创建),drop(删除), alter(更改), all privileges(所有权限)
grant 权限类型 on 数据库.对象 to 用户 with grant option; --添加权限,并且可以将自己的权限再授权给别人
#####3.事务
begin; --开启事务环境
commit; --事务提交
rollback; --事务回滚
##8. pyMySQL
1. 创建数据库连接
连接对象 = pymysql.connect() - 返回连接对象
连接对象.close() -- 关闭连接
2. 获得游标 对象
游标对象 = 连接对象.cursor()
4. 向数据库发送sql语句
游标对象.execute(sql语句) - 返回执行结果