kangyuetao
for me

mysql基本操作

2016-01-11 mysql
Word count: 4.3k | Reading time: 16min

在日常应用中可能一时想不起来,所以有必要整理一份 指令相关的笔记,以是个人比较满意,也比较全面的一份笔记,希望能帮到你,适用初级小白,大神可略过!

MYSQL常用命令

数据备份与还原
注意:不要打分号,不登陆mysql 直接在cmd下运行

1、备份

  • mysqldump -uroot -p123 要备份的数据库名>生成的脚本路径

2、恢复

  • source 脚本文件路径

  • 端口号为:3306

  • 默认存储引擎:innodb

  • 默认字符集:utf-8

MYSQL开启关闭及查询时间版本指令:

  • 开启MySQL服务 net start mysql 或 sudo service mysql start
  • 重启服务 sudo service mysql restart
  • 查看看进程中是否存在mysql服务 ps ajx|grep mysql
  • 进入mysql数据库控制台命令: mysql -u用户名 -p密码
  • 查看版本命令: select version();
  • 显示当前时间命令: select now();
  • 退出MySQL命令: quit或exit
  • 结束MySQL服务 net stop mysql 或 sudo service mysql stop

修改用户名及密码相关指令:

​ 1、修改密码格式命令: set password for 用户名@localhost = password(‘新密码’);

​ 2、修改密码格式命令: mysqladmin -u用户名 -p旧密码 password 新密码;

修改用户名命令

​ 进入mysql库: use mysql;
​ 然后输入: update user set user =’新用户名’ where user =’旧用户名’;

创建库的相关指令

  • 创建数据库命令: create database 数据库名 charset=utf8;

  • 显示所有的数据库: show databases;

  • 删除数据库命令: drop database 数据库名;

  • 导入(连接)数据库命令: use 数据库名

  • 查看当前使用的数据库命令: select database();

  • 当前数据库包含的表信息命令: show tables;

  • show create table 表名; 展示详细属性

建表相关指令:

  • 创建表命令: create table 表名 ((字段名 类型 属性),(字段名 类型 属性));
  • 修改表名: alter table 表名 rename to 新表名;
  • 获取表结构命令: desc 表名; 或者 show columns from 表名;
  • 删除表命令: drop table 表名;
  • 修改字段命令: alter table 表名 change 原字段名 新字段名 数据类型;
  • 修改数据类型命令: alter table 表名 modify 字段名 新数据类型;
  • 删除一个字段命令: alter table 表名 drop 字段名;
  • 将字段1放在字段2后面命令: alter table 表名 modify 字段名1 数据类型 after 字段名2;

插入数据相关命令:

  • 插入数据命令: insert into 表名 values (添加的数据,) #按列表竖列类型添加以,分隔
    insert into 表名 (字段,字段) values (添加的数据,)
  • 查看表中所有数据命令: select * from 表名;
  • 查看相关类型数据命令: select 字段,字段 from 表名;
  • 查询指定字段命令: select 字段 from 表名;
  • 查询前几行数据命令: 如:查看表中前行数据 select * from 表名 limit 0,2;
  • 插入数据类型命令: alter table 表名 add 字段 数据类型;
  • 清空表内数据命令: delete from 表名;
  • 清空表 自增id,下次从1开始 truncate table 表名;

第二种
(注意:这个是你通过delete from table 之后 设置的。不然不起作用)

如果表中的数据还有用,那么需要从特定的某一个值开始自动增长的话,做法如下
比如你想让id从2开始自动增长,sql如下

alter table jx_pcmx AUTO_INCREMENT 2;

alter table jx_pcmx AUTO_INCREMENT 此处写你想让id从几开始增长的数字;

·删除表中数据命令: 如:删除表中编号为1的记录 delete from 表名 where id=1;

·修改表中数据命令: update 表名 set 字段=新值 where条件 如:update 表名 set name=’Mary’where id=1;

·在表中增加字段命令: alter table 表名 add字段 类型 其他;
—例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为空
mysql> alter table MyClass add passtest int(4) default ‘’;

·选取字段插入多条记录命令: insert into 表名(字段名1,字段名2,….) values(值1,值2,…),(值1,值2,…)…;

·全部字段插入多条记录命令: insert into 表名 values(值1,值2,…),(值1,值2,…)…;

·使用as 给字段起别名命令: select 原字段名 as 新字段名 from 表名; 查询出来的结果字段名不是原字段名,变成了新字段名

·使用distinct可以消除重复数据 select distinct 字段名,distince 字段名 from student; 查询出来的性别(字段名)和年龄(字段名)没有重复的数据

MySQL支持多种类型 大致可以分为三类:数值、日期/时间 和 字符串(字符)类型。

常用字段类型:

·整形
- tinyint(m) 1个字节 范围(-128···127)

- int(m) 4个字节 范围(-2147483648···2147483647)

- bigint(m) 8个字节 范围 (+-9.22*10的18次方)

· 浮点型: # 一般应用于身高体重之类

- float(m,d) 单精度浮点型 8位精度(4字节) m总个数, d小位数

- double(m,d) 双精度浮点型 16位精度(8字节) m总个数, d小位数

·定点数 # 精确值 一般应用于与钱相关之类的
- decimal(m,d) 参数 m < 65 是总个数,d<30 且 d<m 是小位数

·字符串
- chr(n) 固定长度 最多255个字符 # 查询速度快,但占固定内存,空间消耗大

- varchar(n) 不固定长度 最多65535个字符 #占用内存灵活,节省空间,但查询速度慢

- text 可变长度,最多65535个字符 # 不确定长度时使用

- 小总结
char比varchar查询更快
varchar比char占用资源少
char是定长,最多255
varchar是不定长,最多65535
char(n)若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉,所以char类型存储的字符串末尾不能有空格,varchar不限于此。
char(n)固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或两个字节(n>255),所以varchar(4)存入3个字符都将占用4个字节
decimal(m,n)非常精确的小数

时间/日期类型

  • date 日期 如:’2018-12-5’
  • time 时间 如:’12:33:55’
  • datetime 日期时间 如:’2018-12-2 22:06:44’
  • timestamp 自动存储记录修改时间

数据类型的属性:

  • null 数据可包含null值

  • not null 数据不可包含null值

  • default 默认值

  • primary key 主键

  • auto_increment 自动递增,适用于整数类型

  • unsigned 无符号

  • character set 指定一个字符集
    name

  • bit 称为位数据类型 0是假 1是真 作为逻辑变量使用,用来表示真、假或是、否等二值选择

常用权限的解释

  • file 在MySQL服务器上读写文件。

  • process 显示或杀死属于其它用户的服务线程。

  • reload 重载访问控制表,刷新日志等。

  • shutdown 关闭MySQL服务

数据库/数据表/数据列权限

  • alter 修改已存在的数据表(例如增加/删除列)和索引。
  • create 建立新的数据库或数据表。
  • delete 删除表的记录。
  • drop 删除数据库或数据表
  • index 建立或删除索引
  • insert 增加表的记录
  • select 显示/搜索表的记录
  • update 修改表中已存在的记录
  • enum 枚举类型

特别的权限:

  • all 允许做任何事(和root一样)
  • ·usage 只允许登录–其它什么也不允许做。

条件查询
使用where子句对表中的数据筛选,结果为true的行会出现在结果集中
where后面支持多种运算符,进行条件的处理

  • 比较运算符: > < <= >= = != is
    select * from 表名 where 条件;

  • 逻辑运算符:and or not
    select * from 表名 where 条件;

  • 范围查询 between…and…
    例: (左闭右闭,左右都包含)
    select 字段 from 表名 where 字段 between 开始区间 and 结束区间;

  • 模糊查询 like %表示任意多个任意字符 表示一个任意字符
    例: % 和 _ 可以加在任意位置、
    select * from 表名 where 字段 like ‘字符元素%’;
    select * from 表名 where 字段 like ‘%字符元素’;
    select * from 表名 where 字段 like ‘字符元素
    ‘;
    select * from 表名 where 字段 like ‘_字符元素’;

  • 判非空 is not null
    例: select * from 表名 where 字段 is not null;

优先级:
优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
and比or先运算,如果同时出现并希望先算or,需要结合()使用

  • 排序: 默认升序 升序|降序
    语法: select * from 表名 order by 字段名 asc|desc

说明
将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
默认按照列值从小到大排列(asc)
asc从小到大排列,即升序
desc从大到小排序,即降序
多次排序优先执行前面的命令

聚合函数:

  • 总数: count() 表示计算总行数,括号中写星与列名,结果是相同的
    select count(
    ) from 表名;

  • 最大值: max(字段名) 表示求此列的最大值
    select max(字段名) from 表名; 或 select max(字段名1) from 表名 where 字段名2=定值;

  • 最小值: min(字段名) 表示求此列的最小值
    select min(字段名) from 表名; 或 select min(字段名1) from 表名 where 字段名2=定值;

  • 求和: sum(字段名)表示求此列的和
    select sum(字段名) from 表名; 或 select sum(字段名1) from 表名 where 字段名2=定值;

  • 平均值: avg(字段名)表示求此列的平均值
    select avg(字段名) from 表名; 或 select avg(字段名1) from 表名 where 字段名2=定值 and 字段名3=定值;

  • 分组: group by
    select 字段名1 from 表名 group by 字段名1; 或 select avg(字段名1) from 表名 where 字段名2=定值 and 字段名3=定值;
    说明:
    group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
    group by可用于单个字段分组,也可用于多个字段分组

这些还可以这么用:

  • 语法注意:

    • select @1,字段1 from 表名 group by 字段1
      或 select 字段1,@1 from 表名 where 条件 group by 字段1;
      @1 — 位置只能放聚合函数、group_concat和分组的字段
  • 统计分组:
    例: select avg(字段名1),字段名2 from 表名 group by 字段名2;
    例: select count(字段名1),字段名2 from 表名 group by 字段名2;

·嵌套查询
例: select *from 表名 where 字段名1=(select min(字段名1) from 表名);

·group by + group_concat()
group_concat(字段名)可以作为一个输出字段来使用,
表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
例: select 字段名1,group_concat(字段名2) from 表名 group by 字段名1;
或 select 字段1,group_concat(字段2) from 表名 where 条件 group by 字段1;

·group by + 集合函数
通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作
例: select 字段名1,group_concat(字段名2) from 表名 group by 字段名1;
select 字段名1,count(*) from 表名 group by 字段名;

·group by + having
having 条件表达式:用来分组查询后指定一些条件来输出查询结果
本质:having作用和where一样,但having只能用于group by
例: select gender,count() from 表名 group by 字段名 having count()>数值;

·group by + with rollup
with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和
例: select 字段名1,count(*) from 表名 group by 字段名1 with rollup;
select 字段名1,group_concat(字段名2) from 表名 group by 字段名1 with rollup;

完整的select语句顺序:
select distince *
from 表名
where …
group by … having …
order by …
limit start,count

select 获取查看
from 来自
where 后面加条件
group by 分组
having 对分组后的组进一步筛选
limit(m,n) 分页 m 起始位置 n 每页多少条数据
count() 总揽条数 括号里可以加条件 总览某种数据
group_concat() 合并多个分组 括号里添加要合并的数据类型

·where、having之间的区别和用法
作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
聚合函数是比较where、having 的关键。
where、聚合函数、having 在from后面的执行顺序:where>聚合函数(sum,min,max,avg,count)>having
列出group by来比较二者。()因where和having 在使用group by时问的最多)
若须引入聚合函数来对group by 结果进行过滤 则只能用having。

注意事项 :

1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。

2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,
即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常
包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

分页:
分页:select *from 表名 limit 起始位置start,行数计数count;
或 select *from 表名 where 条件 limit 起始位置start,行数计数count;

分页翻页
已知:每页显示m条数据,当前显示第n页
求总页数:此段逻辑后面会在python中实现
查询总条数p1
使用p1除以m得到p2
如果整除则p2为总数页
如果不整除则p2+1为总页数
求第n页的数据
例: select from 表名 limit (n-1)m,m;

内连接查询:查询的结果为两个表匹配到的数据
语法1: inner join on
select *from 左表名 inner join 右表名 on 左表名.两表相关联字段 = 右表名.两表相关联字段;
或 select *from 左表名 inner join 右表名 on 左表名.两表相关联字段 = 右表名.两表相关联字段
where 右表名.条件字段=值 and 左表名.条件字段>值;

例: 如查看不同年级 每个年级都有谁 每个年级都有多少人
select class.name,group_concat(student.name),count(student.id)
from student inner join class on
class.id=student.class_id group by class.name;

语法2:
select 左表名.字段1,group_concat(右表名.字段1),count(右表名.两表相关联字段)
from 右表名 inner join 左表名 on
左表名.两表相关联字段=右表名.两表相联关字段 group by 左表名.字段一;

右连接查询: right join on
查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充

语法:
select *from 右表名 right join 左表名 on 右表名.两表相关联字段 = 左表名.两表相关联字段;

左连接查询: left join on
查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充

语法:
select *from 左表名 left join 右表名 on 左表名.两表相关联字段 = 右表名.两表相关联字段;

查询表中 某字段重复数据的个数和最多的个数
select 字段1,count(*) as count from 表名 group by 字段1 having max(count);

select 字段1,count(*) as count from 表名 as a group by 字段1 having max(count) order by 字段1,count limit 0,1;

视图
MySql创建视图
(1).第一类:create view 视图名 as select * from 表名;

(2).第二类:create view 视图名 as select 字段,字段,字段 from 表名;

(3).第三类:create view 视图名v[vid,vname,vage] as select 字段,字段,字段 from 表名
删除视图
drop view 视图名;

mysql中去重 distinct

explain select 字段1 from 表名 where 字段1=值; 查看查找次数

create index 索引名 on 表名(相关字段); 加索引

drop index 索引名 on 表名; 删除索引

外键 alter table 表名1 add constraint 外键名字 foreign key(列名1) references 表名2(列名2);

pymysql 交互:

-- coding: UTF-8 --

引入connect

from pymysql import connect

建立连接

conn= connect(host=’localhost’,port=3306,database=’库名’,user=’用户名’,password=’密码’,charset=’utf8’)

获取cursor对象

cur = conn.cursor()

执行sql语句

sql =”sql 语句命令”
cur.execute(sql)

取出数据 fetchone 取一条数据 fetchall 取多条数据

data=cur.fetchall()

定义一个列表

userlist = []
for i in data:

定义一个字典来存放信息

userdict = {}
userdict[‘字段’] = i[-1] # 索引位置信息
userdict[‘字段’] = i[1]
userdict[‘字段’] = i[2]
userdict[‘带小数字段’] = float(i[3])
userlist.append(userdict) # 添加元素

print(data)

输出

print(userlist)

#关闭连接
cur.close()
conn.close()

导入模块

from pymysql import connect

建立连接

ck = connect(host=’localhost’,port=3306,database=’库名’,user=’用户名’,password=’密码’,charset=’utf8’)

获取cursor对象

con = ck.cursor()

执行sql语句

con .execute(“sql 命令语句”)

提交

ck.commit()

‘’’
host 主机
localhost 本地主机
port 端口
database 数据库
user 用户
password 密码
charset 字符集
‘’’

Author: kangyuetao

Link: https://kangyuetao.github.io/64230/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Mysql事物的四大特性与隔离级别
CATALOG
  1. 1. MYSQL常用命令:
    1. 1.1. MYSQL开启关闭及查询时间版本指令:
    2. 1.2. 修改用户名及密码相关指令:
    3. 1.3. 创建库的相关指令:
    4. 1.4. 建表相关指令:
    5. 1.5. 插入数据相关命令:
  2. 2. 常用字段类型:
    1. 2.1. 数据类型的属性:
      1. 2.1.1. 聚合函数:
  3. 3. pymysql 交互:
    1. 3.1. 引入connect
    2. 3.2. 建立连接
    3. 3.3. 获取cursor对象
    4. 3.4. 执行sql语句
    5. 3.5. 取出数据 fetchone 取一条数据 fetchall 取多条数据
    6. 3.6. 定义一个列表
    7. 3.7. 定义一个字典来存放信息
    8. 3.8. 输出
    9. 3.9. 导入模块
    10. 3.10. 建立连接
    11. 3.11. 获取cursor对象
    12. 3.12. 执行sql语句
    13. 3.13. 提交