MySQL数据库命令下的常用操作方法演示与介绍~
数据库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如何连接数据库以及各种操作正在整理中。。。