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)