mysql数据库笔记

目录

SQL语言分为四大类:

数据类型

 char和varchar的特点:

DDL

操作库

操作表

DML

插入-insert

注意:

更新-update

删除-delete

约束

外键条件

外键约束

DQL

模糊查询

排序查询

聚合函数

去重


SQL语言分为四大类:

  1. DDL(Data Defined Language) 数据定义语言.主要是对库,表等操作语句
  2. DML(Data Manipulation Language) 数据操作语言.主要是对表中数据的操作(增,删,改)
  3. DQL(Data Query Language) 数据查询语言.主要是对表中数据的查询.
  4. DCL(Data Control Language) 数据控制语言.主要是对数据库的权限安全操作DDL

数据类型

整型

int 大整型 4个字节 0~(2^32-1)

tinyint 微小整型 1个字节

smallint 小整型 2个字节

bigint极大整型 8个字节

浮点型

float 4个字节

double 8个字节

字符型

char 定长 1~255

varchar 变长 1~65535

字节型blob适合存储图像
日期型

date 日期

time 时间

datetime 日期时间

timestamp 时间戳 (自动改变)

不需要指定长度

 char和varchar的特点:

  1. char:浪费存储空间,性能高
  2. varchar:节省存储空间,性能低

mysql的默认搜索引擎是: InnoDB

DDL

操作库

  1. 创建库

    create database 数据库名

  2. 删除库

    drop database 数据库名

  3. 使用/切换 数据库

    use 数据库名

  4. 查询数据库

    show databases; 查询所有的数据库

    select database(); 查询当前使用的数据库

  5. 修改库

    alter database 库名 character set utf-8;

操作表

  1. 查看当前库下所有表

    show tables;

  2. 创建表

    create table 表名(

    列名 数据类型(长度) [约束] ,

    列名 数据类型(长度) [约束] ,

    列名 数据类型(长度) [约束]

    ) ;

  3. 查看表的字段信息

    desc 表名;

  4. 更新表字段-添加列

    alter table 表名 add 列名 数据类型(长度);

  5. 更新表字段-删除列

    alter table 表名 drop 列名 数据类型(长度);

  6. 更新列名

    alter table 表名 change 旧列名 新列明 数据类型(长度);

  7. 更新表名

    rename table 旧表名 to 新表明;

  8. 查看创建表的语句

    show create table 表名;

  9. 修改表的编码格式

    alter table 表名 character set gbk;

    建议使用utf-8

  10. 删除表

    drop table 表名

DML

数据操作语言

是指对表中的数据的 增 删 改

插入-insert

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

注意:

  1. 列名顺序与原表无关,但是列要在原表中存在

  2. 要插入的列 , 不需要是全列表 . 可只列出需要插入的字段名

  3. 值与列的顺序必须一致

  4. 字符串和日期值需要使用单引号

  5. 可以插入null , 前提是该列允许null

  6. 插入全列时 , 可以省略列名 , 值得赋值是按照原表列的顺序赋值

更新-update

update 表名

set 字段1 = 值1 ,

字段2 = 值2 , ...

where 字段 = 值;

将满足where条件的字段1,字段2..更新为对应的值

不加where条件, 更新整个表

删除-delete

delete

from 表名

where 字段 = 值;

删除表中满足where条件的数据

没有where条件 , 则会删除整个表

约束

对插入数据的约束

约束类型:

  1. 主键约束

    primark key

    主键不能为空

    主键不能重复, 唯一

    主键是索引

  2. 自增约束

    auto_increment

  3. 唯一约束

    unique

  4. 数据类型

    数据类型约束即,限制该列存储的数据类型,不符合不能存入!

  5. 非空约束

    not null

  6. 默认值约束

    default xx

    该列不赋值时, 默认值为xx

    不指定默认值约束 , 默认为null

  7. 引用完整性约束 -> 外键

    constraint fk_course_stu foreign key (sid) references stu(sid)

    设计了外键后,课程表中的sid字段就与学生表的sid字段有联系.

    父表: stu表 (被引用的表)

    子表: course表 (引用表)

    插入时:

    学生表可以随意插入值

    课程表插入值时,sid字段只能插入学生表中有的sid值

    删除或更新时:

    RESTRICT: 如果想要删除/更新父表的记录,子表中有关联该父表记录的,则不允许删除父表记录

    NO ACTION: 同restrict一样,删除时先检查外键.如果有引用,不能删除

    CASCADE: 级联,父表删除/更新时,如果有子表有关联,那么子表父表数据一起删除/更新

    SET NULL: 置空,父表删除/更新时,如果子表有关联,那么子表该条记录置为null

外键条件

  1. 外键要存在,首先必须保证表的引擎是 InnoDB(默认的存储引擎),如果不是 InnoDB 存储引擎,那么外键可以创建成功,但没有约束作用;

  2. 外键字段的字段类型(列类型),必须与父表的主键类型完全一致;

  3. 每张表中的外键名称不能重复;

  4. 增加外键的字段,如果数据已经存在,那么要保证数据与父表中的主键对应。

  5. 如果外键约束模式选择SET NULL ,那么字段必须允许为NULL,否则出现Cannot add foreign key constraint。

外键约束

        所谓外键约束,就是指外键的作用。之前所讲的外键的作用都是默认的作用,实际上,可以通过对外键的需求,进行定制操作。外键约束有三种模式,分别为:

  1. district:严格模式(默认),父表不能删除或更新一个已经被子表数据引用的记录;

    restrict

    no action

  2. cascade:级联模式,父表的操作,对应子表关联的数据也跟着被删除;

  3. set null:置空模式,父表的操作之后,子表对应的数据(外键字段)被置空。

/*
 引用完整性约束-外键(foreign key)
 创建外键的方式
 1 在建表时直接指定
   在引用了别的表字段的表中添加外键约束
        constraint 外键名 foreign key(当前表字段) references 其他表(字段)
 2 建好表后再指定
   alter table 表名 add constraint 外键名 foreign key (字段) references 其他表(字段)
*/
create table stu(
 sid int primary key auto_increment comment '学生主键',
 sname varchar(10) comment '学生姓名',
 age int comment '学生年龄'
);
create table course(
 cid int primary key auto_increment comment '课程主键',
 cname varchar(10) comment '课程名称',
 sid int comment '关联学生表id',
 constraint fk_course_stu foreign key(sid) references stu(sid)
);
alter table course add constraint fk_course_stu foreign key (sid) references stu(sid);
ps: 建表时在字段后 使用comment ‘注释’,可以对该列注释

DQL

DQL是指查询语言,从数据表中通过一系列条件将符合条件查出.

DQL查询语句只是查看数据,不会对原表有任何影响.

查询的结果是一张虚拟表.

查询的关键字: select

语法:

select

selection_list --要查询的列

from

table_name -- 要查询的表名

where condition -- 过滤行条件

group by grouping_clumns -- 对结果按照列进行分组

having condition -- 分组后再过滤

order by sort_column -- 排序

limit offset,row_count -- 对结果限制

条件查询

条件查询就是查询时在基础查询的后面使用

where语句,where后使用运算符将符合条件的数据保留

= 相等

!= <> 不等

<小于 >大于 <= >=

and 和/与 两边的条件同时成立才行

or 或 两边的条件有一个成立即可

in(set) 范围 在set集合范围内

between 值1 and 值2 在..之间.. (包含临界值,从小到大)

not in 取反

模糊查询

1、%:匹配任意0个或多个字符(将含有百分号前的数据导出,不限制%占据的位数)

2、_:匹配任意1个字符。(每个下划线只能占据一位,先找出下划线前的数据,在筛选出符合条件的数据)

排序查询

order by asc 升序 | desc 降序

聚合函数

把多行数据变到一行输出

函数名含义
count(列名)计数
sum(列名)求和
max(列名)最大值
min(列名)最小值
avg(列名)平均值

可以使用as给列取别名

select count(sid) as 'row-num' from stu;
-- as可以使用
-- select count(sid) 'row-num' from stu;
-- 别名可以使用中文

去重

去重函数 distinct(列)

将指定列的数据去重

-- 不重复的年龄
​
select distinct(age) from stu;
​
-- 查询年龄不重复的共有多少人
​
select count(distinct age) from stu;

注意:

mysql使用distinct的使用 一定要位于 查询的最前端

分组查询

当需要分组查询时,需要使用group by语句.

语法:

select * from stu [where ...] group by 字段 [order by..]

注意:

  1. 一般分组之后的操作都是聚合操作

  2. 分成几组,虚拟表结果就是几行数据

  3. 聚合函数,是对每组进行单独聚合操作

  4. 与聚合函数一同出现的列名,必须出现在group by后

    反之,如果出现了一个没有在groupby后出现的字段,那么查询结果不正常!

having与where的区别:

  1. where是分组前过滤,having是分组后过滤

  2. where后不能使用聚合函数,having可以使用聚合函数

限制输出

可以将查询好的结果,限制输出.
可以限制输出几条,从哪里输出.
​
 语法:在sql语句最后写 limit offset,row_count

limit 开始下标,行数;
-- 分页显示
-- 写分页逻辑,会设计几个标量
-- 1)page       当前页
-- 2)pagesize   每页展示多少条数据
-- 3)total      共多少条记录
-- 4)pagecount  总页数
​
-- 第一页
select * from stu limit 0,3;
-- 第二页
select * from stu limit 3,3;
-- 第三页
select * from stu limit 6,3;
-- 第四页
select * from stu limit 9,3;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值