day36 数据库表操作 数据类型 完整性约束

时间:2023-03-09 02:18:18
day36 数据库表操作 数据类型 完整性约束

今日内容

1.存储引擎表类型

2.数据类型

3.完整性约束

1.存储引擎表类型

day36 数据库表操作 数据类型 完整性约束

指令:

1、show engines;#查看MySQL所有的引擎,

2、show variables like "storage_engine%";查看当前正在使用的引擎

储存引擎的使用

1.创建表时指定引擎

create table innodb_t2(id int) engine=innodb;

2.在配置文件中指定默认的存储引擎

linux:vim /etc/my.cnf   windows:my.ini文件
[mysqld]
default-storage-engine=INNODB #配置默认引擎,现在用的mysql默认基本都是InnoDB,所以其实都可以不用配置了
innodb_file_per_table=1 #表示独立表空间存储,可以不写

3.不同引擎在创建表的时候生成文件的不同

  创建四个表,分别使用innodb ,myisam ,memory ,balckhole 存储引擎,进行插入数据

#下面是使用四个不同的引擎来创建的表
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
create table t4(id int)engine=blackhole;

2.数据类型

数字类型:

  整数:tinyint(极小),smallint(小),mediumint(中等), int ,bigint(大的)

        tinyint[(m)] [unsigned] [zerofill]

            小整数,数据类型用于保存一些范围的整数数值范围:
有符号:
-128 ~ 127
无符号:
0 ~ 255 PS: MySQL中无布尔值,使用tinyint(1)构造。 int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围:
有符号:
-2147483648 ~ 2147483647
无符号:
0 ~ 4294967295 bigint[(m)][unsigned][zerofill]
大整数,数据类型用于保存一些范围的整数数值范围:
有符号:
-9223372036854775808 ~ 9223372036854775807
无符号:
0 ~ 18446744073709551615

  小数:

  float: 在位数比较短的情况下不准确

  double: 在位数比较长的情况下不准确  

  decimal: (如果用小数,推荐使用decimal)

    精准  内部原理是以字符串形式去存

字符串类型:

  char(10) : 定长,简单粗暴,浪费空间,存储速度快

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

    比如: root 存储为root000000

  varchar(10) : 变长,精准,节省空间,存储速度慢

  字符长度范围: 0-65535

  注: varchar数据会储存真实的数据,例如' ab ',前后的空格也是会被储存起来

  sql优化 : 创建表时,定长的类型往前放(比如性别),变长的往后放(比如地址或者描述信息)

  

时间类型:

  类型:date ,time ,datetime ,imestamp,year

  最常用的 : datatime (年月日 时分秒)

枚举类型和集合类型 :(简单的数枚举类型是单选,集合类型是多选)

枚举类型 (enum)

create table t1(
name varchar(10),
size enum('x_small','small','mediun')
); size 结果为从三个中选择一个

集合类型(set或myset)

create table myset (col set('a', 'b', 'c', 'd'));
insert into myset (col) values ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

3.约束

作用: 保证数据的完整性和一致性

约束条件的分类

primary key (PK)    标识该字段为该表的主键,可以唯一的标识记录
foreign key (FK) 标识该字段为该表的外键(一对一,一对多,多对多)
not null 标识该字段不能为空
null 标识该字段可以为空
unique key (UK) 标识该字段的值是唯一的
auto_increment 标识该字段的值自动增长(整数类型,而且为主键)
default 为该字段设置默认值 unsigned 无符号
zreofill 使用0填充