简单基础操作mysql
查看创建数据库的语句:
show create database 数据库名;
使用数据库:
use 数据库的名字;
12.3.2 删除数据库的命令 ★★★★★
删除数据库:
drop database 数据库名;
12.4 创建表
查看当前数据库中的所有数据表:
show tables;
12.4.1 创建表的命令 ★★★★★
创建表
-
int unsigned 无符号整形
-
auto_increment 表示自动增长
-
not null 表示不能为空
-
primary key 表示主键 数据库主键,指的是一个列或多列的组合,
-
其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。
-
主键主要是用于其他表的外键关联,以及本记录的修改与删除。
-
default 默认值
-
create table 数据表名字 (字段 类型 约束[, 字段 类型 约束]);
创建数据表:
create table 数据表名(
id int unsigned primary key not null auto_increment,
name varchar(20) not null
);
例如:创建班级表,要求:班号、班级名称两个字段;
create table classes(
id int unsigned primary key auto_increment not null,
name varchar(20) not null
);
例如:创建学生表,要求:学号、姓名、年龄、身高、性别、班级号六个字段;
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) not null,
age int unsigned,
high decimal(5,2),
gender enum("男性","女性","中性","保密") default "保密",
cls_id int unsigned
);
查看刚刚所创建的表:
show create table 表名字;
12.4.2 删除表的命令 ★★★★★
删除表:
drop table 表名;
# 例如:
drop table classes;
drop table students;
12.4.3 修改表的命令 ★★★★★
修改表-添加字段:
alter table 表名 add 列名 类型;
实例:
# 添加chongwu(宠物)字段
alter table classes add chongwu varchar(20) default"蛇";
修改表-修改字段:不重命名版
alter table 表名 modify 列名 类型及约束;
实例:
alter table classes modify mascot varchar(30) default"葫芦娃";
修改表-修改字段:重命名版
alter table 表名 change 原名 新名 类型及约束;
实例:
alter table classes change chongwu mascot varchar(20) default"法拉利";
修改表-删除字段:
alter table 表名 drop 列名;
实例:
alter table classes drop mascot;
修改表-数据表重命名
alter table 原表名 rename to 新表明;
实例:
alter table classes rename to class;
alter table class rename to classes;
update 表名 set 要修改的字段=‘新值‘ where 条件
例如:update people set name=‘小黑‘ where id=1;
-- 1. 全列插入:值的顺序与表结构字段的顺序完全一一对应 insert into 表名 values (...) 例: insert into students values(0, ‘xx‘, default, default, ‘男‘); -- 2. 部分列插入:值的顺序与给出的列顺序对应 insert into 表名 (列1,...) values(值1,...) 例: insert into students(name, age) values(‘王二小‘, 15); -- 3. 全列多行插入 insert into 表名 values(...),(...)...; 例: insert into students values(0, ‘张飞‘, 55, 1.75, ‘男‘),(0, ‘关羽‘, 58, 1.85, ‘男‘); -- 4. 部分列多行插入 insert into 表名(列1,...) values(值1,...),(值1,...)...; 例: insert into students(name, height) values(‘刘备‘, 1.75),(‘曹操‘, 1.6);
关系型数据库: MYSQL、 Oracle 、MS SQL server、sqlite3
-
MySQL(免费)、Oracle(商业版) 属于同一个公司(Oracle)
-
MS SQL server 针对Windows平台,属于微软
-
Sqlite3 用在 嵌入式设备中, 如 手机、平板等
关系型数据库所用的语言都是 SQL语言
非关系型数据库
MongoDB
Redis
库操作
-
create database school charset=utf8; # 创建数据库school, 指定编码方式为utf8, 防止中文乱码
-
查看数据库
show databases;
-
删除数据库
drop database 库名;
-
入库
use 库名;
表操作
建表
ID | name | age | gender | is_vip |
---|---|---|---|---|
1 | 小红 | 23 | 女 | true |
2 | 小绿 | 20 | 男 | false |
3 | 小黑 | 22 | 男 | true |
create table users(
# 字段名 字段类型 字段属性
id int unsigned primary key auto_increment,
name varchar(10) not null,
age int unsigned,
gender enum("男", "女") default "男",
is_vip bool default false
)charset=utf8;
查看当前库的所有表
show tables;
查看表结构
desc students; # 查看表students的结构
删除表
drop table 表名;
字段类型
-
数字
-
整数
-
int
: 整数, 0 -1 1 -
int unsigned
:无符号整数, 0 1 2 3 4 -
bit
: 只能存0
或1
, 代表真或假 -
bool
,实际是tinyint(1)
, 插入true
, 实际就是1
, 插入false
, 实际就是0
-
-
小数
-
float
: 一般的浮点数 -
decimal(n,m)
: 存金钱有关的数字, 总共n位数字, m位小数, 正或负都可以
-
-
-
字符串
-
varchar(n)
: 创建大小为n的变长字符串, 如varchar(10)
, 只存"hello"
, 剩余空间可以被别人使用 -
char(10)
: 创建大小为n定长字符串,如char(10)
, 只存"hello"
, 剩余空间用空格补够10个长度
-
-
枚举
-
enum(A, B)
:在列举的所有情况中,选择一个, 如enum("男", "女")
-
-
时间
-
date
:年月日, 如2020-8-13
-
time
: 时分秒, 如13:54:00
-
datetime
: 年月日 时分秒, 如20202-8-13 13:55:30
-
字段属性
-
主键: 唯一标识一条记录,
primary key
-
自增:
auto_increment
, 一般都是对主键自增 -
非空:
not null
-
默认:
default
-
唯一: :
unique
-
外键:
foreign key
唯一约束 与 主键
两者都不能重复
主键不能为空, 唯一约束可以为空
分类表
ID | cate_name |
---|---|
1 | 手机 |
2 | 电脑 |
3 | 家居 |
商品表
id | goods_name | Price | Cate_id |
---|---|---|---|
1 | Apple Iphone 11 | 5899.00 | 1 |
2 | 联想 小新 Air14 | 4599.00 | 2 |
3 | 荣耀 4Tpro | 1489.00 | 1 |
-- 创建分类表, 先创建被关联的表
create table cate(
id int unsigned primary key auto_increment,
cate_name varchar(10) not null
);
?
-- 创建商品表, 后创建关联表
create table goods(
id int unsigned primary key auto_increment,
goods_name varchar(128) not null,
price decimal(6,2),
cate_id int unsigned,
foreign key(cate_id) references cate(id)
);
?
-- 外键关联: 外键 需要关联 另一表的主键, 强制约束
表结构操作
-
查看表结构
desc 表名;
-
添加字段
-- alter table 表名 add 字段名 字段类型 字段属性;
alter table students add height float not null;
-
删除字段
-- alter table 表名 drop 字段名;
alter table students drop age;
-
修改字段类型、属性, 不修改字段名
-- alter table 表名 modify 字段名 新类型 新属性;
alter table students modify height decimal(7.2) not null;
-
修改字段名、类型、属性
-- alter table 表名 change 旧字段名 新字段名 新类型 新属性;
alter table students change height money decimal(7,2) default 0;
-
查看表的创建语句
-- show create table 表名;
show create table students\G -- \G 也可以结束SQL语句
-
修改表名
-- alter table 表名 rename (as) 新名; as加不加都可以
alter table students rename (as) student;
数据操作
-
插入数据
insert into cate values(0, "手机"); -- 插入表中所有字段的数据,只有主键中插入0,代表自增
insert into cate values(0, "电脑");
insert into cate values(0, "家居");
insert into cate values(0, "家具"),(0, "厨具"),(0, "餐具");
-- 指定字段插入
insert into goods(goods_name, price, cate_id) values("Apple Iphone 11",5899.00,1);
insert into goods(goods_name, price, cate_id) values("联想 小新 Air14",4599.00,2),("荣耀 4Tpro", 1489.00, 1);
-
查询数据
select * from cate; -- * 代表所有字段
select * from goods;
-
删除数据
delete from goods where id=3; -- 删除id为3的记录
-
修改数据
update cate set cate_name=‘家具‘ where id=3;8
?
update goods set price=price*1.2 where price<2000; -- 低于2000的商品价格上调20%
update goods set price=price*0.9 where price>5000; -- 超过5000的商品 打9折
查询
条件查询
比较运算符
select * from goods where price > 2000; -- 查询价格大于2000的商品
select * from goods where id>=3; -- 查询id不小于3的商品信息
?
select * from goods where price < 2000; -- 查询价格小于2000的商品
select * from goods where id<=3; -- 查询id不大于3的商品信息
?
select * from goods where id=2; -- 查询id为2的商品信息
select * from goods where id!=2; -- 查询id不为2的商品信息
select * from goods where id<>2; -- 查询id不为2的商品信息
select * from goods where price>2000 and id>=2; -- 查询价格大于2000 且 id不小于2 的商品信息
select name, price from goods where id=1 or id=3; -- 查询id为1 或 id为3 的商品名称和价格
范围查询
-- 查询id在5到50之间的商品信息
select * from goods where id>=5 and id<=50;
select * from goods where id between 5 and 50; -- 用来判断连续的范围
-- 查询id为1 或3 或 5 的商品信息
select * from goods where id=1 or id=3 or id=5;
select * from goods where id in (1,3,5); -- 用来判断不连续的范围
NULL判断
select * from goods where price is null; -- 查询价格为空的商品信息
select * from goods where price is not null; -- 查询价格不为空的商品信息
select * from goods where goods_name=""; -- 判断是有内容,只不过内容为空字符串
模糊查询
select * from goods where goods_name like "%电脑%"; -- 查询名称含有“电脑”的商品信息,%任意个任意字符
select * from goods where goods_name like "电脑%"; -- 查询名称以"电脑"开头的商品信息
select * from goods where goods_name like "%电脑"; -- 查询名称以"电脑"结尾的商品信息
?
select * from person where name like "李_"; -- 查询姓李且名为1个字的 人的信息,_ 一个任意字符
排序
select * from goods order by price; -- 默认升序排序
select * from goods order by price asc; -- asc确定升序
?
select * from goods order by price desc; -- desc 降序排序
?
select * from goods order by price desc, id desc; -- 多个字段排序,先按照前面的字段排序;只有前面字段值相等,才会按照下一个字段排序
分页
select * from goods limit 0,10; -- 代表每页10条数据,第1页
select * from goods limit 10,10; -- 代表每页10条数据,第2页
select * from goods limit 40,10; -- 代表每页10条数据,第5页
?
select * from goods limit (n-1)*m, m; -- n代表第几页,m代表每页多少条数据
select * from goods limit 10 offset 0; -- 代表每页10条数据,第1页
select * from goods limit 10 offset 10; -- 代表每页10条数据,第2页
select * from goods limit 10 offset 20; -- 代表每页10条数据,第3页
select * from goods limit 10 offset 40; -- 代表每页10条数据,第5页
?
select * from goods limit m offset (n-1)*m; -- n代表第几页,m代表每页多少条数据
分组
select cate_id as "类别", count(*) as "数量", max(price) as "最高价", min(price) as "最低价", round(avg(price),2) as "平均价格" from goods group by cate_id;
-- 分组+聚合函数
-
max()
: 最大值 -
min()
:最小值 -
count(*)
: 统计数量 -
sum()
:求和 -
avg()
: 求平均值 -
round()
:四舍五入的方式保留位数
select cate_id, group_concat(goods_name) from goods group by cate_id;
-- 列举每个分类下的商品名称
-
group_concat()
: 列举每组成员的信息
select publish,round(avg(price), 2) from book group by publish having publish="作家出版社";
?
select publish,round(avg(price), 2) from book where publish="作家出版社";
-
注意:
group by
分组之后的条件判断,不能使用where
关键字,但是可以使用having
物理外键与逻辑外键
外键的作用:约束多表中的数据必须是在主表存在
公司里一般不用外键,公司里常用的是逻辑外键。
所谓的逻辑外键就是一个普通的字段(类型为int)
物理外键:就是使用Forimary key
来约束过的字段
物理外键和逻辑外键不同:orm
来查的时候必须使用物理外键
创建areas表的语句如下:
create table areas(
aid int primary key,
atitle varchar(20),
pid int
);
查询所有省份
select * from areas where pid is null;
查询所有城市
select c.aid as "编号",p.atitle as "省份",c.atitle as "市区" from areas as c inner join areas as p on p.aid=c.pid;
查询所有北京市的市区
select c.aid as "编号",p.atitle as "省份",c.atitle as "市区" from areas as c inner join areas as p on p.aid=c.pid where p.atitle="北京市";