MySQL数据表

  • 目录
  • 一. 什么是表
  • 二. MySQL中的数据类型
  • 三.MySQL中的存储引擎
  • 3.1 什么是存储引擎
  • 3.2 常用的存储
  • 3.3 查看MySQL存储引擎
  • 四. 创建数据表
  • 五. 测试数据类型
  • 5.1 整数
  • 5.2 浮点型
  • 5.3 字符串类型
  • 5.4 时间类型


目录

一. 什么是表

数据表是数据库最重要的组成部分之一,是其他对象的基础
数据表是存储数据的数据结构
数据表是包含了特定实体类型的数据
数据表由行(row)和列(column)构成的二维网络
数据表一定先有表结构,再有数据
数据表至少有一列,可以没有行或者多行
数据表名称要求唯一,而且不要包含特殊字符

二. MySQL中的数据类型

整形、浮点类型、字符串类型、日期时间类型

三.MySQL中的存储引擎

3.1 什么是存储引擎

存储引擎就是指表的类型,数据库的存储类型决定了表在计算机中的存储方式。用户可以根据不同的存储方式,是否进行事物处理等来选择合适的存储引擎。

3.2 常用的存储

InnoDB存储引擎,一般用于较高事务处理的情景
MyISAM存储引擎,一般用于查询和写入速度较快的情景
MEMORY存储引擎,一般用于需要数据库查询的临时表的情景

3.3 查看MySQL存储引擎

SHOW ENGINES 查看支持的存储引擎
SHOW VARIABLES LIKE 'have%' 查看显示支持的存储引擎信息
SHOW VARIABLES LIKE 'storage_engine' 查看默认的存储引擎

四. 创建数据表

CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型 [完整性约束条件]...)ENGINE=引擎名称 CHARSET=‘编码方式’;
--创建test1数据库
CREATE DATABASE IF NOT EXISTS test1;
USE test1;
 
--创建学员表user
 
--表头信息:
--编号id
--用户名username
--年龄age
--性别sex
--邮箱email
--生日birth
--薪水salary
--电话tel
--是否结婚
 
--COMMENT 字段注释
 
CREATE TABLE IF NOT EXISTS `user`(
id SMALLINT,
username VARCHAR(20),
age TINYINT,
sex ENUM('male','female','secrete'),
email VARCHAR(50),
addr VARCHAR(200),
birth YEAR,
salary FLOAT(8,2),
tel INT,
married TINYINT(1) 
 
)ENGINE = INNODB;
 
--查看表的结构
DESC user;
DESCRIBE user;
SHOW COLUMNS FROM user;
mysql> DESC user;
+----------+---------------------------------+------+-----+---------+-------+
| Field    | Type                            | Null | Key | Default | Extra |
+----------+---------------------------------+------+-----+---------+-------+
| id       | smallint(6)                     | YES  |     | NULL    |       |
| username | varchar(20)                     | YES  |     | NULL    |       |
| age      | tinyint(4)                      | YES  |     | NULL    |       |
| sex      | enum('male','female','secrete') | YES  |     | NULL    |       |
| email    | varchar(50)                     | YES  |     | NULL    |       |
| addr     | varchar(200)                    | YES  |     | NULL    |       |
| birth    | year(4)                         | YES  |     | NULL    |       |
| salary   | float(8,2)                      | YES  |     | NULL    |       |
| tel      | int(11)                         | YES  |     | NULL    |       |
| married  | tinyint(1)                      | YES  |     | NULL    |       |
+----------+---------------------------------+------+-----+---------+-------+
10 rows in set (0.02 sec)

五. 测试数据类型

5.1 整数

--1.测试整数
CREATE TABLE test1(
num1 TINYINT,
num2 SMALLINT,
num3 MEDIUMINT,
num4 INT,
num5 BIGINT
);
 
--向表中插入记录 INSERT tb1_name VALUE|VALUES(值,...);
INSERT test1 VALUES(-128,-32768,-8388608,-2147483648,-9223372036854775808);
 
--查询表中所有记录
SELECT * FROM test1;
mysql> SELECT * FROM test1;
+------+--------+----------+-------------+----------------------+
| num1 | num2   | num3     | num4        | num5                 |
+------+--------+----------+-------------+----------------------+
| -128 | -32768 | -8388608 | -2147483648 | -9223372036854775808 |
+------+--------+----------+-------------+----------------------+
1 row in set (0.00 sec)
--2.无符号UNSIGNED(多是修饰字段,也可叫做字段属性)
CREATE TABLE test2(
num1 TINYINT UNSIGNED,
num2 TINYINT 
);
 
--插入一个值并查询
INSERT test2 VALUES(0,-12);
 
SELECT * FROM test2;
mysql> SELECT * FROM test2
    -> ;
+------+------+
| num1 | num2 |
+------+------+
|    0 |  -12 |
+------+------+
1 row in set (0.00 sec)
--零填充ZEROFTLL
CREATE TABLE test3(
num1 TINYINT ZEROFILL,
num2 SMALLINT ZEROFILL,
num3 MEDIUMINT ZEROFILL,
num4 INT ZEROFILL,
num5 BIGINT ZEROFILL
);
--插入一条记录并查询
INSERT test3 VALUES(1,1,1,1,1);
SELECT * FROM test3;
mysql> SELECT * FROM test3;
+------+-------+----------+------------+----------------------+
| num1 | num2  | num3     | num4       | num5                 |
+------+-------+----------+------------+----------------------+
|  001 | 00001 | 00000001 | 0000000001 | 00000000000000000001 |
|  001 | 00001 | 00000001 | 0000000001 | 00000000000000000001 |
+------+-------+----------+------------+----------------------+
2 rows in set (0.00 sec)

5.2 浮点型

--测试浮点类型
CREATE TABLE test4(
num1 FLOAT(6,2),--保留两位小数点,定点四舍五入
num2 DOUBLE(6,2),
num3 DECIMAL(6,2) --内部以字符串形式存储
);
--插入一条记录并查看
INSERT test4 VALUES(3.1415,3.1415,3.1415);
mysql> INSERT test4 VALUES(3.1415,3.1415,3.1415);
Query OK, 1 row affected, 1 warning (0.02 sec)
 
mysql> SHOW WARNINGS;
+-------+------+-------------------------------------------+
| Level | Code | Message                                   |
+-------+------+-------------------------------------------+
| Note  | 1265 | Data truncated for column 'num3' at row 1 |
+-------+------+-------------------------------------------+
1 row in set (0.00 sec)
--查询一个浮点数
SELECT * FROM test4 WHERE num3=3.14;
mysql> SELECT * FROM test4 WHERE num3=3.14;
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
| 3.14 | 3.14 | 3.14 |
+------+------+------+
1 row in set (0.00 sec)
--查询一个浮点数
--定点数内部以字符串形式存储
SELECT * FROM test4 WHERE num3='3.14';
mysql> SELECT * FROM test4 WHERE num3='3.14';
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
| 3.14 | 3.14 | 3.14 |
+------+------+------+
1 row in set (0.00 sec)

5.3 字符串类型

--测试字符串
--CHAR定长字符串,占用空间大,速度快
--VARCHAR变长字符串,占用空间小,速度慢
CREATE TABLE IF NOT EXISTS test5(
str1 CHAR(5),
str2 VARCHAR(5)
);
--VALUES不会去掉空格,ALUES默认去掉空格(字符串末尾的空格)
INSERT test5 VALUES('1  ','1  ');
mysql> SELECT CONCAT(str1,'-'),CONCAT(str2,'-') FROM test5;
+------------------+------------------+
| CONCAT(str1,'-') | CONCAT(str2,'-') |
+------------------+------------------+
| 1-               | 1-               |
| 12345-           | 12345-           |
| -                | -                |
| 1-               | 1  -             |
+------------------+------------------+
4 rows in set (0.00 sec)
--VALUES不会去掉空格,ALUES不会去掉空格(字符串前的空格)
INSERT test5 VALUES('  a','  a');
SELECT CONCAT('-',str1),CONCAT('-',str2) FROM test5;
mysql> INSERT test5 VALUES('  a','  a');
Query OK, 1 row affected (0.04 sec)
mysql> SELECT CONCAT('-',str1),CONCAT('-',str2) FROM test5;
+------------------+------------------+
| CONCAT('-',str1) | CONCAT('-',str2) |
+------------------+------------------+
| -1               | -1               |
| -12345           | -12345           |
| -                | -                |
| -1               | -1               |
| -  a             | -  a             |
+------------------+------------------+
5 rows in set (0.00 sec)
TEXT(保存大量文本,只能存储文本字符;text不能有默认值),它们3个存储和检索数据的方式都不一样,数据检索的效率CHAR>VACHAR>TEXT,为以后优化数据时,能不用text就不用text。
mysql> CREATE TABLE test6(
    -> str1 TEXT
    -> );
Query OK, 0 rows affected (0.03 sec)
mysql> DESC test6;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| str1  | text | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)
插入值并查看:
mysql> INSERT test6 VALUES('你好吗,我很好!');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test6;
+--------------------------+
| str1                     |
+--------------------------+
| 你好吗,我很好!         |
+--------------------------+
1 row in set (0.00 sec)
枚举类型:
--枚举类型
CREATE TABLE IF NOT EXISTS test7(
sex ENUM('男','女','保密    ')
);
 
--注意:只能插入列举出来的值
INSERT test7 VALUES('男     ');
INSERT test7 VALUES('女     ');
INSERT test7 VALUES('保密');
mysql> SELECT * FROM test7;
+--------+
| sex    |
+--------+
| 男     |
| 女     |
| 保密   |
+--------+
3 rows in set (0.00 sec)
--枚举类型都有序号,这里相当于插入第二个枚举类型'女'
INSERT test7 VALUES(2);
mysql> SELECT * FROM test7;
+--------+
| sex    |
+--------+
| 男     |
| 女     |
| 保密   |
| 女     |
+--------+
4 rows in set (0.00 sec)
集合类型:
--集合类型
CREATE TABLE IF NOT EXISTS test8(
fav SET('A','B','C','D')
);
mysql> DESC test8;
+-------+----------------------+------+-----+---------+-------+
| Field | Type                 | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| fav   | set('A','B','C','D') | YES  |     | NULL    |       |
+-------+----------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
--多个数据用逗号分隔,顺序改变
INSERT test8 VALUES('A,C,D');
INSERT test8 VALUES('D,B,A');
mysql> INSERT test8 VALUES('A,C,D');
Query OK, 1 row affected (0.05 sec)
 
 
mysql> 
mysql> INSERT test8 VALUES('D,B,A');
Query OK, 1 row affected (0.00 sec)
 
 
mysql> SELECT * FROM test8;
+-------+
| fav   |
+-------+
| A,C,D |
| A,B,D |
+-------+
2 rows in set (0.00 sec)
--保存值以二进制的形式保存,这里相当于插入011,也就是前两个爱好
INSERT test8 VALUES(3);
mysql> SELECT * FROM test8;
+-------+
| fav   |
+-------+
| A,C,D |
| A,B,D |
| A,B   |
+-------+
3 rows in set (0.00 sec)

5.4 时间类型

--时间类型
CREATE TABLE IF NOT EXISTS test9(
birth YEAR
);
 
--插入年份
INSERT test9 VALUES(1901);
mysql> SELECT * FROM test9;
+-------+
| birth |
+-------+
| 1901 |
+-------+
--测试TIME
CREATE TABLE IF NOT EXISTS test10(
test TIME
);
 
INSERT test10 VALUES('1 12:12:12');
mysql> SELECT * FROM test10;
+----------+
| test    |
+----------+
| 36:12:12 |
+----------+
1 row in set (0.00 sec)