mysql命令演示_MySQL数据库命令下的常用操作方法演示与介绍,pymsql使用方法。...

数据库mysql

安装mysql请移步百度教程,此文章不再详述。

启动数据库

cmd下 mysql -u root -p自己设置的密码

命令

show databases;看mysql数据库管理系统的数据库列表

use 数据库名;选择要操作的mysql数据库,使用该命令所有mysql命令都只针对该数据库

show columns from 数据表; 显示数据表的属性,属性类型,主键信息,是否为Null(空),默认值等其他信息

create database testdb charset "utf8"; 创建一个叫testdb的数据库,且让其支持中文。

drop database testdb;删除数据库testdb

show index from 数据表; 显示数据表的详细索 引信息,包括PRIMARY(主键)

创建一个数据表

create table table_name(column_name【列名】 column_type【列类型】); #数据库中分号很重要

例如:

mysql> create table student(

-> id int auto_increment,#【auto_increment表示每插入一条数据自增1】

-> name char(32) not null,

-> age int not null,

-> register_date date not null,

-> primary key(id));

如此便创建了一个student的数据表

MySQL数据表中插入新数据

insert into table_name(field1,field2,...fieldN)values(value1,value2,...valueN)

使用上面创建的表例子

mysql> insert into student(name,age,register_date)values("zhangyang",3,"2018-1-1")

mysql> insert into student(name,age,register_date)values('zhangyang',3,'2018-5-5')# 单引号和双引号也无区别

如此便于数据表中插入了数据

mysql查询数据

select命令可以读取一条或者多条数据

*号代替其他字段

select * from student;代表看数据表所有字段的详情

运行结果如下

+----+-----------+-----+---------------+

| id | name | age | register_date |

+----+-----------+-----+---------------+

| 1 | zhangyang | 3 | 2018-01-01 |

| 2 | zhangyang | 3 | 2018-05-05 |

+----+-----------+-----+---------------+

一般语法:

select column_name,column_name from table_name;

可以使用offset n来设置偏移量,说白了就是从第n+1条数据读取,必须配合limit使用,默认为0

limit n代表只读取n条数据的意思。如select * from student limit 2 offset 3;#offset 必须在limit后面

where子句:

可以使用where语句来包含任何条件:

如:select * from student where id>3;输出是第三条以后的数据

select * from student where id=4;输出第四条数据

也可以多条件查询:

select * from student where id>3 and age>5;查询并输出第三条后年龄大于5的数据。

还能模糊查询:

select * from student where register_date like '2018-05%'; 记得要用like和%

mysql修改数据

使用update语句

语法:update table_name set field1 = new-value1,field2 = new-value2 where clause;

例如:

update student set name='韩梅梅' where name='zhangyang';#只改一个列名中的东西,还可以改多个

mysql删除数据

delete语句

delete from table_name where clause; 设置删除条件后,精准删除数据

例如:

delete from student where name = '韩梅梅'; 名字为韩梅梅的数据全部删除。

数据排序:

select from table_name order by fieldn;

select from table_name order by fieldn desc;

按第n列来排序,默认为升序,加一个desc就是降序。

group by 用来分组统计

直接上例子

select name,count(*) from student group by name;

此时会用name来计数

mysql> select * from student;#之前使用过delete 删了前面两条,id数字增加到哪里还是哪里

+----+------+-----+---------------+

| id | name | age | register_date |

+----+------+-----+---------------+

| 3 | 陆毅 | 31 | 2018-11-05 |

| 4 | x毅 | 31 | 2048-01-05 |

| 5 | x毅 | 31 | 2017-05-05 |

+----+------+-----+---------------+

3 rows in set (0.00 sec)

mysql> select name,count(*) from student group by name;

+------+----------+

| name | count(*) | #count(*)也能赋值出去换一个新的名称,也是使用as **。

+------+----------+

| x毅 | 2 |

| 陆毅 | 1 |

+------+----------+

2 rows in set (0.07 sec)

-----------------------我是分割符------------------------------------------

mysql> select name,count(*) as count_name from student group by name;

+------+------------+

| name | count_name |

+------+------------+

| x毅 | 2 |

| 陆毅 | 1 |

+------+------------+

2 rows in set (0.27 sec)

注意 前面的name 是显示name列,后面的name 是显示[by]name计数的结果!

group by的合计功能:

mysql> select name,sum(age) from student group by name;

+--------+----------+

| name | sum(age) |

+--------+----------+

| x毅 | 62 |

| 张嘉译 | 45 |

| 草清华 | 15 |

| 陆毅 | 31 |

+--------+----------+

4 rows in set (0.04 sec)

最后统计所有人年龄相加(这里可以是别的东西计数相加,我只是举例子),只需要在分号前加入with rollup既可

mysql> select name,sum(age)as age_count from student group by name with rollup;

+--------+-----------+

| name | age_count |

+--------+-----------+

| x毅 | 62 |

| 张嘉译 | 45 |

| 草清华 | 15 |

| 陆毅 | 31 |

| NULL | 153 |

+--------+-----------+

5 rows in set (0.00 sec)

不想要NULL的话,也能使用coalesce语法来给NULL换成想要的名字

mysql> select coalesce(name,'合计'),sum(age)as age_count from student group by name with rollup;

+-----------------------+-----------+

| coalesce(name,'合计') | age_count |

+-----------------------+-----------+

| x毅 | 62 |

| 张嘉译 | 45 |

| 草清华 | 15 |

| 陆毅 | 31 |

| 合计 | 153 |

+-----------------------+-----------+

5 rows in set (0.00 sec)

修改数据表本身而不是数据,比如修改name age这个表头

mysql alter语句

alter table student add sex enum('M','W') not null;增加sex这个字段,字段类型设置为enum('M','W')

alter table student drop age;从student中删除age整个字段(age对应的整列)

修改字段类型及名称 需要用change子句

mysql> alter table student change sex gender char(32) default 'X'; #change后接旧字段名,马上跟新字段名,然后新字段类型既可,默认值看情况是否需要设置。

Query OK, 5 rows affected (0.84 sec)

Records: 5 Duplicates: 0 Warnings: 0

查询两个表之间的交集并集差集

innerjoin 交集 left join 差集(左对右) right join也是差集(右对左)

full join 并集:mysql并不直接支持full join,可以联合left和right一起输出就成。

语法如下:

create table A (a int not null);

create table B (b int not null);

insert into A (a)values(i);#这里简写,i为1-5

insert into B (b)values(i);#这里简写,i为3-7

select * from A inner join B on A.a=B.b;此时输出A与B的交集

+---+---+

| a | b |

+---+---+

| 3 | 3 |

| 4 | 4 |

| 5 | 5 |

+---+---+

select * from A left join B on A.a=B.b;此时输出 B 于 A中的差集,先显示交集,后面出现的是差集

+---+------+

| a | b |

+---+------+

| 3 | 3 |

| 4 | 4 |

| 5 | 5 |

| 1 | NULL |

| 2 | NULL |

+---+------+

根据字面意思不难看出 right join其实就是把结果翻过来显示。

并集由于mysql不直接支持,可以使用union语句把left join 和right join放一起输出折合显示:

select * from A left join B on A.a=B.b union select * from A right join B on A.a=B.b;

mysql事务:

其实就是一开始输入begin;#开始事务,

然后各种骚操作,如果程序这个时候蹦了,那么无论是插入数据还是修改或者干啥,不会记录下来,但是如果那个id序号是自增的,这个序号其实还是会变的,就如操作后再输入rollback;的效果是一样的

如果输入了commit; 那么操作过的数据都会保留下来

mysql索引

如果说加了索引的mysql是飞机的话,那么没加索引的mysql就是一辆共享单车~,速度的差异很大,当然数据量很小的话体现不出来,但是数据量大了,就有非常大的区别,但索引也有缺点,表的查询速度提升了,但是如果对表进行update,insert,和delete等操作,mysql不仅要保存数据还要保存索引,建立索引会占用磁盘空间的索引文件。

创建索引

create index index_name on table_name(x(length));#index_name索引名(看自己喜欢写什么),table_name要索引的表,x要成为索引的字段,length该字段的长度,不超过字段本身的长度,一般字段多少,他就填多少

、、、

注意:主键自动就是索引。

、、、

删除索引:

drop index index_name on table_name;#删除table_name表中的index_name索引。

python 使用mysql接口

MySQL-python在python3上没有实现,各种安装失败,无论怎么装c++没用,建议大家使用pymysql。

安装 pip install pymysql

用法基本一样

!!!与redis一样,utf8中间不能加‘-’,必须连着写,否则会出错。

上代码:

importpymysql#创建与本机数据库的连接,端口默认3306,db就是自己命令行设置的数据库名(不是数据表)

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',db='slkdb',charset='utf8')#不写charset这句话,汉字输出全是问号#创建 光标,相当于mysql> | 这个东西

cursors =conn.cursor()#执行mysql语句,模拟有光标的那个命令,所以要cursor对象

result_row = cursors.execute('select * from student')#返回的是数据行数并不是数据

print(result_row)print(cursors.fetchall())#把数据都打印出来,fetchone()只打印一条,读取数据原理与读取文件的read一样,前面如果读取过的数据,后面就不会再显示

'''插入多条数据,executemany()'''data= [('N1',15,'2014-6-13','M'),

('N2', 13, '2014-6-3', 'M'),

('N3', 17, '2014-4-1', 'F')]

cursors.executemany("insert into student (name,age,register_date,gender)values(%s ,%s ,%s,%s)",data)

conn.commit()#不写这个提交命令,数据不会插入数据表中,就类似于mysql的事务。

cursors.close()#先关闭光标,一样 顺序关闭有始有终

conn.close()#关闭连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值