本文完整链接:https://note.youdao.com/web/#/file/5DB568631687422E8ED27E1D94EBFD8F/note/9614E2C00ED6480CB308DB101B40D395/
1介绍
1.MySQL是开源免费的关系型数据库
关系型数据库:适合存放有规律的数据
2.非关系数据库:存放无规律的数据
2命令
MySQL命令
1.进入数据库命令
mysql -h localhost -u root -p回车
简要写法: mysql -u root
2.查看MySQL内的信息
\s
3.更改MySQL默认字符集为utf8
方式一:一次性修改
set names utf8;设置为utf8,但是下次又恢复了
方式二:永久性修改
1.修改客户端的字符集
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
2.修改服务器端mysqld的字符集
[mysqld]
port=3306
character_set_server = utf8
3.重启服务器,重新进入数据库
3.数据库操作命令
drop删除数据库和表,delete只删除数据
4.查看所有的数据库
show databases;
5.创建数据库
create database 数据库名;
6.数据库存在则不创建,不存在则创建(不会报错)
create database if not exists 数据库名;
7.删除数据库
drop database 数据库名;
8.删除指定的数据库,若存在则删除,不存在则忽略(且不报错)
drop database if exists 数据库名;
9.查看创建数据库语句
show create database 数据库名;
或者show create database 数据库名\G;
\G为格式化输出
10.进入数据库
use 数据库名;
11.查看当前所在数据库
select database();
4.类型
4.1数值类型
范围 用途
1.TinyInt -128-127极小范围 一般创年龄
2.TinyInt UNSIGNED 表示0~255 创年龄
UNSIGNED 0-255 表示无符号
3.INt 一般大小
4.Float(M,D) M表示数的位数,D代表小数的位数,最大9999.99
4.2枚举类型
1.Enum表是所有可选的 拿来创性别
4.3关键字
primary key主键
auto_increment自增
4.4字符串类型
varchar(n) 可变长度
char(n) 固定长度
text 可变长度,用于新闻,公告
LongText 小说
5.表的操作命令
包括8.9.10
1.创表
create table if not exists 表名(字段名);
2.显示创表语句
show create table 表名\G;
3.查看表结构
desc 表名;
4.删除数据表
drop table if exists 表名;
5.查看所有表
show tables;
6.创建user表
create table user(
id int primary key auto_increment,
age tinyint unsigned,//tinyint unsigned连着用,表示范围为0-255
name varchar(20)
);
5.1添加数据
单条数据的添加
insert into 表名(字段1,字段2,字段3...) value(值1,值2,值3)
方式一:不设置id,则自动添加Id (推荐使用)
1.insert into user(name,age,sex) value('zs',20,'m');
方式二:若不确定id的值,则可以使用null代替,则会自动递增
insert into user value(null,'zs',19,'男');
方式三:添加部分字段
insert into user(name,age) value('lisi',20);
添加多条数据
语法:insert into 表名 values(值1,值2),(值1,值2);
insert into user values(null,'zs',19,'m'),(null,'lisi',20,'w');
7、MySQL关键词
NOT NULL: 不允许为空
UNSIGNED 无符号
primary key 主键
auto_increment 自增
8.查询数据
select 字段|* from 表名 【where限制条件】【group by分组】【order by 排序】【limit限制条件】
limit限制条件
语法:limit num限制输出多少条数据;
常用于分页:
limit start,num: start代表起始索引值,num代表每页显示的个数
注意:star+1=id;
不在20-30之间
not between 20 and 30
一、单条数据的添加
insert into 表名(字段1,字段2) value(值1,值2);
插入单条数据(不设置id,则自动添加id)
insert into user(name,age,sex) value (‘张三’,20,‘m’);
插入单条数据(指定id的值)
insert into user(id,name,age,sex) value(1,‘张三’,20,‘m’);
简写的方法添加值
insert into user value(1,‘张三’,20,‘m’)
若不确定id的值,使用null代替,则会自动自增 (推荐使用)
insert into user(id,name,age,sex) value(null,‘张三’,20,‘m’);
二、多条数据的添加
insert into user values(null,‘zs’,20,‘m’),
(null,‘lisi’,20,‘m’);
三、数据的查询操作
select 字段|* from 表名 [where限制条件] [group by 分组] [order by 排序] [limit限制条件]
查询从user表内查询出所有的数据
select * from user;
查询指定字段的数据
select name,age from user;
查询id=2的信息
select * from user where id=2;
查询张三的信息
select * from user where name=‘张三’;
查询大于30岁的 信息
select * from user where age>30;
查询小于20岁的信息
select * from user where age<20;
查询20-30岁的信息
法一:多个条件用and链接
select * from user where age<=30 and age>=20;
法二:between...and...
select * from user where age between 20 and 30;
查询<20或则>30的信息
法一:or
select * from user where age<20 or age>30;
法二:not between …and…
select * from user where age not between 20 and 30;
查询id为1,3,5的信息
select * from user where id in(1,3,5);
四、聚合函数
count()、max()、min()、avg()、sum();
统计总人数
select count(*) from user;
统计user中最高成绩
select max(score) from user;
最低成绩
select min(score) from user;
所有人总分
select sum(score) from user;
查询班级名
select classid from user group by classid;
查询所有班总分
select classid,sum(score) from user group by classid;
所有班级平均分
select classid,avg(score) from user group by classid;
五、oreder by排序
,ASC升序(默认),desc降序
按照id升序排列
select * from user order score by asc;
查询所有人成绩,降序排
select name,score from user order score by desc;
查询男生成绩,降序;
select * from user where sex=‘m’ order score by desc;
查询所有班级平均分,降序排列
select classid,avg(score) from user group by classid order by score desc;
六、limit限制条数
limit num; num为数字,代表限制输出的条数
limit m,n m表示从多少条开始输出,n代表输出的条数
查询成绩前三名的成绩
select score from user order by score desc limit 3;
查询出stu表中成绩最高的三个男生的名字和班级以及成绩
select score,name,classid from user where sex=‘m’ order by score desc limit 3;
6.1limit分页查询 limit m,n 代表m为起始数据,n为每页显示的条数
select * from user limit 0,3;
id 1
id 2
id 3
select * from user limit 3,3;
id 4
id 5
id 6
查询出stu表中所有男生的成绩并降序排列,每三条数据放在同一页
//第一页
select score from user where sex=‘m’ order by score desc limit 0,3;
//第二页
select score from user where sex=‘m’ order by score desc limit 3,3;
分页公式 (pagenum-1)*每页显示的条数
七、concat
将多个字段联合输出
1.将名字年龄按照name:age输出
select concat(name,':',age) from student;
八、as
起别名
可以省略,中间用空格隔开
1.起别名为mes
select concat(name,':',age) as mes from student;
2.起别名为mes,省略as,用空格代替
select concat(name,':',age) mes from student;
九、查询时做简单运算
1.查询五年后和现在的年龄
select age,age+5 from user;
十、distinct
去掉重复的值
1.查询有哪些学校
select distinct classid from student;
十一、like
模糊查询,用于淘宝之类搜索
_任意一个
字符
%任意个字符
1.查询出姓杨的
select * from user where name like '杨%'
2.查询有旭的
select * from user where name like '%旭%'
9.修改数据
Update 表名 set字段 [where条件]
9.1修改单个数据
1.改性别为w
update user set sex='w' where name='张三';
9.2修改多个数据
多个字段用,号隔开
update user set age=18,sex='w' where id=4;
10.删除数据
delete
from 表名 [where条件]
注意
:id不会变,还是再占用
delete from user where id=4;
11.表结构的操作
alter table 表名
11.1、添加字段
alter table 表名 add 字段名 字段类型 【after 字段名|first】
1.age后面增加phone字段
alter table t1 add phone int(11) after age;
2.name后面增加sex
alter table t1 add sex enmu('男','女') after name;
3.再最前面加aa
alter table t1 add aa varchar(20) first;
11.2修改字段
alter table 表名 modify 字段名 类型;
1.修改sex并且默认保密
alter table t1 modify sex enum('男','女','保密') default '保密';
11.3删除字段
alter table 表名 drop字段名
drop
,除了不能删除数据,删除表结构、删除数据库
1.删除aa字段
alter table t1 drop aa;
12特殊的类型限制
12.1float
- 若给出在范围内的整数,则自动在后面补充零
- 若给出的小数超过位数则四舍五入
- 若给出的值超过范围,则按照最大的值显示
12.2tinyint
范围:-128~127
超过整型的-128~127则只能按照最大的显示
12.3无符号设置
unsigned
12.4枚举类型
给枚举类型添加值时,必须要符合枚举类型的规范
12.5not null设置
不能为空
12.6设置默认值 default
12.7唯一unique
13清空所有数据
truncate 表名;
清空的包括id,数据
truncate t1;
14.插入大数据
1.创建表不要那么严格
2.insert into stu(name,age) select name,age from stu;
15.内连接
也叫等值连接,inner join产生同时符合A和B的一组数据(取交集)
1.用等值连接查询A,B相等的id的信息
select A.id,A.name,B.id,B.name from A,B where A.id=B.id;
2.用内连接查询A,Bid相等的信息
select * from A inner join B on A.id=B.id
16.左连接
- left join,左连接从左表(A)产生一套完整的记录,与匹配的记录(右表(B)) .如果没有匹配,右侧将包含null。
- 右连接同理
17.多表查询
多表查询订单
select g.name,g.price,o.name,o.phone,o.address from orders o,goods g,rel r where rel.oid=o.id and rel.gid=g.id;
ge) select name,age from stu;
# 15.内连接
也叫等值连接,inner join产生同时符合A和B的一组数据(取交集)
```mysql
1.用等值连接查询A,B相等的id的信息
select A.id,A.name,B.id,B.name from A,B where A.id=B.id;
2.用内连接查询A,Bid相等的信息
select * from A inner join B on A.id=B.id
16.左连接
- left join,左连接从左表(A)产生一套完整的记录,与匹配的记录(右表(B)) .如果没有匹配,右侧将包含null。
- 右连接同理
[外链图片转存中…(img-niWRQUUv-1630994338536)]
17.多表查询
多表查询订单
select g.name,g.price,o.name,o.phone,o.address from orders o,goods g,rel r where rel.oid=o.id and rel.gid=g.id;