MySQL 1-4Chpters

文章目录

CH01 : MySQL服务与MySQL登录

1.1 连接 断开 登录

net start mysql--连接
net stop mysql--断开
mysql -u root -p--登录

然后输入密码:(自己设置的)出现这样的界面就表示你已经进入MySQL啦
在这里插入图片描述

1.2 数据库信息的查看与指令

输入 \h 显示帮助信息

在这里插入图片描述

CH02 : 数据库和表的基本操作

2.1 创建和查看数据库

1.创建/删除/查看数据库

create database 数据库名称;
drop database 数据库名称;
show create database 数据库名称;

create database db_demo;//创建数据库
drop database db_demo;//删除数据库
show create database db_demo;//查看数据库

2.修改数据库信息

现在db_demo的编码方式为latin1 我们可以通过

alter database 数据库名称 default character set 编码方式 collate 编码方式_bin;

alter database db_demo default character set gbk collate gbk_bin;

先修改数据库的编码方式再查看一下数据库
在这里插入图片描述

2.2 数据类型

数据类型包括:整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制类型。

1.整数类型

数据类型字节数无符号数的取值范围有符号数的取值范围
TINYINT10~255-128~127
SMALLINT20~65 535-32 768~32 767
MEDIUMINT30~16 777 215-8 388 608~8 388 607
INT40~4 294 967 295-2 147 483 648~2 147 483 647
BIGINT50~18 446 744 073 709 551 615-9 223 372 036 854 775 808~9 223 372 036 854 775 807

2.浮点数类型和定点数类型

在这里插入图片描述

3.日期和时间类型

在这里插入图片描述

4字符串和二进制类型

数据类型类型说明
CHAR用于表示固定长度的字符串
VARCHAR用于表示可变长度的字符串
BINARY用于表示固定长度的二进制数据
VARBINARY用于表示可变长度的二进制数据
BLOB用于表示二进制大数据
TEXT用于表示大文本数据
ENUM表示枚举类型 只能存储一个枚举字符串值
SET表示字符串对象 可以有零或多个值
BIT表示位字段类型

2.3数据表的基本操作

1.创建数据表

create table 表名(
    字段名 1,数据类型[完整性约束条件],
    字段名 2,数据类型[完整性约束条件],
    …
    字段名 3,数据类型[完整性约束条件]
);

create table tb_grade(
	id int(11),
	name varchar(20),
	grade float
);

在这里插入图片描述
然后输入show tables;查看是否创建成功
在这里插入图片描述

2.查看数据表(show create table/describe)

①使用 show create table 语句查看数据表

show create table 表名;

show create table tb_grade;

在这里插入图片描述
输入show create table tb_grade\G可以使上面的更加美观
在这里插入图片描述
②使用 describe 语句查看数据表

describe 表名; //可以简写成 desc 表名;

describe tb_grade;

在这里插入图片描述

3.修改数据表

①修改表名

alter table 旧表名 rename [to] 新表名;

alter table tb_grade rename grade;

在这里插入图片描述

②修改字段名

alter table 表名 change 旧字段名 新字段名 新数据类型;

alter table grade change name username varchar(20);

在这里插入图片描述

③修改字段的数据类型

alter table 表名 modify 字段名 数据类型;

alter table grade modify id int(20);

在这里插入图片描述

④添加字段

alter table 表名 add 新字段名 数据类型
    [ 约束条件 ] [ first | after 已存在字段名 ]

alter table grade add age int(10);

在这里插入图片描述

⑤删除字段

alter table 表名 drop 字段名;

alter table grade drop age;
⑥修改字段的排列位置

alter table 表名 modify 字段名 1 数据类型 first | after 字段名2;
//“字段名1”是指修改位置的字段 “数据类型”是字段1的数据类型 “first”为可选参数 指的是将字段1修改为表的第一个字段 “after 字段名2 ”是将字段1插入到字段名2的后面

alter table grade modify username varchar(20) first;

在这里插入图片描述

4.删除数据表

drop table 表名;

drop table grade;

2.4 表的约束

约束条件说明
PRIMARY KEY主键约束 用于唯一标识对应的记录
FOREIGN KEY外键约束
NOT NULL非空约束
UNIQUE唯一性约束
DEFAULT默认值约束 用于设置字段的默认值

1.主键约束

① 单字段主键

字段名 数据类型 primary key;

create table example01(
	id int primary key,
	name varchar(20),
	grade float
);
② 多字段主键

primary key(字段名1,字段名2,…字段名n)

create table example02(
	std_id int,
	course_id int,
	grade float,
	primary key(std_id,course_id)
);

TIPS:每个数据表中最多只能有一个主键约束 定义为primary key的字段不能有重复且不能为NULL

2.非空约束

字段名 数据类型 not null;

create table example03(
	id int primary key,
	name varchar(20) not null,
	grade float
);

3.唯一约束

字段名 数据类型 unique;

create table example04(
	id int primary key,
	stu_id int unique,
	name varchar(20) not null,
);

4.默认约束

字段名 数据类型 default 默认值;

create table example05(
	id int primary key auto_increment,
	stu_id int unique,
	grade float default 0
);

2.5 设置表的字段值自动增加

字段名 数据类型 auto_increment;

create table example06(
	id int primary key auto_increment,
	stu_id int unique,
	grade float default 0
);

CH03:添加、更新与删除数据

3.1 添加数据

3.1.1 为表中所有字段添加数据

①insert 语句中指定所有字段名

在此之前 先建立一个
在这里插入图片描述

insert into 表名 (字段名1,字段名2,···) values(值1,值2,···)

insert into student(id,name,grade) values(1,'zhangsan',98.5);

insert into student(name,grade,id) values('lisi',95,2);
② insert语句中不指定字段名

insert into 表名 values( 值1, 值2,…);

insert into student values(3,'wangwu',61.5);

3.1.2 为表的指定字段添加数据

insert into 表名(字段1,字段2,…) values(值1,值2,…)

insert into student(id,name) values(4,'zhaoliu');
insert into student(id,grade) values(5,97);//不成功 提示name字段不能为空
insert into student(grade,name) values(55,'sunbin');

insert 语句的其他写法

insert into 表名 set 字段名1=值1[,字段名2=值2,…]

insert into student set id=5,name='boya',grade=99;

3.1.3 同时添加多条记录

insert into 表名[(字段名1,字段名2,…)]
  values(值1,值2,…),(值1,值2,…),
  …
  (值1,值2);

insert into student values
	(6,'lilei',99),
	(7,'hanmeimei',100),
	(8,'poly',40.5);
insert into student (id,name) values(9,'liubei'),(10,'guanyu'),(11,'zhangfei');

3.2 更新数据

update 表名 set 字段名1=值1[,字段名2=值2,…] [where 条件表达式]

update更新 (部分/全部)数据

--部分
update student set name='caocao',grade=50 where id=1;--修改id=1的记录
update student set grade=100 where id<4;--将id<4的记录的grade值更新为100
--全部
update student set grade=80;--所有记录的grade都更新为80

3.3 删除数据

delete from 表名 [where 条件表达式]

delete 删除(部分 / 全部)数据

--部分
delete from student where id=11;
delete from student where id=11;//再次删除 显示Empty set
delete from student where id>5;//删除 id>5 的记录
--全部
delete from student;//删除全部数据

多学一招 使用关键词truncate删除表中数据

truncate [table] 表名

truncate table student;

Tips:truncate & delete

(1)delete是DML语句,truncate是DDL语句
(2)delete后面可以跟where子句,通过指定 where子句中的条件表达式只删除满足条件的部分记录,而truncate只能删除表中所有记录。
(3)使用truncate语句删除表中数据之后,再次向表中添加记录时,自动增加字段的默认初始值重新从1开始,而使用delete语句则继续从删除时该字段的最大值加1

CH04:单表查询

4.1 简单查询

4.1.1 select语句

select [distinct] * | 字段名 1 ,字段名 2 ,字段名 3 ,…
    from 表名
    [where条件表达式1]
    [group by 字段名 [having 条件表达式2]]
    [order by 字段名 [asc|desc]]
    [limit [offset] 记录数]

(1)select[distinct] * | 字段名1,字段名2,字段名3,…

(*)星号通配符表示表中所有字段与“字段名1,字段名2,字段名3,…”为互斥关系,任选其一。“distinct”可选,用于剔除查询结果中的重复数据。

(2)from 表名

表示从指定的表中查询数据

(3)where 条件表达式1

可选参数,用于指定查询条件

(4)group by 字段名 [having 条件表达式2]

group by是可选参数,用于将查询结果按照指定字段进行分组, having 也是可选参数,用于对分组后的结果进行过滤

(5)order by 字段名 [asc|desc]

order by 是可选参数 用于将查询结果按照指定字段进行排序,排序方式有asc和desc控制,asc升序,desc降序,若不指定,则默认升序排列

(6)limit [offset] 记录数

limit 可选参数 用于限制查询结果的数量,第一个参数offset表示偏移量,如果偏移量为0,则从查询结果的第一条开始,偏移量为1则从查询结果的第二条记录开始 offset可选 默认0,第二个参数“记录数”表示返回查询记录的条数

4.1.2 查询(所有/指定)字段

//查询所有字段
select 字段名1,字段名2,…from 表名; //字段名之间可以互相交换
select * from 表名; //使用(*)通配符
//查询指定字段
select 字段名1,字段名2,…from 表名;//此处的字段名为指定的字段名

--查询所有字段
select id,name,grade from student;
select * from student;
--查询指定字段
select name,grade from student;

4.2 按条件查询

4.2.1 带关系运算符的查询

select 字段名1,字段名2, … from 表名 where 条件表达式;

select id, name from student where id=4;//查询id=4的同学的姓名
select id, grade from student where id=4;//查询id=4的同学的成绩
select name grade from student where grade>80;//查询grade>80的同学的姓名

4.2.2 带in关键词的查询

select * | 字段名1,字段名2,… from 表名 where 字段名 [not] in (元素1,元素2,…)

select id, grade, name from student where id in (1,2,3);//查询id in 1,2,3 中
select id, grade, name from student where id not in (1,2,3);//查询id not in 1,2,3 中

4.2.3 带between and关键词的查询

select * | 字段名1,字段名2,… from 表名 where 字段名 [not] between 值1 and 值2;

select id, name from student where id between 2 and 5;//查询id 2~5(左闭右闭)
select id, name from student where id not between 2 and 5;//与上面相反

4.2.4 空值查询

select * | 字段名1,字段名2,… from 表名 where 字段名 is [not] null

select id,name,grade from student where id is null;
select id,name,grade from student where id is not null;

4.2.5 带distinct关键字查询(可以去重)

select distinct 字段名 from 表名;

select distinct id from student;

distinct 关键字作用于多个字段

select distinct 字段名1,字段名2,… from 表名;

select distinct name, grade from student;
--只会显示name 和 grade 同时不相同的记录 有一个相同照样显示。

4.2.6 带like关键字的查询(’%’ , ‘_’ 通配符)

select * | {字段名1,字段名2,…} from 表名 where 字段名 [ not ] like ‘匹配字符串’;
//可以是(%)和(_)统配字符串

1.百分号%通配符

通配符查询
%eate,apple
c%cut,cat,count
s%gsing,song,saying
%e%ex,apple,student

2.下划线_通配符

通配符查询
a_eate,ave
ca_cat,cab
s_ _gsong,sing

Tips:如果要匹配字符串中的百分号和下划线,则在前加上‘\’进行转义

select name from student where name like "s%";
select name from student where name like "w__ong";
select name from student where name not like "s%";

4.2.7 带 and / or 关键字的多条件查询

select * | {字段名1,字段名2,…} from 表名 where 条件表达式1 and 条件表达式2 [… and 条件表达式n ];
select * | {字段名1,字段名2,…} from 表名 where 条件表达式1 or 条件表达式2 [… or条件表达式n ];

select id, name, grade from student where id<5 and grade>60;
select id, name, grade from student where id in (1,2,3,4,5) and name like '%g' and grade>60;
select id, name, grade from student where name like '_____g' or grade>60;

--or 和 and 一起使用
select name,grade,gender from student where gender="女" or gender="男" and grade=100;
-- and的优先级大于or的优先级 先执行and操作 再执行or操作

4.3 高级查询

4.3.1 聚合函数

函数名称作用
count()返回某列的行数
sum()返回某列值的和
avg()返回某列的平均值
max()返回某列的最大值
min()返回某列的最小值

//count()
select count(*) from 表名;
//sum()
select sum(字段名) from 表名;
//avg()
select avg(字段名) from 表名;
//max()
select max(字段名) from 表名;
//min()
select min(字段名) from 表名;

select count(*) from student;
select sum(grade) from student;
select avg(grade) from student;
select max(grade) from student;
select min(grade) from student;

4.3.2 对查询结果排序

select 字段名1, 字段名2,… from 表名 order by 字段名1 [asc|desc] , 字段名2 [asc|desc]…

select * from student grade asc;//grade 按照升序排列
select * from student gender asc,grade desc;//先按照gender升序 gender相同的 按照grade降序排列 注意NULL默认为最小值

4.3.3 分组查询

select 字段名1,字段名2,… from 表名 group by 字段名1,字段名2,…[having 条件表达式];

1. 单独使用group by 分组

select * from student group by gender;

select * from student group by gender;
--每个分组只显示一条记录 意义并不大 group by一般与聚合函数一起使用

2.group by 与 聚合函数一起使用

select count(*),gender from student group by gender;--返回gender每个的个数
--	count(*)  | gender
--	----------------
--		1	  | NULL
-- 	 	2     | 女
--  	5     | 男

3. group by 和 having 关键字一起使用

select sum(grade), gender from student group by gender having sum(grade)<300;
--sum(grade)	| gender
------------------------
--	90			| NULL
--	154			| 女

4.3.4 使用 limit 限制查询结果的个数

select 字段名1,字段名2,… from 表名 limit [offset,] 记录数

select * from student limit 4;--查询student表中的前四条记录
select * from student order by grade desc limit 4,10;
--将student表中的记录按照grade降序排序 显示第5位~第5+10位的记录

4.3.5 常用函数

函数作用
abs(x)return a>0?a:-a
mod(x,y)return x%y
sign(x)符号 return 1,0,-1
length(str)return len(str)
concat(a1,a2…)return a1+a2+…
md5(str)return md5(str)
encode(str,pwd_str)使用pwd作为密码加密str
decode(str,pwd_str)使用pwd作为密码解密str

4.4 为表和字段取别名

4.4.1 为表取别名

select * from 表名 [as] 别名;

select * from student as s where s.gender = "女";
--student的别名为s s.gender是指student表上的gender字段

4.4.2 为字段取别名

select 字段名 [as] 别名 [,字段名, [as] 别名, …] from 表名;

select name as stu_name,gender stu_gender from student;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值