连接数据库
mysql -u用户名 -p密码
数据库操作(DDL)
所有SQL语句都要以分号结束
查询数据库
查询所有已创建的数据库
show databases;
查询当前使用的数据库
select database();
使用数据库
使用某一个数据库
use 数据库名;
创建数据库
-- if not exists表示如果没有这个名称的数据库就创建,有就不创建也不会报错
-- 设置默认字符集为utf8
create database [if not exists] 数据库名 DEFAULT CHARACTER SET = 'utf8mb4';;
删除数据库
-- if exists表示如果有这个名称的数据库就删除,没有也不会报错
drop database [if exists] 数据库名;
数据表操作(DDL)
创建表
约束
- 约束是作用于表中字段上的规则,用于限制存储在表中的数据
- 保证数据库中数据的正确性、有效性和完整性
| 约束 | 描述 | 关键字 |
|---|---|---|
| 非空约束 | 限制该字段值不能为null | not null |
| 唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
| 主键自增 | 让主键自增 | auto_increment |
| 主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
| 外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
| 默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
数据类型
- 数值类型
无符号取值 需要设置 unsingned
| 类型 | 大小(byte) | 有符号取值范围 | 无符号取值范围 | 描述 | 备注 |
|---|---|---|---|---|---|
| tinyint | 1 | (-128,127) | (0,255) | 小整数值 | |
| smallint | 2 | (-32768,32767) | (0,65535) | 大整数值 | |
| mediumint | 3 | (-8388608,8388607) | (0,16777215) | 大整数值 | |
| int | 4 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 | |
| bigint | 8 | (-2^63,2^63 - 1 ) | (0,2^64 - 1) | 极大整数值 | |
| float | 4 | (-3.402823466 E+38,3.402823466351 E+38 ) | 0和(1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 | float(5,2):5表示整个数字长度,2表示小数位个数 |
| double | 8 | (-1.7976931348623157 E+308,1.7976931348623157 E+308 ) | 0和(2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 | double(5,2):5表示整个数字长度,2表示小数位个数 |
| decimal | 小数值(精度更高) | decimal(5,2):5表示整个数字长度,2表示小数位个数 |
- 字符串类型
| 类型 | 大小 | 描述 |
|---|---|---|
| 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 | 极大文本数据 |
- 日期时间类型
| 类型 | 大小(byte) | 范围 | 格式 | 描述 |
|---|---|---|---|---|
| date | 3 | 1000-01-01 - 9999-12-31 | YYYY-MM-DD | 日期值 |
| time | 3 | -838:59:59 - 838:59:59 | HH:MM:SS | 时间值或持续时间 |
| year | 1 | 1901 - 2155 | YYYY | 年份值 |
| datetime | 8 | 1000-01-01 00:00:00 - 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| timestamp | 4 | 1970-01-01 00:00:01- 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
create table 表名(
字段1 字段类型 [约束] [comment 字段1注释],
字段2 字段类型 [约束] [comment 字段2注释],
...
字段n 字段类型 [约束] [comment 字段n注释],
) [comment 表注释]
-- 例如
create table test_user (
id int primary key auto_increment comment "id唯一表标识",
username varchar(20) not null unique comment "用户名",
name varchar(10) not null comment "员工姓名",
gender char(1) comment "性别",
img mediumblob comment "图片",
job char(4) comment "职位",
date date comment "入职日期",
password varchar(16) default '123456' comment "密码,默认123456",
create_time datetime not null comment "创建时间",
update_time datetime not null comment "修改日期"
) comment "用户表";
上面例子创建了一个名为test_user的数据表,其中ID为主键,并且自增,username不能为空且必须有值 password 有一个默认的123456
查询表
-- 查询当前数据库所有的数据表
show tables;
-- 查询表结构
desc 表名;
-- 查询建表语句
show create table 表名;
修改表
--添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
-- 修改字段类型
alter table 表名 modify 字段名 新数据类型(长度);
-- 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
-- 删除字段
alter table 表名 drop column 字段名;
-- 修改表名
rename table 表名 to 新表名;
删除表
drop table [if exists] 表名;
数据操作(DML)
添加数据(insert)
-- 指定字段添加数据
insert into 表名 (字段1,字段2) values (值1,值2);
-- 全部字段添加数据
insert into 表名 values (值1,值2...);
-- 批量添加数据(指定字段)
insert into 表名 (字段1,字段2) values (值1,值2),(值1,值2);
-- 批量添加数据(指全部字段)
insert into 表名 values (值1,值2),(值1,值2);
修改数据(update)
update 表名 set 字段1=值1,字段2=值2 [where 条件];
删除数据(delete)
delete语句如果没有条件,将会删除整张表的所有数据
delete不能删除某一字段的值,可以使用update,将该字段的值置为null
delete from 表名 [where 条件];
数据查询(DQL)
基本查询
-- 查询该表中的所有数据
select * from 表名;
-- 查询多个字段
select 字段1,字段2,字段3 from 表名;
-- 设置别名
select 字段1 [as 别名1], 字段2[as 别名2] from 表名;
-- 去除重复记录
select distinct 字段列表 from 表名;
- 条件运算符
| 运算符 | 功能 |
|---|---|
| 大于 | |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| = | 等于 |
| <>或!= | 不等于 |
| between...and... | 在某个范围之内(含最小值和最大值) |
| in(...) | 在in之后的列表中的值,多选一 |
| like 占位符 | 模糊匹配(_匹配单个字符,%匹配多个字符) |
| is null | 是null |
| and或&& | 并且(多个条件同时成立) |
| or或 | 或者(多个条件同任意一个成立) |
| not或! | 非,不是 |
语法
select 字段 from 表名 where 条件;
- 聚合函数
| 函数 | 功能 |
|---|---|
| count | 统计数量 |
| max | 最大值 |
| min | 最小值 |
| avg | 平均值 |
| sum | 求和 |
不对null进行计算 统计数量推荐使用count(*) 语法
select 函数名称(字段) from 表名;
分组查询(group by)
select 字段 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
排序查询(order by)
ASC升序
DESC降序
select 字段 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件] order by 字段1 排序方式1,字段2 排序字段2;
分页查询(limit)
select 字段 from 表名 limit 起始索引,查询记录数;
流程控制函数(if)
select if(条件,符合条件的值,不符合条件的值) from 表名
流程控制函数(case)
select
case 字段 when 条件1 then 值1
when 条件2 then 值2
when 条件3 then 值3
when 条件4 then 值4 end -- 结束用end 还可以使用 else.....end else表示当以上条件都不符合的时候返回的值
as 职位
from 表名