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

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

数据类型:  1.字符型  2.整型  3.浮点型  4.日期时间型

数据表操作:  1.插入记录  2.查找记录

记录操作:  1.创建数据表  2.约束的使用

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  打开数据库:
mysql> USE <数据库名称>;
  • 显示当前用户所打开的数据库:
mysql> SELETE DATABASES;

创建数据库表

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    -> );
  • 查看数据表列表
mysql> SHOW TABLES;
  • 查看其他数据库的数据表列表,例查看mysql数据库
mysql> SHOW TABLES FROM mysql;
  • 查看数据表的结构
mysql> SHOW COLUMNS FROM t1;

 3.MySQL记录的插入与查找

记录插入:

 INSERT [INTO] tbl_name [(col_name,...0] VALUES (val,...)
  • 例:
mysql> INSERT t1 VALUES(‘Tom‘,25,7863.25);

记录查找:

SELECT expr,... FROM tbl_name
  • 例:
SELECT * FROM t1;

4.MySQL空值与非空

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

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

例:

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

例,创建自动编号表:

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    |                |+----------+----------------------+------+-----+---------+----------------+

例,插入记录,查看表:

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:
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    |                |+----------+---------------------+------+-----+---------+----------------+
  • 例,插入记录:
mysql> INSERT tb4(username,age) VALUES(‘Tom‘,25);
Query OK, 1 row affected (0.00 sec)
  • 例,再插入一条username同时‘Tom‘的记录,提示重复:
mysql> INSERT tb4(username,age) VALUES(‘Tom‘,23);
ERROR 1062 (23000): Duplicate entry ‘Tom‘ for key ‘username‘

8.MySQL默认约束

*** 默认值

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

例:

  • 例,创建数据表tb6,设置sex列的默认值为3:
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赋值:
mysql> INSERT tb6(username) VALUES(‘Tom‘);
mysql> INSERT tb6(username) VALUES(‘John‘);
mysql> INSERT tb6(username) VALUES(‘Mimiter‘);
  • 例,查看数据表,sex自动为默认值3:
mysql> SELECT * FROM tb6;                     
+----+----------+------+| id | username | sex  |+----+----------+------+|  1 | Tom      | 3    ||  2 | John     | 3    ||  3 | Mimiter  | 3    |+----+----------+------+
时间: 2024-12-25 19:24:54

MySQL学习笔记-数据类型与操作数据表的相关文章

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

MySQL学习笔记02_数据库和表的基本操作

02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specification]...] 解释: [IF NOT EXISTS]创建时提前检查一下是否存在数据库 create_specification:(创建条件) [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name CHAR

MySQL学习笔记_4_MySQL创建数据表(下)

 MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines; #查看MySQL所支持的存储引擎storageengine 3. showvariables like 'table_type'; #查看默认数据表类型 MyISAM和InnoDB最常用的存储引擎[表类型] 4.指定表类型[使用哪一个存储引擎]: createtable ...() eng

MYSQL学习笔记——数据类型

mysql的数据类型可以分为三大类,分别是数值数据类型.字符串数据类型以及日期时间数据类型. 数值数据类型                                                                                 数值类型又可以分为整型.浮点类型.Decimal. 整型 mysql的整型可以分为TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT,下表给出了每个类型的存储空间大小和数值表示范围. 类型 字节 最小值 最大

MySQL学习笔记_2_MySQL创建数据表(上)

MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][索引], - 字段名n列的类型[属性][索引], )[表属性][表字符集]: [表名称,字段名需要自己来命名] [SQL语句并不区分大小写,但是一个文件名:在Windows下不区分大小写,但是在 Linux/UNIX下是区分大小写的] [命名规则: 1.有意义(英文,英文组合或英文缩写) 2.自己定

MySQL学习笔记_3_MySQL创建数据表(中)

 MySQL创建数据表(中) 三.数据字段属性 1.unsigned[无符号] 可以让空间增加一倍 比如可以让-128-127增加到0-255 注意:只能用在数值型字段 2.zerofill[前导零] e.g. createtable if not exists t2(num int(5) zerofill,price float(7,2)zerofill,name varchar(10)); 注意:只能用在数值型字段,自动加上无符号属性 3.auto_increment[自增] #auto

MySQL学习笔记——数据类型之浮点数类型和定点数类型

本文大部分内容摘自<MySQL入门很简单>. 整数类型 字节数 负数的取值范围 非负数的取值范围 float 4 -3.402823466E+38~-1.175494351E-38 0和1.175494351E-38~3.402823466E+38 double 8 -1.7976931348623157E+308~-2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308 decimal(m,d)或de

(MYSQL学习笔记2)多表连接查询

3种连接方式的区别: INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录. 3个表连接查询,语句如下: SELECT a.YHID,a.TDID,b.YHMC,b.YHZH,c.TDMC FROM (km_tdcy a LEFT JOIN km_xtyh b ON a.YHID=b

MySQL学习笔记-操作数据表中的记录

MySQL学习笔记-操作数据表中的记录 1.插入记录 INSERT INSERT [INTO] tbl_name [(col_name,...)] {VAULES|VALUE} ({expr|DEFAULT},...),(...),... 例,插入单条记录: mysql> USE testDatabase changed mysql> CREATE TABLE users(    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,