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;