前言:mysql
我是一只至关白的小白,这是个人第一篇博客,记录学习的点滴.当中有些许我在课堂上记录的范例,若是发现疏漏错误的地方请指正,谢谢各位大神sql
连接数据库数据库
mysql -uroot -p
mysql -uroot -p你的密码 # 可直接追加明文密码(不安全,不推荐)
复制代码
退出数据库安全
quit/exit/ctrl + d(快捷键)
复制代码
显示当前数据库版本bash
select version();
复制代码
显示当前时间服务器
select now();
复制代码
查看当前使用的数据库函数
select database();
复制代码
查看全部数据库学习
show databases;
复制代码
建立数据库 create database 数据库名 charset=utf8; (MySQL默认建立编码为latin1,为方便转码需在建立数据库时指定编码 charset=utf8 )ui
create database xxxx charset=utf8;
复制代码
查看建立数据库的语句 show create database 数据库名编码
show create database xxxx;
复制代码
使用数据库 use 数据库的名字 可以使用该命令直接跳转数据库
use xxxx;
复制代码
从sql文件中导入数据 source 具体地址/areas.sql;
source xxx.sql;
复制代码
删除数据库 drop database 数据库名; 注:若数据库名称中包含符号"-",则删除时需在数据库名称上包裹``符号(键盘Tab键上方)
drop database `xxxx-xxxx`;
drop database xxxx;
复制代码
查看当前数据库中全部表
show tables;
复制代码
数据类型 数据类型是指在建立表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来, 使用数据类型的原则是:够用就行,尽可能使用取值范围小的,而不用大的,这样能够更多的节省存储空间。
经常使用数据类型以下:
整数:int,bit 小数:decimal 字符串:varchar,char 日期时间: date, time, datetime 枚举类型(enum)
数据类型说明:
decimal表示浮点数,如 decimal(5, 2) 表示共存5位数,小数占 2 位. char表示固定长度的字符串,如char(3),若是填充'ab'时会补一个空格为'ab ',3表示字符数 varchar表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab',3表示字符数 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,而后在表中存储这个文件的保存路径. 字符串 text 表示存储大文本,当字符大于 4000 时推荐使用, 好比技术博客.
数据约束 约束是指数据在数据类型限定的基础上额外增长的要求.
常见的约束以下:
主键 primary key: 物理上存储的顺序. MySQL 建议全部表的主键字段都叫 id, 类型为 int unsigned(无符号整形,即为正数),建立主键时一般加上 auto_increment 表示自动增加. 非空 not null: 此字段不容许填写空值. 唯一 unique: 此字段的值不容许重复. 默认 default: 当不填写字段对应的值会使用默认值,若是填写时以填写为准. 外键 foreign key: 对关系字段进行约束, 当为关系字段填写值时, 会到关联的表中查询此值是否存在, 若是存在则填写成功, 若是不存在则填写失败并抛出异常.
建立表 create table 数据表名字 (字段 类型 约束,字段 类型 约束)
create table xxxx(xxxx varchar(30) not null,xxxx int unsigned);
复制代码
查看表结构 desc 数据表的名字;
desc xxxx;
复制代码
范例:建立 students 表(id、name、age、high、gender、cls_id、is_delete)
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0, tinyint 表示字节大小为 -128~127 或 0~255
height decimal(5,2),
gender enum('男','女','中性','保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0);
复制代码
查看表的建立语句(可查看主键、引擎InnoDB等、自动增加变量、编码等信息) show create table 表名字;
show create table students;
复制代码
修改表-添加字段 alter table 表名 add 列名 类型;
alter table students add birthday datetime;
复制代码
修改表-修改字段:不可重命名,仅修改类型及约束 alter table 表名 modify 列名 类型及约束;
alter table students modify birthday date not null;
复制代码
修改表-修改字段:可重命名,表名、类型、约束都可修改 alter table 表名 change 原名 新名 类型及约束;
alter table students change birthday hobby varchar(30) default "你猜";
复制代码
修改表-删除字段 alter table 表名 drop 列名;
alter table students drop hobby;
复制代码
删除表 drop table 表名;
drop table xxxx;
复制代码
删除数据库 drop database 数据库;
drop database xxxx;
复制代码
curd 的解释: 建立 Create , 更新 Update , 读取 Retrieve , 删除 Delete
增长
模拟样表(仅供理解)
| Field | Type | Null | Key | Default | Extra |
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| age | int(10) unsigned | YES | | NULL | |
| high | decimal(3,2) | YES | | NULL | |
| gender | enum('男','女','保密') | YES | | 保密 | |
| cls_id | int(11) | YES | | NULL | |
复制代码
全列插入 insert [into] 表名(字段...) values(...) 主键字段 能够用 0 null default 来占位
insert into students values(0,'吴彦祖','25','1.85','男','66'); -- 此插入需保证插入值数与字段数一致
insert into students values(null,'吴彦祖','25','1.85','男','66');
insert into students values(default,'吴彦祖','25','1.85','男','66');
复制代码
枚举中的下标从 1 开始 1->'男' 2->'女' ....
insert into students values(default,'吴彦祖','25','1.85',1,'66');
复制代码
部分插入
insert into students(name,gender) values("蔡徐坤",2);
复制代码
一次插入多条数据
insert into students(name) values("吴亦凡"),("张艺兴");
insert into students values(default,'吴彦祖','25','1.85','男','66'),
(default,'蔡徐坤','18','2.50',2,'99');
复制代码
修改
update 表名 set 列1=值1,列2=值2... where 条件; 所有修改
update students set name = 'CXK';
复制代码
按条件修改
update students set name = "CXK" where id = 3;
复制代码
按条件修改多个值
update students set name = 'CXK',age = 20 where id = 2;
复制代码
查询
查询全部列 select * from 表名;
select * from students;
复制代码
定条件查询 select * from students where id < 6;
select * from students where name = "CXK";
复制代码
查询指定列 select 列1,列2,... from 表名;
select name,age from students;
复制代码
可使用as为列或表指定别名 select 字段[as 别名] , 字段[as 别名] from 数据表;
select name as 姓名,age as 年龄 from students;
复制代码
字段的顺序
select age,name from students;
复制代码
删除
物理删除 delete from 表名 where 条件 delete from students -> 整个数据表中的全部数据所有删除
delete from students where id = 3;
复制代码
逻辑删除 用一个字段来表示 这条信息是否已经不能再使用了 给students表添加一个 is_delete 字段 bit 类型 alter table 表名 add 字段 类型 default 默认值;
alter table students add is_delete bit default 0;
update students set is_delete = 1 where id = 2;
复制代码
查询全部字段 select * from 表名;
select * from students;
复制代码
查询指定字段 select 列1,列2,... from 表名;
select name,age from students;
复制代码
使用 as 给字段起别名 select 字段 as 名字.... from 表名;
select name as 姓名 from students;
复制代码
select 表名.字段 .... from 表名;
select students.name from students;
复制代码
能够经过 as 给表起别名 select 别名.字段 .... from 表名 as 别名;
select s.name from students as s;
复制代码
消除重复行(查性别) distinct 字段
select distinct gender from students;
复制代码
条件查询 比较运算符
= < <= != = <> select .... from 表名 where .....
查询年纪大于18岁的信息
select * from students where age > 18;
复制代码
一样能够查询,并输出对应信息(如下触类旁通)
select id,name,gender from students where age > 18;
复制代码
< 查询年纪小于18岁的信息
select * from students where age < 18;
复制代码
= <= 查询小于或者等于18岁的信息
select * from students where age <= 18;
复制代码
= 查询年龄为18岁的全部学生的名字
select * from students where age = 18;
复制代码
!= 或者 <> 查询年龄不为18岁的全部学生的名字
select * from students where age != 18;
select * from students where age <> 18;
复制代码
逻辑运算符
and 18和28之间的全部学生信息
select * from students where age > 18 and age < 28;
复制代码
18岁以上的女性
select * from students where age > 18 and gender = '女';
复制代码
or 18以上或者身高高过180(包含)以上
select * from students where age > 18 or height >= 180;
复制代码
not 不在 18岁以上的女性 这个范围内的信息 错误:select * from students where not age > 18 and gender = '女';
select * from students where not (age > 18 and gender = '女');
复制代码
模糊查询(where name like 要查询的数据) like % 替换任意个 _ 替换1个 查询姓名中 以 "小" 开始的名字
select name from students where name like '小%';
复制代码
查询姓名中 有 "小" 全部的名字
select name from students where name like '%小%';
复制代码
查询有2个字的名字
select name from students where name like '__';
复制代码
查询有3个字的名字
select name from students where name like '___';
复制代码
查询至少有2个字的名字
select name from students where name like '__%';
复制代码
rlike 正则 查询以 周开始、伦结尾的姓名
select name from students where name rlike '^周.伦$*'
复制代码
范围查询 in (1, 3, 8)表示在一个非连续的范围内 查询 年龄为18或34的姓名
select * from students where age = 18 or age = 34;
select * from students where age in (18,34);
复制代码
not in 不在非连续的范围以内 年龄不是 18或34岁的信息
select * from students where age not in (18,34)
复制代码
between ... and ...表示在一个连续的范围内 查询 年龄在18到34之间的的信息 包含两端从小到大
select * from students where age between 18 and 34;
复制代码
not between ... and ...表示不在一个连续的范围内 查询 年龄不在18到34之间的的信息
select * from students where age not between 18 and 34;
复制代码
空判断 判空is null 查询身高为空的信息
select * from students where height is null;
复制代码
判非空is not null
select * from students where height is not null;
复制代码
order by 字段 默认 asc (升序) asc 从小到大排列,即升序 desc 从大到小排序,即降序
查询年龄在18到34岁之间的男性,按照年龄从小到大到排序
select * from students where age > 18 and age < 34
and gender = '男' order by age asc;
select * from students where (age between 18 and 34)
and gender = '男' order by age;
复制代码
查询年龄在18到34岁之间的女性,身高从高到矮排序
select * from students where (age between 18 and 34)
and gender = '女' order by height desc;
复制代码
order by 多个字段 查询年龄在18到34岁之间的女性,身高从高到矮排序, 若是身高相同的状况下按照年龄从小到大排序
select * from students where (age between 18 and 34)
and gender = '女' order by height desc,age asc;
复制代码
若是年龄也相同那么按照id从大到小排序
select * from students where (age between 18 and 34)
and gender = '女' order by height desc,age asc,id desc;
复制代码
总数 count 查询男性有多少人
select count(*) from students where gender = '男';
复制代码
最大值 max 查询最大的年龄
select max(age) from students;
复制代码
查询女性的最高 身高
select max(height) from students where gender ='女';
复制代码
最小值 min
select min(height) from students where gender = '男';
复制代码
求和 sum 计算全部人的年龄总和
select sum(age) from students;
复制代码
平均值 avg 计算平均年龄
select avg(age) from students;
复制代码
计算平均年龄 sum(age)/count(*)
select sum(age)/count(*) from students;
复制代码
四舍五入 round(保留前的结果 , 1) 保留1位小数 拓展:小数后默认保留六位,若须要精确值可将值扩大10的次方倍数再进行存储 如:3.1415 * 10^4 -> 存储 计算全部人的平均年龄,保留2位小数
select round(avg(age),2) from students;
复制代码
计算男性的平均身高 保留2位小数
select round(avg(height),2) from students where gender = '男';
复制代码
group by select 分组字段 from 表名 group by 分组字段; 按照性别分组,查询全部的性别
select gender from students group by gender;
复制代码
计算每种性别中的人数
select gender,count(*) from students group by gender;
复制代码
计算男性的人数
select gender,count(*) from students where gender = '男' group by gender;
复制代码
查询每组性别的平均年龄
select gender,avg(age) from students group by gender;
复制代码
group_concat(...) 查询同种性别中的姓名 返回一组的姓名
select gender,group_concat(name) from students group by gender;
复制代码
查询男性的姓名、年龄、id '_' 只为方便阅读
select gender,group_concat(name,'_',age,'_',id) from students
where gender = '男' group by gender;
复制代码
having(注意having和group by 连用 having后一般也要跟 聚合函数) 查询平均年龄超过30岁的性别,以及姓名
select gender ,avg(age), group_concat(name) from students
group by gender having avg(age) > 30;
复制代码
查询每种性别中的人数多于2个的信息
select gender,count(*) from students group by gender
having count(*) > 2;
复制代码
limit start, count limit 放在最后面(注意)
起始位置 = (第N页-1)*每一页的个数
限制查询出来的数据个数 查询前5个数据
select * from students limit 0,5;
复制代码
每页显示2个,第1个页面
select * from students limit 0,2;
复制代码
每页显示2个,第2个页面
select * from students limit 2,2;
复制代码
每页显示2个,第3个页面
select * from students limit 4,2;
复制代码
每页显示2个,第4个页面
select * from students limit 6,2;
复制代码
每页显示2个,显示第6页的信息, 按照年龄从小到大排序
select * from students order by age asc limit 10,2;
复制代码
inner join ... on select ... from 表A inner join 表B on 条件; 查询 有可以对应班级的学生以及班级信息
select * from students inner join classes
on students.cls_id = classes.id;
select * from students inner join classes
on students.cls_id = classes.id where students.gender ='女';
复制代码
按照要求显示姓名、班级
select students.name,classes.name from students inner join classes
on students.cls_id = classes.id;
复制代码
给数据表起名字
select s.name,c.name from students as s
inner join classes as c on s.cls_id = c.id;
复制代码
查询 有可以对应班级的学生以及班级信息,显示学生的全部信息 students.*,只显示班级名称 classes.name.
select students.* ,classes.name from students inner join classes
on students.cls_id = classes.id;
复制代码
在以上的查询中,将班级名显示在第1列
select classes.name ,students.* from students inner join classes
on students.cls_id = classes.id;
复制代码
查询 有可以对应班级的学生以及班级信息, 按照班级名进行排序
select classes.name ,students.* from students inner join classes
on students.cls_id = classes.id order by classes.name;
复制代码
当时同一个班级的时候,按照学生的id进行从小到大排序
select classes.name ,students.* from students inner join classes
on students.cls_id = classes.id order by classes.name asc ,students.id asc;
复制代码
left join 对于右表不存在的数据使用 null 填充
查询每位学生对应的班级信息
select * from students left join classes on
students.cls_id = classes.id;
查询没有对应班级信息的学生
select * from students left join classes on
students.cls_id = classes.id where classes.name is null;
select * from students left join classes on
students.cls_id = classes.id having classes.name is null;
right join on
将数据表名字互换位置,用left join完成
select * from students right join classes on
classes.id = students.cls_id;
复制代码
查询出高于平均身高的信息(height)
获得平均身高
select avg(height) from students;
复制代码
大于平均 身高
select * from students where height > 172.076923;
复制代码
select * from students where
height > (select avg(height) from students);
复制代码