MySQL学习笔记-基础篇

MySQL学习笔记-基础篇

1. 基本语法

1.1 数据库

创建数据库

# 创建数据库
create database mysql_test;
create database if not exists <name>; # 检查是否存在
# 查询数据库
show databases
# 设置字符集
create database <name> character set utf8;
#显示数据库创建语句
show create database <name>

修改数据库

alter database <name> character set gbk; #改字符集
#删除数据库
drop database <name>;
drop database if exists <name>;

使用/切换数据库

use <name>

1.2 DDL 数据定义语言

DDL , Data Definition Language

定义数据库对象,如数据库、数据表和数据字段。

创建数据表

#以学生为例
create table students(
    stu_num char,
    stu_name varchar(20),  # varchar为可变长字符串 varchar(20)表示最长20个字符串
    stu_gender char(2), # 表示长度只能为2
    stu_age int not null, # not null 不能为空
    stu_tel cahr(11) unique #unique 不能重复
);

查询数据表

show tables;
desc <tablename>; # 查询表结构

修改数据表

# 删除
drop tabla <tablename>;
drop table if exists <name>;
# 修改字符集
altertable <name> character set utf8;
# 添加列
alter table <name> ad stu_ramerk varchar(200);
# 修改字段列名和类型
alter table <name> change stu_remark(oldname) stu_desc(newname) text;
alter table <name> modify stu_desc varchar(400);
# 删除字段
alter table <name> drop stu_desc;

1.3 数据类型

数值类型
在这里插入图片描述

字符类型

在这里插入图片描述

日期类型

在这里插入图片描述

1.4 字段约束

非空约束 not null

唯一约束 unique 不可重复

主键约束 primary key 非空+唯一

book_isbn char(4) primary key,  #or primary key(book_isbon)
alter table books drop primary key; #添加主键约束
alter table books modify <volmname> char(4) primary key; #删除主键约束

主键自动增长

type_int primary key auto_increment,
#每添加一条记录列自+1,删除后该列数据不会重复生成,可能出现1 2 4

外键约束 foreign key


联合主键(使用频率不高)

create table grades(
 stu_num char(8),
 course_id int,
 primary key(stu_num, course_id)
);

1. 5 DML 数据操作语言

DDL, Data Manipulation Language

完成数据表中数据插入、删除、修改等操作

插入数据

insert into <tablename>(columnName1, columnNam2...) 
 values(value1,value2...);

删除数据

delete from <tablename> [where conditions];
delete from students where stu_num = '20210102';
delete from students where stu_age > 20;

delete from stus; #删除所有数据,敏感操作

修改数据

update <tableName> set columnName = value [where conditions];
update students set stu_name='张三', stu_qq='36378' where stu_num = '202201';

1.6 DQL 数据查询语言

DQL(Data Query Language)

用来查询数据库中表的记录

select colnumName1[,colnumName2,colunName2...] from <tabelName>;
select * from <tableName>;

条件关系

where 语句

select * from students where stu_age>18;
# between
select * from students where stu_age between 18 and 20;
#and, or, not
select * from students where stu_age>18 and sti_gender = '女';
select * from students where stu_age not between 18 and 20;

like 语句

​ where语句的条件中使用like关键字实现模糊查询

select * from <tableName> where columnName like 'reg';
  • **% **表示任意多个字符 [ %o% 包含字母o]
  • _ 表示任意一个字符 [ _o% 表示第二个字母为o]
select * from stus where stu_name like '%o'; # 学生姓名字母中包含o
# 第一个字为张
'张%'
# 最后一个字母为o
'%o'
# 第二个字母为o
'_o%'

查询结果处理

设置查询列

select colnumName from stus where stu_age>20;

计算列

select stu_name, 2021-stu_age from stus;
# 将2021-stu_age的结果呈现出来

字段别名 as

select stu_name, 2021-stu_age as birth_year from stus;
select stu_name as name, 2021-stu_age as year from stus;

消除重复行 distinct

select distinct stu_id from stus;

排序

order by

select * from <tabaleName> where conditions order by columnName asc|desc;
# asc升序(默认), desc降序
select * from stus where stu_age>15 order by stu_gender desc; # 单字段排序
select * from stus where stu_age>15 order by stu_gender asc, stu_age desc; # 多字段排序

聚合函数

  • count() 统计函数
select count(stu_num) from stus;
select count(stu_male_num) from stus where stu_gender='男';
  • max() min() 函数
select max(stu_age) from stus;
select min(stu_age) from stus where stu_gender='女';
  • sum() 函数

  • avg() 函数


日期函数和字符串函数

使用 now()sysdate() 获取当前系统时间

contact() 连接两个字符串

select concat(stu_name, '-', stu_gender) from stus;

upper() lower() 大小写

substring(columnName, start, len) 从指定列截取部分显示


分组查询 group by

# 先对查询的学生信息按性别分组,然后统计每组学生的个数
select stu_gender, count(stu_num) from stus group by stu_gender;
# 先对学生按年龄分组并排序, 然后统计各组学生数量
select stu_age, count(stu_num) from stus group by stu_age order by stu_age;
select stu_age, count(stu_num)
from stus
group by stu_age
having count(stu_num>1)  #筛选人数大于1的组显示
order by stu_age

分页查询 limit

select ...
from ...
where ...
limit param1, param2;  # parama[int] 表示从索引param1开始,共查询param2条数据
select * from <tableName> [where...] limit (pageNum-1)*pageSize, pageSize;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值