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).投影查询
选中特定的列查询
select 列1,列2,列3 from <表名> where ...
将列名重名名:
select 列1 别名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 <条件...>; //可用where和order 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