MySQL의 항목 (엔진, 데이터 유형, 제약)

MySQL의 항목 (B)

엔진의 테이블 : 데이터 구동 방식 - 데이터베이스 최적화

# 概要:引擎是建表规定的,提供给表使用,不是数据库的

# 展示所有引擎
show engines;

# innodb(默认): 支持事务, 行级锁, 外键
create table t11(id int)engine=innodb;

# myisam: 查询效率要优于innodb, 当不需要支持事务, 行级锁, 外键, 可以通过设置myisam来优化数据库
create table t12(id int)engine=myisam;

# blackhole:黑洞,存进去的数据都会消失(可以理解不存数据)
create table t13(id int)engine=blackhole;

# memory:表结构是存储在硬盘上的,但是表数据全部存储在内存中
create table t14(id int)engine=memory;

안전 모드 데이터베이스

'''
安全与非安全
'''

MySQL의 데이터 유형

처음에 우리는 주요 유형은 무엇 MySQL은 데이터를 보면 :

정수

MySQL은 다음과 같은 범주로 정수, 그들 사이의 유일한 차이점은 그냥 동일한 범위를 나타냅니다 :

  • TINYINT 1 바이트, -128 내지 127의 범위
  • SMALLINT : 2 바이트 -32768에서 32767의 범위
  • MEDIUMINT : 3 바이트
  • INT : 4 바이트
  • BIGINT : 8 바이트 디지털 시간 권장 특히 긴 문자열

다음 메인 주에서 정수 유형 :

  1. 부호 :이 유형의 데이터의 길이 부호 유형 (비 - 음성)도 표시와 같이 증가 될 수있다.
  2. ZEROFILL :이 속성은 제로 (만 표시)로 채워진 불충분 디지털 디스플레이 공간을 나타내고, ZEROFILL 파라미터를 사용할 때, MySQL이 자동 부호 특성을 추가하는 것을 알 수있다.
  3. 유형 정수도 있습니다 AUTO_INCREMENT의 자려 필드가 될 수 속성 필드.
  4. 속성 위의 플로트는 사용할 수 있지만 향후 업데이트에 사용하지 않는 것이 좋습니다 이러한 특성의 플로트를 제거합니다. 명세서 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html

플로트

M은 비트 (정밀도)의 총 개수이고, D는 소수점 비트 (10 진수)의 수이다. 그리고 소수점은 (음수) - 기호 M.에 포함되지

(M, D) 더블 (M, D) 구문하지만, 플로트가 있지만이 데이터 마이그레이션에 영향을 미칠 수 있기 때문에 여전히 추천 매우되지 않으며,이 구문은 MySQL의 이후 버전에서 제거 될 예정입니다!

플로트는 부호 / ZEROFILL / AUTO_INCREMENT 속성을 설정할 수도 있지만 권장하지 않습니다!

  1. 문자 : 고정 길이. 항상 저장된 데이터 세트의 길이를 사용한다;
  2. VARCHAR : 가변 길이. 가변 길이 데이터가 저장되는 길이 내에서 제공;
  3. 열거 : 열거 형. 문법 enum('0','1'), 필드 값은 하나 여야합니다! enum내용은 문자열이 아닌 숫자 유형 또는 다른 될 수 있습니다!
  4. 설정 : 여러 선택. enum유사하지만, 각 소자 사이의 쉼표로 구분하여 선택 될 수 있고, 스페이스를 추가하지 않도록주의.

시간

  1. 년 : YYYY (2,155분의 1,901)

  2. 날짜 : YYYY-MM-DD (1000년 1월 1일 / 9999-12-31)

  3. 시간 : HH : MM : SS

  4. 날짜 : YYYY-MM-DD HH : MM : SS (1000년 1월 1일 00 : 00 : 00 / 23시 59분 59초 9999-12-31)

  5. 타임 스탬프 : YYYY-MM-DD HH : MM : SS (1970-01-01 00 : 00 : 00 / 2038년 1월 19일 ??)

    참고 : 날짜 8 바이트를 널이 될 수 있으며, 타임 스탬프 4 바이트를 차지, 기본 값 CURRENT_TIMESTAMP 있습니다.

강제

DDL을 (데이터 정의 언어)에서 당신은 우리가 주요 제약에 대해 이야기되는 제약을 많이하지만, 테이블의 필드를 만들 위치를 알 필요가있다.

"""
primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一 字段,未标识则创建隐藏字段
foreign key:外键
unique:唯一性数据, 该条字段的值需要保证唯一,不能重复

auto_increment:自增,只能加给key的int类型字段,作为辅助修饰,一个表中只能设置一个自增字段

not null:不为空 - 针对一些字段,如注册时的用户名,出生人的性别等,这些需求下的字段,只不能设置为Null,必须要对其赋值
default:默认值 - 对有默认值意外的字段进行赋值时,有默认值的字段会被赋默认值

unsigned:无符号 - 存储的数字从0开始
zerofill:0填充 - 存整数时数据长度小于取值范围长度,会在数字左方用0填充
"""

# not null 与 default 限制
# 不能为空,没有默认值的x,必须赋值
# y、z在没有赋值情况下,才有默认值,设置值后,采用默认值

mysql>: create table td1 (x int not null, y int default 0, z int default 100);



# 报错,auto_increment必须设置给 键字段
mysql>: create table td2 (x int auto_increment);
# 报错,auto_increment必须设置给 int字段
mysql>: create table td2 (x char(4) auto_increment);
# 报错,auto_increment字段最多出现 1次
mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);

# 正确,主键和唯一键分析
# x为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键
mysql>: create table td21 (x int unique auto_increment, y int unique);
# y为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键
mysql>: create table td22 (x int unique, y int unique auto_increment);
# x为主键:设置了主键就是设置的,主键没设置自增,那自增是可以设置在唯一键上的
mysql>: create table td23 (x int primary key, y int unique auto_increment);
# x为主键:设置了主键就是设置的,主键设置了自增,自增字段只能有一个,所以唯一键不能再设置自增了
mysql>: create table td24 (x int primary key auto_increment, y int unique);
# 默认主键:没有设置主键,也没有 唯一自增键,那系统会默认添加一个 隐式主键(不可见)
mysql>: create table td25 (x int unique, y int unique);

# 唯一键:确保一个字段,数据不能重复
# 主键:是一条记录的唯一标识(可以理解为数据的编号)



# 联合唯一
# ip在port不同时,可以相同,ip不同时port也可以相同,均合法
# ip和port都相同时,就是重复数据,不合法
mysql>: create table tu1 (ip char(16), port int, unique(ip, port));

# 也可以设置成 联合主键,道理同 联合唯一
mysql>: create table tu2 (ip char(16), port int, primary key(ip, port));
# sql可以多行书写
mysql>: 
create table t22(
    ip char(16),
    port int,
    primary key(ip,port)
);


# 通常自增字段的 自增索引 会被永久记录,想清空表并清空自增索引:
mysql>: truncate 数据库名.表名

추천

출처www.cnblogs.com/Du704/p/11614155.html