查看已有的数据库
命令:show databases;
创建数据库:
create database 数据库名称
如果要给创建的数据库进行编码处理:比如使用utf8mb4字符集
create database xiaozhu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
当我们使用utf-8编码:
create database 数据库名称 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
删除数据库:
drop database 数据库名称;
进入数据库:
use 数据库名称;
查看数据库下所有的数据表;
show table;
数据表的管理:
创建数据表的步骤:
1——先创建数据库:
create database xiaozhu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2—— 进入数据库:
use xiozhu;
3——查看当前数据库下所有的表:
show tables;
4——创建表:
create table 表名称(
列表名 类型,
列表名 类型,
列表名 类型
)default charset=utf8mb4;
create table 表名称(
列表名 类型,
列表名 类型,not null (不允许为空)
列表名 类型 null,允许为空(默认)
)default charset=utf8mb4;
create table 表名称(
列表名 类型,
列表名 类型,
age int default 3 (插入数据时,age的列的值默认为3
)default charset=utf8mb4;
create table 表名称(
id int primary key, --主键(不允许为空,不允许重复)
列表名 类型,
列表名 类型
)default charset=utf8mb4;
主键一般用于表示当前行的数据的编码(类似于人的身份证)。就是不可以重复,不可以为空
create table 表名称(
id int auot_increment primary key, --主键(不允许为空,不允许重复)
列表名 类型,
列表名 类型
)default charset=utf8mb4;
auto_increment ----内部维护,自增:就是会自己自动增长值。如果一开始我:id=1。那么后面 id=2,id=3,id=4 等等,会自动增加,我们不用去编写id了
一般我们在创建表的时候,(标准)
create table 表名称(
id int not null auto_increment primary key, --主键(不允许为空,不允许重复)
列表名 类型,
列表名 类型
)default charset=utf8mb4;
关于删除表:
drop table 表的名称;
关于查看表的相关信息:
desc xiaozhu;
MySQL中数据类型:
都是表示整数的
- tinyint 一个字节
有符号。取值范围是:-128~~~~127(有正有负) | (默认) |
无符号。取值范围是:0~~~~255(只有正) |
案例:有符号的
mysql> create table tb2(
-> id int not null auto_increment primary key,
-> age tinyint --有符号:取值范围是-128~~~127
-> )default charset=utf8mb4;
案例:无符号的:
mysql> create table tb3(
-> id int not null auto_increment primary key,
-> age tinyint unsigned
-> )default charset=utf8mb4;
2:int 4个字节;
案例:
创建一个表格2:
插入数据:
insert into tb2(salary,age) values(15000,25)
同时插入多行数据:
insert into tb2(salary,age) values(30000,30),(40000,35)
查看表中数据:
select * from tb2
数据类型;小数
float
- float 用于存储单精度浮点数。
- 它通常占用4个字节。
- 精度约为7位十进制数。
- 不太适合进行精确的金融计算,因字的最大位数(精度),
D
是小数点后的位数(标度)。如果省略M
和D
,则会使用默认值。为它可能会有舍入误差。 - 语法:float
(M, D)
,其中M
是数
double
- double 用于存储双精度浮点数。
- 它通常占用8个字节。
- 精度比 float 高,约为15位十进制数。
- 同样,由于浮点数的表示方式,它也可能不适用于需要高精度的场合。
- 语法:duoble
(M, D)
,其中M
和D
的含义与 float相同。
decimal
- decimal 用于存储精确的数值,如货币数据。
- 它以字符串的形式存储值,因此可以避免浮点数的舍入误差。
- decimal 的精度和小数点后的位数是用户定义的。
- 语法:decimal
(M, D)
其中M
是数字的最大位数(精度,默认值为10),D
是小数点后的位数(标度,默认值为0)
案例:
mysql> create table xiaozhu(
-> id int not null primary key auto_increment,
-> salary decimal(8,2)
-> )default charset=utf8mb4;
8
表示总位数(包括小数点两边的数字),2
表示小数点后的位数。所以,这个列可以存储的最大数值是 999999.99
在上述代码中,超过两位小数点后面两位数,会自动四舍五入
如上图所示,我们可以看到当数值的长度超过8位数的·时候。就是出现报错
字符串类型:
char :定长字符串
mysql> create table xiaozhu(
-> id int not null primary key auto_increment,
-> salary decimal(8,3),
-> name char(11)
-> )default charset=utf8mb4;
- char:
- 定长字符串:
char
用于存储固定长度的字符串。无论实际存储的字符串有多长,char
字段都会使用相同的空间。如果存储的字符串长度小于定义的长度,MySQL会在其后填充空格以达到定义的长度。 - 用途:适用于存储长度固定的数据,如某些代码、电话号码格式化的数据等。
- 限制:长度范围为0到255个字符。
- 在上述代码中我们定义了其长度是11空间。尽管我们只是使用了8个空间,但是char依旧占存空间是11
- 定长字符串:
varchar
- varchar:
- 可变长字符串:
varchar
用于存储可变长度的字符串。它只使用必要的空间来存储实际字符串的长度,并加上一个或两个额外的字节来记录字符串的长度。 - 用途:适用于存储长度不固定的数据,如姓名、地址等。
- 限制:最大长度取决于最大行大小(
max_allowed_packet
)和其他因素,但通常可以达到65,535字节。
- 可变长字符串:
text
- text:
- 小文本数据:
text
用于存储较长的文本数据。 - 用途:适用于存储文章、评论、描述等较短的文本内容。
- 限制:最大长度为65,535字节(即64KB)。
- 小文本数据:
mediumtext
longtext
- mediumtext:
- 中等长度文本数据:
mediumtext
用于存储中等长度的文本数据。 - 用途:适用于存储比
text
字段更长的文本内容。 - 限制:最大长度为16,777,215字节(即16MB)。
- 中等长度文本数据:
- longtext:
- 大文本数据:
longtext
用于存储非常大的文本数据。 - 用途:适用于存储如日志文件、大型文档或长篇文章等大量文本内容。
- 限制:最大长度为4,294,967,295字节(即4GB)。
- 大文本数据:
在选择这些数据类型时,应该考虑数据的实际长度和预期增长,以及存储和检索性能。对于短小的、固定长度的数据,char
可能是一个好选择。对于长度可变的数据,varchar
更为合适。而对于大量的文本数据,应该选择text
、mediumtext
或longtext
,具体取决于数据的预期大小。
时间类:
datetime
date
datetime
datetime
类型通常用于存储日期和时间信息,包括年、月、日、时、分、秒(以及可能的小数秒)。这种类型非常适合于需要精确到秒或毫秒级别的时间戳的场合,比如记录事件发生的具体时间。
在数据库系统中,datetime
字段通常使用固定数量的字节来存储,这样可以确保查询性能的一致性。不同的数据库系统对 datetime
的具体实现和精度可能会有所不同。
date
date
类型则只用于存储日期信息,包括年、月、日。它不包含时间信息(如时、分、秒)。因此,如果你只需要知道某件事情发生在哪一天,而不需要知道具体的时间,那么使用 date
类型会更合适。
案例用户表:
mysql> create table xiaozhu(
-> id int not null primary key auto_increment,
-> name varchar(34) not null,
-> password char(34) not null,
-> email varchar(34) not null,
-> age tinyint unsigned,
-> salary decimal(10,2)
-> )default charset=utf8mb4;
Query OK, 0 rows affected (0.08 sec)