mysql

简单基础操作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:内存型数据库,一般用来做缓存\

 

 

库操作

  1. 创建数据库

    create database school charset=utf8;  # 创建数据库school, 指定编码方式为utf8, 防止中文乱码
  2. 查看数据库

    show databases;
  3. 删除数据库

    drop database 库名;  
  4. 入库

    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: 只能存01, 代表真或假

      • 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="北京市";

 

mysql

上一篇:MySQL常用操作


下一篇:MYSQL:本地计算机上的MYSQL服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止