MySQL入门操作整理

134 阅读4分钟

MySQL入门操作

参照廖雪峰及菜鸟教程总结

命令行使用:cmd->mysql -u root -p->输入密码

一、创建及删除数据库和表

1.创建数据库

create database 数据库名;

2.删除数据库

drop database 数据库名;

3.创建数据表(命令行)

create table table_name(表名) (column_name(字段名) column_type(数据类型));

例:

mysql> use 数据库名;
Database changes
mysql> create table student(
    ->student_id int NOT NULL AUTO_INCREMENT,//一般用于主键,实现自增
    ->student_name char(10) NOT NULL,//数字限制长度,且不能为空,否则报错
    ->student_age int NOT NULL,
    ->PRIMARY KEY (student_id)//设置主键
    ->);

4.删除数据表

drop table table_name;

5.查看操作

1).查看当前服务器数据库

show databases;

2).查看库中包含的表

use 数据库名;
show tables;

3).查看表的结构(字段)

use 数据库名;
desc 表名;//describe [数据库名.]表名 缩写;

二、CRUD(增删改查记录)

1.增

insert into <表名> (字段1,字段2,...) values (字段1的值,字段2的值,...);

可一次性添加多条记录,只values后再加括号,指定多个记录值

例:

insert into student (sutdent_id,student_name,student_age) values (1,'刀哥',88),(2,'虎哥',66);

2.删

delete from <表名> where ...;//where后为筛选条件,一定注意添加否则整张表的记录都会被删除

例:

delete from student where student_id=1;
delete frome student where student_id>=3 and student_id<=6;//and相当于&&,or相当于||

3.改

update <表名> set 字段1=值1,字段2=值2,... where ...;

例:

update student set student_age=18 where student_id=1;
update student set student_age=student_age+1 where student_id>4 and student_id<7;

如果where没有匹配到任何记录,语句不会报错,也不会有任何记录被更新

执行后会返回更新的行数以及where条件匹配的行数

4.查

1).基本查询

select * from <表名>;//'*'表示所有列

//select 1;可用于测试数据库了解是否有效,返回有1的二维表则有效

2).条件查询

select * from <表名> where ...;//用and/or及括号表示复杂条件

3).投影查询

选中特定的列查询

select1,列2,列3 from <表名> where ...

将列名重名名:

select1 别名1,列2 别名2,列3 别名3 from <表名> where ...

4).排序

通常按照主键大小排序,如按其他条件排序:

select * from student order by student_age;//默认从小到大,如倒序分号前加desc

可以在语句后多添加排序条件,用于前条件相同时,进行第二条件比较

例:order by student_age desc,student_id;

5).分页查询

如果数据量很大,需要分页显示:

limit <N-M> offset <M>;//SQL记录集的索引M从0开始

N-M=pagesize;//一页有几条记录

M=pagesize*(pageindex - 1);//跳过几条记录

例:
limit 3 offset 6;//一页有三条记录,查询第三页,前有两页,所以跳过2*3=6条记录

//放在select * from ...后面

如果offset超过查询的最大数量并不会报错,而是得到空的结果集

简写:

limit 15 offset 0; ->limit 15 ;

limit 15 offset 30; ->limit 30,15;

6).聚合查询

select count(*) num from student;

//查student表共有多少记录,返回一个一行一列的二维表,默认列名为count(*),取别名为num

聚合函数:

SUM(列名):计算某一列的合计值,该列必须为数值类型

AVG(列名): 计算某一列的平均值,该列必须为数值类型

MAX(列名):计算某一列的最大值

MIN(列名):计算某一列的最小值

//语句后可加where,如果条件没有匹配到任何行,怎返回0,四个函数返回NULL

分组聚合:

先将数据根据指定列进行分组,再到不同组分别去计算记录数

SELECT class_id, COUNT(*) num FROM student GROUP BY class_id;

//分组条件可以多个,如再显示不同班级的情况下再根据男女分别

且结果显示的数据只能是不同记录可以相同的值,如果是名字之类每个人都不同,则无法合并,该列返回NULL

7).多表查询(笛卡尔查询)

从多张表同时查询数据

select * from <表一> <表二>;//在表一,表二后可分别加别名使简便student s,class s;

两个表每一行分别拼接,为了拼接后的列名不重复可以通过在select后 '表名.列名 别名' 来避免重复

where条件也可通过表名.列名的方式进行限定

8).连接查询(JOIN查询)

另一种类型的多表查询,一个主表作为结果集,其他从表有选择的来连接在主表上

INNER JOIN

select ... from <表一> inner join <表二> on <条件...>; //可用whereorder by排序

例:

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;//将两表id相同的行进行连接

其他连接查询:

left outer join: 选出表一存在的数据;

right outer join: 选出表二存在的数据;

full outer join: 将两张表所有记录全部选择出来;

上述三种查询自动把对方不存在的列填充为NULL