mysql基础使用

登录mysql

参数 说明
-u 用户名 示例为 root
-p 密码 回车后输入
1
mysql -u root -p

查看数据库

1
show databases;

创建数据库

参数 说明
test 数据库名称
1
create database test;

切换(打开)数据库

参数 说明
test 数据库名称
1
use test;

查看表

1
show tables;

创建表

参数 说明
int 整数
not null 不能为空
auto_increment 自增
primary key 主键
varchar(20) 字符串长度为20
id name age 字段名
1
2
3
4
5
create table user(
id int not null auto_increment primary key,
name varchar(20) not null,
age int not null
);

常见数据类型

mysql 官方文档 8.0

整数类型

类型 字节 范围
tinyint 1 带符号范围-128 ~ 127;无符号0 ~ 255
smallint 2 带符号范围-215 ~ 215-1;文字无符号0 ~ 216-1
mediumint 3 带符号范围-223 ~ 223-1;无符号0 ~ 224-1
int 4 带符号范围-231 ~ 231-1;无符号0 ~ 232-1
bigint 8 带符号范围-263 ~ 263-1;无符号0 ~ 264-1

可选属性:

  • M:显示宽度,取值范围在 0 ~ 255 之间, 显示宽度并不限制数值的大小,只是显示的宽度
  • ZEROFILL:使用 0 填充, 默认是使用空格填充
  • UNSIGNED:无符号,不能为负数,默认是有符号的,可以省略不写
1
2
3
4
-- 示例 int(M) ZEROFILL/UNSIGNED
create table t1(
id int(10) zerofill
);

浮点数类型

类型 字节 范围
float 4 表示单精度浮点数
double 8 表示双精度浮点数
decimal(M, D) 8/4 表示定点数

参数说明:

  • M:表示总共的位数
  • D:表示小数点后的位数

小数:有符号 float(4,2) 表示的范围是-99.99 ~ 99.99,无符号的 float(4,2) 表示的范围是0 ~ 99.99,MySQL在保存值时会进行四舍五入

1
2
3
4
5
6
-- 示例 float(M, D) double(M, D) real(M, D)
create table t1(
f1 float(5, 2),
f2 double(5, 2),
f3 real(5, 2)
);

定点数类型

类型 字节 范围
decimal 8/4 依赖于 M 和 D 的值

参数说明:

  • M:表示总共的位数
  • D:表示小数点后的位数

小数:有符号 decimal(5, 2) 表示的范围是-999.99 ~ 999.99,无符号的 decimal(5, 2) 表示的范围是0 ~ 999.99, DECIMAL 的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节。也就是说,在一些对精度要求不高的场景下,比起占用同样字节长度的定点数,浮点数表达的数值范围可以更大一些。定点数在MySQL内部是以 字符串 的形式进行存储,这就决定了它一定是精准的。当 DECIMAL 类型不指定精度和标度时,其默认为 decimal(10,0)。当数据的精度超出了定点数类型的精度范围时,则MySQL同样会进行四舍五入处理

1
2
3
4
-- 示例 decimal(M, D)
create table t1(
f1 decimal(5, 2)
);

字符串类型

char和varchar
类型 说明
char(L) 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
varchar(L) 可变长度字符串,L表示字符长度,最大长度65535个字节
text(L) 可变长度字符串,L表示字符长度,最大长度65535个字符
mediumtext(L) 可变长度字符串,L表示字符长度,最大长度16777215(224 - 1)个字符
longtext 可变长度字符串,最大长度4294967295(232 - 1)个字符

char:定长字符串,长度为0~255字节。在保存字符串时会用空格补齐长度,在检索时也会去掉尾部的空格,所以 char 类型存储的字符串末尾不能有空格
varchar:变长字符串,长度为0~65535字节。在保存字符串时不会用空格补齐长度,在检索时也不会去掉尾部的空格,所以 varchar 类型存储的字符串末尾可以有多个空格

1
2
3
4
5
-- 示例 char(L) varchar(L)
create table t1(
f1 char(5),
f2 varchar(5)
);

说明:
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

  • varchar 长度可以指定为 0 到 65535 之间的值,但是有 1 - 3 个字节用于记录数据大小,所以说有效字节数是 65532
  • 当我们的表的编码是 utf8 时,varchar(n) 的参数 n 最大值是 65532 / 3 = 21844 (因为utf中,一个字符占用3个字节)
  • 如果编码是 gbk,varchar(n) 的参数 n 最大是 65532 / 2 = 32766(因为 gbk 中,一个字符占用2字节)
日期类型和时间类型
类型 字节 说明
date 3 日期,格式为 YYYY-MM-DD
time / 时间,格式为 HH:MM:SS
year / 年份,格式为 YYYY
datetime 8 日期和时间,格式为 YYYY-MM-DD HH:MM:SS
timestamp 4 时间戳,格式为 YYYY-MM-DD HH:MM:SS

TIMESTAMP 类型通常占用4个字节的存储空间,而 DATETIME 类型则需要8个字节。
TIMESTAMP 类型的精度可以指定,范围从0到6,默认精度为6。
这意味着 TIMESTAMP 可以存储到微秒级别的时间戳,
DATETIME 类型则不能指定精度

enum和set类型
类型 说明
enum(‘a’, ‘b’, ‘c’) 枚举类型,只能从 ‘a’, ‘b’, ‘c’ 中选择一个
set(‘a’, ‘b’, ‘c’) 集合类型,可以选择 ‘a’, ‘b’, ‘c’ 中的任意一个或多个
  1. ENUM
    • ENUM 类型也叫作枚举类型, ENUM 类型的取值范围需要在定义字段时进行指定。
    • 设置字段值时, ENUM 类型只允许从成员中选取单个值,不能一次选取多个值。
    • 其所需要的存储空间由定义 ENUM 类型时指定的成员个数决定。
      • ENUM 类型包含 1 ~ 255 个成员时,需要 1 个字节的存储空间;
      • ENUM 类型包含256~65535个成员时,需要 2 个字节的存储空间;
    • ENUM 类型的成员个数的上限为 65535 个
  2. SET
    • SET 表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为 64 。
    • 设置字段值时,可以取取值范围内的 0 个或多个值。
    • SET 类型包含的成员个数不同时,其所占用的存储空间也是不同的。
      • SET 类型在存储数据时成员个数越多,其占用的存储空间越大。
    • 注意: SET 类型在选取成员时,可以一次选择多个成员,这一点与 ENUM 类型不同

插入数据

参数 说明
user 表名
name 字段名
age 字段名
values
(‘张三’, 18)

values 后面括号中的值要和字段名一一对应

1
insert into user(name, age) values('张三', 18);

查询数据

参数 说明
user 表名
1
select * from user;

更新数据

参数 说明
user 表名
name 字段名
李四 字段值
where 条件(修改满足条件的记录)
1
update user set name='李四' where id=1;

删除数据

参数 说明
user 表名
where 条件(删除满足条件的记录)
1
delete from user where id=1;

删除表

参数 说明
user 表名
1
drop table user;

删除数据库

参数 说明
test 数据库名
1
drop database test;

退出mysql

1
exit;