MySQL——常见数据类型

数据类型是什么

​ 数据类型(data_type)是指系统中所允许的数据的类型。MySQL数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。

MYSQL常见数据类型

​ MySQL支持多种类型,大致可以分为四类:数值型、浮点型、日期/时间和字符串(字符)类型

1. 整型
整数类型字节最小值最大值
TINYINT1有符号:-128
无符号:0
有符号:127
无符号:255
SMALLINT2有符号:-32768
无符号:0
有符号:32767
无符号:65535
MEDIUMINT3有符号:-8388608
有符号:0
无符号:8388607
无符号:1677215
INT、INTEGER4有符号:-2147483648
无符号:0
有符号:2147483647
无符号:4294967295
BIGINT8有符号:-9223372036854775808
无符号:0
有符号:9223372036854775807
无符号:18447644073709551615

特点:

  • 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字

  • 如果插入的数值超出了整型的范围,会报out of range异常,并且插入失败

    create table a(
    	b int(10) unsigned NOT NULL default 0
    );
    
2. 浮点型
浮点数类型字节最小值最大值
FLOAT4±1.175494351E-38±3.402823466E+38
DOUBLE8±2.2250739595072014E-308±1.7976931348623157E+308
定点整数型字节描述
DEC(M,D)
DECIMAL(M,D)
M+2最大值与DOUBLE相同,给定DECIMAL
的有限制范围由M和D决定
位类型字节最小值最大值
BIT(M)1~8BIT(1)BIT(64)

​ 定点数的精度更大 ,M是整数部位+小数部位,D是小数点后的位数。如果小数位超过指定长度,则进行四舍五入截取。整数位长度超出则同int一样报错,插入失败。m,d可省略,如果decimal,则M默认为10,D默认为0。float与double,则根据插入的数据的精度的精度来决定精度。

使用方式:

  • float(M,D)

  • double(M,D)

  • decimal(M,D)

    create table t3 (
    	a float(10, 2),
    	b double(10, 2),
    	c decimal(10, 2)
    );
    
3. 字符串类型
字符串类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

char与varchar的区别:

4. 日期值

​ 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

类型大小 ( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

​ 1. datetime

create table t6(
	create_time datetime
);
insert into t6 values('1999-01-01 02:03:59');
insert into t6 values('1999/01/01 02:03:59');
insert into t6 values(now());    # 插入现在的时间
  1. time

    Time值得范围是从’-838:59:59’ 到’838:59:59’,Time类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个过去的时间或两个事件的时间间隔(可以大于24小时,或者未负)

create table t7(
	create_time time
);
-- 时间的范围是: [-838:59:59 - 838:59:59]
insert into t7 values('100:59:59');
insert into t7 values('-100:59:59');
  1. timestamp时间戳类型

    • 时间戳类型在显示方面和datetime是一样的,在存储上不一样。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是 不一样的。
    • 范围从1970-1-1 0:0:0 到 2038-1-19 11:14:07
    • 时间戳使用四个字节表示
    • 该值大小与存储的位长有关:2**(4 * 8 -1)
    create table t8(
    	create_time timestamp
    );
    insert into t8 values(now());
    insert into t8 values('2000-01-01 01:01:01');
    insert into t8 values('2038-01-19 11:14:07');
    insert into t8 values('2038-01-19 11:14:08');   # 报错
    
  2. year

create table t9(
	create_time year
);
-- 从1900年开始 - 1900+255
insert into t9 values(now());
insert into t9 values('2155');
insert into t9 values('2156');   # 报错
5. 布尔值

mysql中的bool是0和1,代表false和true。mysql默认会转化为tinyint(1)类型

MySQL数据库的布尔类型BOOL或称布尔类型BOOLEAN,等同于微整型TINYINT(1)。MySQL数据库数据类型分类中确实存在布尔类型,但是MySQL数据库并没有真正实现布尔类型,而是借助微整型的方式实现,并且创建数据库表结构的时候,即使字段定义属性设置为布尔类型BOOL或布尔类型BOOLEAN,都会被默认改写成TINYINT(1)。

create table t10(
	num boolean
);
insert into t10 set num=True;
insert into t10 set num=False;
insert into t10 set num=1;
insert into t10 set num=10;
insert into t10 set num=0;

​ 建议:MySQL数据库产品没有真正实现对布尔类型的支持,建议大家不要使用MySQL布尔类型BOOL或布尔类型BOOLEAN,而是使用数据库类型微整型TINYINT替代。

6. 枚举(enum)

enum(可能出现的元素列表),实现将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。

create table t4 (
    name varchar(32),
	sex enum('男','女','保密') default '保密'
);
-- 枚举类型的计数默认从1开始
insert into t4 set name='张三',sex=1;
-- 使用有效数据插入
insert into t4 set name='张三',sex='男';
-- 错误使用
insert into t4 set name='张三',sex='man'; -- 错误,没有该元素

优点:

  1. 限制了可选值
  2. 节省了空间
  3. 运行效率高

缺点:

  1. MySQL数据库枚举类型字段的元素增加,必须以尾部追加的方式,否则影响数据库提供数据服务;
  2. 枚举类型字段不再需要的元素,也不能进行删除,否则影响数据库提供数据服务;
  3. MySQL数据库枚举类型的字段定义属性元素值,不能随意调整其顺序,否则影响数据库提供数据服务;

枚举原理

枚举在进行数据规范的时候(定义的时候),系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中);然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统就自动将数字转换成字符串显示。因为我枚举实际存储的是数值,所以可以直接插入数值

7. 集合

SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。set的容纳范围为64个不同的成员…set其实和枚举差不多,set指定了一个集合范围,在我们插入数据的时候,需要插入在set范围之内的元素,如果插入了未被包含的元素,那么就会发出警告…

​ SET最多可以有64个不同的成员。类似于复选框, 有多少可以选多少。

create table t5 (
	name varchar(32),
	hobby set('吃','睡','玩','喝')
);
insert into t5 values('张三','睡,玩,吃,喝');
insert into t5 values('李四','睡,玩');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PHP和MySQL是一对常见的Web开发工具,用于构建动态网站。博客系统是Web开发中的一个常见项目,可以用来展示个人或组织的文章和信息。下面是一个简单的PHP+MySQL博客系统的实现步骤: 1. 数据库设计 首先,需要设计数据库结构。这个博客系统需要保存文章、用户和评论信息,可以设计三个表:articles、users和comments。 articles表: | 字段名 | 数据类型 | 说明 | | ------ | -------- | ---- | | id | int | 主键 | | title | varchar | 标题 | | content| text | 内容 | | author | int | 作者id | | created_at | datetime | 创建时间 | | updated_at | datetime | 更新时间 | users表: | 字段名 | 数据类型 | 说明 | | ------ | -------- | ---- | | id | int | 主键 | | username | varchar | 用户名 | | password | varchar | 密码 | | email | varchar | 电子邮件 | | created_at | datetime | 创建时间 | | updated_at | datetime | 更新时间 | comments表: | 字段名 | 数据类型 | 说明 | | ------ | -------- | ---- | | id | int | 主键 | | content| text | 内容 | | article_id | int | 文章id | | user_id | int | 用户id | | created_at | datetime | 创建时间 | | updated_at | datetime | 更新时间 | 2. 创建数据库连接 使用PHP代码创建与MySQL数据库的连接。 ```php $host = 'localhost'; $user = 'root'; $password = 'password'; $dbname = 'blog'; $conn = new mysqli($host, $user, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } ``` 3. 显示文章列表 使用SQL查询获取文章列表,并在网页上显示出来。 ```php $sql = "SELECT * FROM articles ORDER BY updated_at DESC"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "<a href='article.php?id=" . $row["id"] . "'>" . $row["title"] . "</a><br>"; } } else { echo "0 results"; } ``` 4. 显示文章内容 使用SQL查询获取指定文章的内容,并在网页上显示出来。 ```php $id = $_GET['id']; $sql = "SELECT * FROM articles WHERE id=" . $id; $result = $conn->query($sql); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "<h1>" . $row["title"] . "</h1>"; echo "<p>" . $row["content"] . "</p>"; } } else { echo "0 results"; } ``` 5. 发布文章 在网页上提供表单,用户可以输入文章标题和内容,将数据保存到数据库中。 ```php if ($_SERVER["REQUEST_METHOD"] == "POST") { $title = $_POST['title']; $content = $_POST['content']; $author = $_SESSION['user_id']; $now = date('Y-m-d H:i:s'); $sql = "INSERT INTO articles (title, content, author, created_at, updated_at) VALUES ('$title', '$content', '$author', '$now', '$now')"; if ($conn->query($sql) === TRUE) { echo "New article created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } } ``` 6. 用户认证 使用PHP代码实现用户登录和注册功能。 ```php session_start(); if ($_SERVER["REQUEST_METHOD"] == "POST") { // login $username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = $conn->query($sql); if ($result->num_rows > 0) { // set session variable $_SESSION['user_id'] = $result->fetch_assoc()['id']; header('Location: index.php'); exit(); } else { echo "Invalid username or password"; } } if ($_SERVER["REQUEST_METHOD"] == "POST") { // register $username = $_POST['username']; $password = $_POST['password']; $email = $_POST['email']; $now = date('Y-m-d H:i:s'); $sql = "INSERT INTO users (username, password, email, created_at, updated_at) VALUES ('$username', '$password', '$email', '$now', '$now')"; if ($conn->query($sql) === TRUE) { echo "New user created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } } ``` 7. 发表评论 在文章页面下方提供表单,用户可以输入评论内容,将数据保存到数据库中。 ```php if ($_SERVER["REQUEST_METHOD"] == "POST") { $content = $_POST['content']; $article_id = $_POST['article_id']; $user_id = $_SESSION['user_id']; $now = date('Y-m-d H:i:s'); $sql = "INSERT INTO comments (content, article_id, user_id, created_at, updated_at) VALUES ('$content', '$article_id', '$user_id', '$now', '$now')"; if ($conn->query($sql) === TRUE) { echo "New comment created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } } ``` 这是一个简单的PHP+MySQL博客系统的实现步骤,可以根据需要进行修改和扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值