MySQL基础笔记(自用,勿怪)

MySQL

DDL:操作数据库和表

DML:对数据进行增删改

DQL:对数据进行查询

DCL:对数据库进行权限管理

数据库增删改查

  • create database if not exists db1;# 如果数据库不存在才创建

  • drop database if exists db1;# 如果数据库存在才删除

  • use db1;# 使用数据库

  • select DATABASE();# 查询当前数据库

  • show tables;# 查询当前数据库下所有表名称,首先要使用数据库

  • desc tb1;# 查看表的结构,字段和类型等

创建表

每个字段后面一定要加","号,并且最后一个后面不能加

CREATE TABLE tb_user(
	id int,
	username VARCHAR(20),
	password VARCHAR(20)
);

所有的数据类型

数据类型基本释义

  • DECIMAL:通过字符串形式表示小数,提高小数精度
  • DATE:年月日
  • TIME:时分秒
  • YEAR:年份
  • DATETIME:年月日时分秒
  • TIMESTAMP:年月日时分秒,用时间戳表示,默认当前时间,最大表示到2038年(即2147483647),不推荐

数据类型使用方法

  • DOUBLE(总长度,小数点后保留的位数);# 总长度是小数点前和后的字符串总长度,不是内存位数

  • CHAR(字符长度);# 超出后报错

  • VARCHAR(字符长度);# 按实际大小存储

  • MySQL5.0以后字符串长度表示字符数而不是字节数

数据类型 大小 描述
TINYINT 1 byte 小整数值
SMALLINT 2 bytes 大整数值
MEDIUMINT 3 bytes 大整数值
INT或INTEGER 4 bytes 大整数值
BIGINT 8 bytes 极大整数值
FLOAT 4 bytes 单精度浮点数值
DOUBLE 8 bytes 双精度浮点数值
DECIMAL 小数值
DATE 3 日期值
TIME 3 时间值或持续时间
YEAR 1 年份值
DATETIME 8 混合日期和时间值
TIMESTAMP 4 混合日期和时间值,时间戳
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过255个字符的二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

修改表/删除表

alter table tablename add (column datatype [default value][null/not null],….);# 添加字段的语法
alter table tablename modify (column datatype [default value][null/not null],….);$# 修改字段的语法
alter table tablename drop (column);# 删除字段的语法
  • DROP TABLE [IF EXISTS] tb1;# 判断是否存在删除表
  • ALTER TABLE 表名 RENAME TO 新表名;# 修改表名
  • ALTER TABLE 表名 ADD 列名 数据类型 [FIREST/AFTER .../BEGIN ...];# 添加一列
  • ALTER TABLE 表名 MODIFY 列名 新数据类型;# 修改数据类型
  • ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;# 修改表名和数据类型
  • ALTER TABLE 表名 DROP 列名;# 删除字段

数据增删改查

添加数据

1.给指定列添加数据

  • INSERT INTO 表名 (列名1,列名2,...) VALUES(值1,值2,...);

2.给全部列添加数据

  • INSERT INTO 表名 VALUES(值1,值2,...);

3.批量添加数据

  • INSERT INTO 表名 (列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
  • INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

修改数据

1.修改表数据

  • UPDATE 表名 SET 列名1=值1,列名2=值2,... [WHERE 条件];# 不加条件默认修改所有记录

查询数据

基本语法

SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段 HAVING 分组后条件 ORDER BY 排序字段 LIMIT 分页限定

基础查询

1.查询多个字段

  • SELECT 字段1,... FROM 表名;
  • SELECT * FROM 表名;# 查询所有数据,不建议这样用

2.去除重复记录

  • SELECT DISTINCT 字段列表 FROM 表名;# 只删除回显时重复数据

3.起别名

  • AS:AS也可以省略;

别名使用,修改回显时的字段名

select name,math as 数学成绩,english as 英语成绩 from tb1;
符号 功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<>或!= 不等于
BETWEEN ... AND ... 在某个范围之内(都包含)
IN(...) 多选一
LIKE占位符 模糊查询 _单个任意字符 %多个任意字符
IS NULL 是NULL
IS NOT NULL 不是NULL
AND 或 && 并且
OR 或 || 或者
NOT或! 非 或 不是

条件查询

注意1:"或"运算的两种语法,多条件可用"多选一"模式

select * from tb1 where age = 18 or age = 20 or age = 22;
select * from tb1 where age in (18,20,22);

注意2:查询字段值为null的记录,不能用 = 或 != 比较,需要用 IS 或 IS NOT

注意3:通配符的使用

1.查询姓'马'的学员信息

  • select * from tb1 where name like '马%';

2.查询第二个字是'花'的学员信息

  • select * from tb1 where name like '_花';

3.查询名字中包含'德'的学员信息

  • select * from stu where name like '%德%';

排序查询

SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] ...;

排序方式:

ASC:升序排列(默认值)

DESC:降序排列

注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序

分组查询

聚合函数

以列为单位进行纵向计算:

SELECT 聚合函数名(列名) FROM 表;
  • count(*)在新版MySQL中会自动选择字段查询
函数名 功能
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

注意:所有的聚合函数,null值都不参与运算

分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];

注意:分组之后,查询的字段为聚合函数和参与分组字段,查询其他字段无任何意义

where和having区别:

  • 执行时机不一样: where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。

  • 可判断的条件不一样: where 不能对聚合函数进行判断,having 可以。

执行顺序: where > 聚合函数 > having

查询示例

1.查询男同学和女同学各自的数学平均分

  • select sex,avg(math) from stu group by sex;

2.查询男同学和女同学各自的数学平均分,以及各自人数

  • select sex,avg(math),count(*) from stu group by sex;

3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组

  • select sex,avg(math),count(*) from stu where math > 70 group by sex;

4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的

  • select sex,avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;

分页查询

基本语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
  • 起始索引:从0开始,如果查询的条目数超过表中记录总数,不会报错
  • 计算公式:起始索引=(当前页码-1) * 每页显示数量

1.每页显示3条数据,查询第2页数据

  • select * from stu limit 3【(2-1)*3】,3;

2.tips:

  • 分页查询limit是MySQL数据库的方言
  • Oracle分页查询使用rownumber
  • SQL Server分页查询使用top
posted @ 2023-08-24 17:23  我不是萌新  阅读(12)  评论(0编辑  收藏  举报