MySQL学习笔记 数据类型与操作数据表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

1.数据类型    

    【1】整型:

数据类型 存储范围 字节
TINYINT 有符号型:-128~127(-2^7~2^7 -1),无符号型0~255(0~2^8 -1) 1
SMALLINT 有符号型:-2^15~2^15 -1,无符号型0~2^16 -1 2
MEDIUMINT 有符号型:-2^23~2^23 -1,无符号型0~2^24 -1 3
INT 有符号型:-2^31~2^31 -1,无符号型0~2^32 -1 4
BIGINT 有符号型:-2^63~2^63 -1,无符号型0~2^64 -1 8




    【2】浮点型

数据类型 存储范围 字节
FLOAT[(M,D)] -3.402823466E+38~-1.175494351E-38、0和 1.175494351E-38 ~3.402823466E+38 4
DOUBLE[(M,D)] 2.2250738585072014E-308~ 1.7976931348623157E+308 8





【注】M是数字总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保值。单精度浮点数值精确到大约7位小数位。E+38 表示10^38    

    【3】日期时间型

列类型 字节 存储范围
YEAR 1 YEAR[(2|4)] 缺省为4位格式,4位格式取值范围为1901 - 2155,
TIME 3 -838:59:59~838:59:59
DATE 3 1000-1-1~9999-12-31
DATETIME 8 日期时间, 1000-1-1 00:00:00~9999-12-31 23:59:59
TIMESTAMP 4 时间戳,1970-1-1 00:00~2037年的某个时刻





【注】实际开发中“日期时间型”用得比较少,因为考虑到跨时区的问题,一般会用数字类型取代

MySQL本身Y2K安全的,但是呈交给MySQL的输入值可能不是。一个包含2位年份值的任何输入是由二义性的,因为世纪是未知的。这样的值必须被解释成4位形式,因为MySQL内部使用4位存储年份。

对于DATETIME, DATE, TIMESTAMP和YEAR类型,MySQL使用下列规则的解释二义性的年份值:

-在范围00-69的年值被变换到2000-2069。

-在范围70-99的年值被变换到1970-1999。

记得这些规则仅仅提供对于你数据的含义的合理猜测。如果MySQL使用的启发规则不产生正确的值,你应该提供无二义的包含4位年值的输入。

    【4】字符型

列类型 存储需求
CHAR(M) (定长,不足用空格自动补全)M个字节,0<=M<=255
VARCHAR(M) (变长,输入多少就是多少)L+1个字节,其中L<=M,0<=M<=65535
TINYTEXT L+1个字节,其中L<2^8 (1个字节表示最大存储范围,下同)
TEXT L+2个字节,其中L<2^16
MEDIUMTEXT L+3个字节,其中L<2^24
LONGTEXT L+4个字节,其中L<2^32
ENUM('value1','value2',…) (最终选择其中的一个value)1或2个字节,取决于枚举值的个数(最多65535个)
SET ('value1','value2',…) (集合,可在其中做任意的排列组合)1、2、3、4或者8个字节,取决于set成员的




CHAR(M) :定长类型,定义数据为5个字节,当需要存储abc3个字节的时候,会以2个空格的形式补满5个字节。

VARCHAR(M) :变长类型,输入abc3个字节就存储3个字节,不会存储多余的数据。

2.数据表操作

    【1】概述

数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础。

    【2】命令

  USE  打开数据库:

1
mysql> USE <数据库名称>;

        

  • 显示当前用户所打开的数据库:

1
mysql> SELETE DATABASES;
  • 创建数据库表

1
2
3
4
5
6
7
8
CREATE TABLE [IF NOT EXISTS] table_name (column_name列名称 data_type数据类型,....)
例:创建数据库表:列名称为username和age和salary
mysql> USE t1;
mysql> CREATE TABLE IF NOT EXISTS t1(
     -> username VARCHAR(20),
     -> age TINYINT UNSIGNED,
     -> salary FLOAT(8,2) UNSIGNED
     -> );
  • 查看数据表列表

1
mysql> SHOW TABLES;
  • 查看其他数据库的数据表列表,例查看mysql数据库

1
mysql> SHOW TABLES FROM mysql;
  • 查看数据表的结构

1
mysql> SHOW TABLES FROM mysql;


 3.MySQL记录的插入与查找

    记录插入:

1
INSERT [INTO] tbl_name [(col_name,...0] VALUES (val,...)

           

    例:

1
mysql> INSERT t1 VALUES( 'Tom' ,25,7863.25);

    记录查找:

1
SELECT  expr ,... FROM tbl_name

            例:

1
SELECT * FROM t1;

4.MySQL空值与非空

*** NULL ,字段值可以为空

*** NOT NULL ,字段值禁止为空

    例:

1
2
3
4
5
6
mysql> USE t2;
mysql> CREATE TABLE IF NOT EXISTS tb2(
     -> username VARCHAR(20) NOT NULL,
     -> age TINYINT UNSIGNED NULL,
     -> salary FLOAT(8,2) UNSIGNED
     -> );

5.MySQL主键约束

*** 主键约束

*** 每张数据表只能存在一个主键

*** 主键保证记录的唯一性

*** 主键自动为NOT NULL

6.MySQL自动编号 AUTO_INCREMENT

*** 自动编号,且必须与主键组合使用

*** 默认情况下,起始值为1,每次的增量为1

    例,创建自动编号表:

1
2
3
4
5
6
7
8
9
10
11
mysql> CREATE TABLE tb3(
     ->  id  SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
     -> username VARCHAR(30) NOT NULL
     -> );
mysql> SHOW COLUMNS FROM tb3;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
id        | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(30)          | NO   |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+

    例,插入记录,查看表:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> INSERT tb3(username) VALUES( 'Tom' )
mysql> INSERT tb3(username) VALUES( 'John' )
mysql> INSERT tb3(username) VALUES( 'Rose' )
mysql> INSERT tb3(username) VALUES( 'Dimitar' )
mysql> SELECT * FROM tb3;
+----+----------+
id  | username |
+----+----------+
|  1 | Tom      |
|  2 | John     |
|  3 | Rose     |
|  4 | Dimitar  |
+----+----------+

  7.MySQL唯一约束 UNIQUE KEY

*** 唯一约束

*** 唯一约束可以保证记录的唯一性

*** 唯一约束的字段可以为空值(NULL)

*** 每张数据表可以存在多个唯一约束

    例:

创建数据表tb4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> CREATE TABLE tb4(
     ->  id  SMALLINT AUTO_INCREMENT PRIMARY KEY, 
     -> username VARCHAR(20) NOT NULL UNIQUE KEY, 
     -> age TINYINT UNSIGNED
     -> );
     
mysql> SHOW COLUMNS FROM tb4;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
id        | smallint(6)         | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)         | NO   | UNI | NULL    |                |
| age      | tinyint(3) unsigned | YES  |     | NULL    |                |
+----------+---------------------+------+-----+---------+----------------+

        

  • 插入记录:

1
2
mysql> INSERT tb4(username,age) VALUES( 'Tom' ,25);
Query OK, 1 row affected (0.00 sec)
  • 再插入一条username同时‘Tom'的记录,提示重复:

1
2
mysql> INSERT tb4(username,age) VALUES( 'Tom' ,23);
ERROR 1062 (23000): Duplicate entry  'Tom'  for  key  'username'

   

8.MySQL默认约束

*** 默认值

*** 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

    例:

创建数据表tb6,设置sex列的默认值为3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> CREATE TABLE tb6(
     ->  id  SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
     -> username VARCHAR(20) NOT NULL UNIQUE KEY,
     -> sex ENUM( '1' , '2' , '3' ) DEFAULT  '3'
     -> );
     
mysql> SHOW COLUMNS FROM tb6;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
id        | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)          | NO   | UNI | NULL    |                |
| sex      | enum( '1' , '2' , '3' )    | YES  |     | 3       |                |
+----------+----------------------+------+-----+---------+----------------+

        

  • 插入记录,不给sex赋值:

1
2
3
mysql> INSERT tb6(username) VALUES( 'Tom' );
mysql> INSERT tb6(username) VALUES( 'John' );
mysql> INSERT tb6(username) VALUES( 'Mimiter' );
  • 查看数据表,sex自动为默认值3:

1
2
3
4
5
6
7
8
mysql> SELECT * FROM tb6;                     
+----+----------+------+
id  | username | sex  |
+----+----------+------+
|  1 | Tom      | 3    |
|  2 | John     | 3    |
|  3 | Mimiter  | 3    |
+----+----------+------+






      本文转自谢育政 51CTO博客,原文链接:http://blog.51cto.com/kurolz/1876234 ,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
SQL 关系型数据库 MySQL
DQL操作MySql
DQL操作MySql
9 0
|
4天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
13天前
|
SQL 存储 关系型数据库
【MySQL-6】DDL的表结构的数据类型盘点&案例演示
【MySQL-6】DDL的表结构的数据类型盘点&案例演示
|
13天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
14天前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
30 0
|
14天前
|
关系型数据库 MySQL Java
使用shardingjdbc执行MySQL游标操作时报错
使用shardingjdbc执行MySQL游标操作时报错
|
14天前
|
存储 SQL 关系型数据库
mysql查询数据库表大小怎么操作
mysql查询数据库表大小怎么操作
|
14天前
|
SQL 关系型数据库 MySQL
使用Python的pymysql库连接MySQL,执行CRUD操作
使用Python的pymysql库连接MySQL,执行CRUD操作:安装pymysql,然后连接(host=&#39;localhost&#39;,user=&#39;root&#39;,password=&#39;yourpassword&#39;,database=&#39;yourdatabase&#39;),创建游标。查询数据示例:`SELECT * FROM yourtable`;插入数据:`INSERT INTO yourtable...`;更新数据:`UPDATE yourtable SET...`;删除数据:`DELETE FROM yourtable WHERE...`。
27 0
|
15天前
|
DataWorks Shell 对象存储
DataWorks产品使用合集之在 DataWorks 中,有一个 MySQL 数据表,数据量非常大且数据会不断更新将这些数据同步到 DataWorks如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
31 3
|
15天前
|
存储 SQL 关系型数据库
【mysql】mysql中的数据类型知多少?
【mysql】mysql中的数据类型知多少?