zoukankan      html  css  js  c++  java
  • mysql 数据库常见的一些基本操作 !详不详细你说了算!

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

    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 字符集 
    '''


      好了 ,就到这里,希望大家都能做一个快乐的小白并不断蜕变,如有不全面的地方请各位评论出来,互助互利嘛!加油!程序猿!努力成为你心上人的大白!

  • 相关阅读:
    数字音频技术:混音器
    android studio: 为现有项目添加C++支持
    android: requestLayout(), invalidate(), postInvalidate() 方法区别
    android: Canvas的drawArc()方法的几个误区
    MediaPlayer: MediaPlayer中的prepare方法和prepareAsync方法的区别
    MediaPlayer: 在不同控件之间实现视频的无缝切换的方法
    android studio: 让项目通过阿里云 maven jcenter 下载依赖资源
    android: ListView设置emptyView 误区
    Javascript继承
    TortoiseSVN 只取下或更新部分文件的方法(Sparse Update/Sparse Checkout)
  • 原文地址:https://www.cnblogs.com/canhun/p/10637096.html
Copyright © 2011-2022 走看看