vage mysql_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

·字符串:

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

'''

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码有一些问题: 1. 在构造函数中,没有为 pName 分配内存,只是复制了指针,这可能导致程序崩溃。 2. 在拷贝构造函数中,同样没有为 pName 分配内存,只是复制了指针,这也可能导致程序崩溃。 3. 在析构函数中,应该检查指针是否为空,如果不为空,才进行释放操作。 4. 在 main 函数中,使用了一个 string 类型的变量 A,但是在 Person 类的构造函数中,要求传入的是 char* 类型的指针,这会导致编译错误。 5. 在 main 函数中,使用了一个 double 类型的变量 B,但是在 Person 类的构造函数中,要求传入的是 int 类型的年龄,这也会导致编译错误。 6. 在 main 函数中,没有调用 Person 类的输出函数,也就是没有输出对象的信息。 下面是修改后的代码: ```c++ #include <iostream> #include <string.h> using namespace std; class Person { public: Person(char *vn, int vage, float vh, float vw); Person(const Person &vref); void Print(); ~Person(); private: char *pName;//姓名 int age;//年龄 float height;//身高 float weight;//体重 }; //构造函数 Person::Person(char *vn, int vage, float vh, float vw) { age = vage; height = vh; weight = vw; pName = new char[strlen(vn) + 1]; strcpy(pName, vn); cout << age << endl; cout << height << endl; cout << weight << endl; cout << pName << endl; } //拷贝构造函数 Person::Person(const Person &vref) { int len = strlen(vref.pName); pName = new char[len + 1]; age = vref.age; height = vref.height; weight = vref.weight; strcpy(pName, vref.pName); } //输出函数 void Person::Print() { cout << age << endl; cout << height << endl; cout << weight << endl; cout << pName << endl; } Person::~Person() { if (pName != NULL) { delete[]pName; pName = NULL; } } int main() { char A[100]; int B; float C, D; cin >> A >> B >> C >> D; Person A1(A, B, C, D); A1.Print(); return 0; } ``` 在修改后的代码中,我们为 pName 分配了内存,并在析构函数中进行了释放。同时,我们也将 main 函数中的输入类型和 Person 类的构造函数要求的类型进行了对应。最后,我们调用了 Person 类的输出函数,输出了对象的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值