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;