54 mysql 基本数据类型 完整性约束

主要内容:

日期类型

   date    : YYYY-MM-DD

   time    :  HH:MM:SS

     datetime   :  YYYY-MM-DD HH:MM:SS

           year    :  YYYY

mysql> create table t9(d date,t time,dt datetime);
#查看表的结构
mysql> desc t9;
# 调用mysql自带的now()函数,获取当前类型指定的时间 如下结构
mysql> insert into t9 values(now(),now(),now());

      例题:

mysql>  create table student(id int, birth_y year, birth date , class_time time, now_time datatime);

mysql> insert into student values
    -> (1, '1995','1995-08-28','11:11:11',now());

mysql> select * from student;
+------+---------+------------+------------+---------------------+
| id   | birth_y | birt       | class_time | now_time            |
+------+---------+------------+------------+---------------------+
|    1 |    1995 | 1995-08-28 | 11:11:11   | 2018-09-18 20:25:17 |
+------+---------+------------+------------+---------------------+

char 类型和varchar类型

  char类型: 定长,简单粗暴, 浪费空间, 存取速度快

      字符长度范围:0-255(一个中文是一个字符, 是utf8编码的三个字节)

      存储: 在检索或者查询时,查出的结果会自动的删除尾部的元素,除非修改sql模式:让其现出原形;

  varchar : 变长,精准, 节省空间,存取速度慢;

      存储 : 真实的存储数据, 不会用空格填充,如果'ab  ',尾部的空格也会被存起来

    两个函数:

      length();     查看字节数

      char_length(); 查看字符数

1.char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形。

# 创建t1表,分别指明字段x为char类型,字段y为varchar类型
mysql> create table t1(x char(5),y varchar(4));
# char存放的是5个字符,而varchar存4个字符
mysql>  insert into t1 values('你瞅啥 ','你瞅啥 ');
# 在检索时char很不要脸地将自己浪费的2个字符给删掉了,装的好像自己没浪费过空间一样,而varchar很老实,存了多少,就显示多少
mysql> select x,char_length(x),y,char_length(y) from t1;
+-----------+----------------+------------+----------------+
| x         | char_length(x) | y          | char_length(y) |
+-----------+----------------+------------+----------------+
| 你瞅啥    |              3 | 你瞅啥     |              4 |
+-----------+----------------+------------+--------------
 #略施小计,让char现原形
 mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
#查看当前mysql的mode模式
mysql> select @@sql_mode;
#原形毕露了吧。。。。
mysql> select x,char_length(x) y,char_length(y) from t1;
+-------------+------+----------------+
| x           | y    | char_length(y) |
+-------------+------+----------------+
| 你瞅啥      |    5 |              4 |
+-------------+------+----------------+
# 查看字节数
#char类型:3个中文字符+2个空格=11Bytes
#varchar类型:3个中文字符+1个空格=10Bytes
mysql> select x,length(x),y,length(y) from t1;
+-------------+-----------+------------+-----------+
| x           | length(x) | y          | length(y) |
+-------------+-----------+------------+-----------+
| 你瞅啥      |        11 | 你瞅啥     |        10 |
+-------------+-----------+------------+-----------+

 枚举类型和集合类型

   枚举: enum单选只能在指定的范围内选一个值, 如男或者女

   集合: set  多选在给定的范围内选择一个或者多个值

create table consumer(
				id int unsigned,
				name char(20),
				sex enum('male','female') not null default 'male',
				fav set('抽烟','喝酒','烫头')
			);
			insert into consumer(id,name,sex,fav) values (1,'alex','female','抽烟,烫头');
			insert into consumer(id,name,sex) values (2,'alex2','female');wanzheng

 完整性约束

 not null  default(表示该字段不能为空,默认值)

unique(表示该字段的值是唯一)

primary key(标识该字段为该表的主键, 可以唯一的表示记录)

auto-increment (标识该字段的值是自增整数类型)

foreign key(标识该字段为该表的外键) 

 null : 表示空, 非字符串

 

猜你喜欢

转载自www.cnblogs.com/gyh412724/p/9671729.html