个人博客
https://blog.csdn.net/cPen_web
数据类型
数据类型 - 日期和时间类型
https://www.runoob.com/mysql/mysql-data-types.html
年 year
月 month
日 day
小时 hour
分钟 minute
秒 second
timestamp --> 时间戳:距离1970-1-1 0:0:0为起点 有多少秒 格林尼治时间
1970-01-01 00:00:00/2038 到2038年存放不了;4个字节
root@sanchuang mysql>create table t7(name varchar(20),birthday date,check_sc timestamp);
root@sanchuang mysql>desc t7;
+----------+-------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+-------------------+-----------------------------+
| name | varchar(20) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| check_sc | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------+-------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)
root@sanchuang mysql>insert into t7(name,birthday,check_sc) values('cali','1984-10-01',now());
root@sanchuang mysql>select * from t7;
+------+------------+---------------------+
| name | birthday | check_sc |
+------+------------+---------------------+
| cali | 1984-10-01 | 2021-02-15 14:40:52 |
+------+------------+---------------------+
1 row in set (0.00 sec)
root@sanchuang mysql>insert into t7(name,birthday,check_sc) values('rose','1984-10-01','2038-1-1 12:22:22');
#示例:now()函数 获取当前时间
root@(none) mysql>select now();
字符串类型
https://www.runoob.com/mysql/mysql-data-types.html
字符串
char
varchar
text
blob 二进制的文本
tinyblob
MEDIUMBLOB
LONGBLOB
blob
enum 枚举
set 集合
binary和varbinary
一个英文字母占1个字节
1个汉字,如果是utf8编码,占3个字节
root@sanchuang mysql>select name,length(name),char_length(name) from t8;
+-----------+--------------+-------------------+
| name | length(name) | char_length(name) |
+-----------+--------------+-------------------+
| feng | 4 | 4 |
| 冯德勇 | 9 | 3 |
+-----------+--------------+-------------------+
2 rows in set (0.00 sec)
length(name)统计字符串的存储的字节数
char_length(name)统计的是字符的个数
char和varchar有什么区别?
存储方式
char 固定长度的字符串类型 character 字符 --> 在存储的时候,不够固定长度,就在前面填充空格,达到固定长度
'feng' 但是我的表结构里的长度是30,在存储feng字符串的时候,会在前面填充26个空格来达到30个字符的长度
varchar 可变长的字符串类型 variable character
'feng' 我的表结构里的长度是30,但是只是存储feng这4个字符,不填充空格
char比varchar在长度没有达到规定的时候,更加消除磁盘空间些。如果达到了规定长度,varchar要比char多一个字节的存储空间
虽然VARCHAR数据类型可以节省存储空间,提高数据处理的效率。但是其可变长度带来的一些负面效应,有时候会抵消其带来的优势。
char存储定长数据很方便,char字段上的索引效率很高。
长度方面
char 最大长度255 varchar 最大长度是65,535
检索的方式不同
一个长度CHAR列被固定在创建表声明的长度。长度可以是0到255之间的任何值。CHAR 存储值时,将在它们的右边填充空格以达到指定的长度。当CHAR被检索到的值,拖尾的空格被删除
Value | CHAR(4) | Storage Required | VARCHAR(4) | Storage Required |
---|---|---|---|---|
‘’ | ’ ’ | 4 bytes | ‘’ | 1 byte |
‘ab’ | 'ab ’ | 4 bytes | ‘ab’ | 3 bytes |
‘abcd’ | ‘abcd’ | 4 bytes | ‘abcd’ | 5 bytes |
‘abcdefgh’ | ‘abcd’ | 4 bytes | ‘abcd’ | 5 bytes |
枚举类型 ENUM
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'), ('polo shirt','small');
SET类型
集合类型:插入数据的时候,必须是集合里有的内容,如果没有,就会报错,不能插入,而且插入重复的数据,只显示一个
root@sanchuang mysql>CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
root@sanchuang mysql>INSERT INTO myset (col) VALUES
-> ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
root@sanchuang mysql>select * from myset;
+------+
| col |
+------+
| a,d |
| a,d |
| a,d |
| a,d |
| a,d |
+------+
5 rows in set (0.00 sec)
如何知道一张表的结构?
1 .desc t1
2 .show create table t1
创建表的语法
#示例:if not exists
如果要创建的表已经存在,强制不显示错误消息
root@sanchuang mysql>create table if not exists sanchuang.chenpeng(id int primary key,name varchar(10) not null);
root@sanchuang mysql>desc chenpeng;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(10) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
#示例:查看警告信息
root@sanchuang mysql>show warnings;
show命令汇总:
1 .show databases;
2 .show tables;
3 .show variables;
4 .show processlist; #注&#