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 바이트 디지털 시간 권장 특히 긴 문자열
다음 메인 주에서 정수 유형 :
- 부호 :이 유형의 데이터의 길이 부호 유형 (비 - 음성)도 표시와 같이 증가 될 수있다.
- ZEROFILL :이 속성은 제로 (만 표시)로 채워진 불충분 디지털 디스플레이 공간을 나타내고, ZEROFILL 파라미터를 사용할 때, MySQL이 자동 부호 특성을 추가하는 것을 알 수있다.
- 유형 정수도 있습니다 AUTO_INCREMENT의 자려 필드가 될 수 속성 필드.
- 속성 위의 플로트는 사용할 수 있지만 향후 업데이트에 사용하지 않는 것이 좋습니다 이러한 특성의 플로트를 제거합니다. 명세서 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 속성을 설정할 수도 있지만 권장하지 않습니다!
현
- 문자 : 고정 길이. 항상 저장된 데이터 세트의 길이를 사용한다;
- VARCHAR : 가변 길이. 가변 길이 데이터가 저장되는 길이 내에서 제공;
- 열거 : 열거 형. 문법
enum('0','1')
, 필드 값은 하나 여야합니다!enum
내용은 문자열이 아닌 숫자 유형 또는 다른 될 수 있습니다! - 설정 : 여러 선택. 과
enum
유사하지만, 각 소자 사이의 쉼표로 구분하여 선택 될 수 있고, 스페이스를 추가하지 않도록주의.
시간
년 : YYYY (2,155분의 1,901)
날짜 : YYYY-MM-DD (1000년 1월 1일 / 9999-12-31)
시간 : HH : MM : SS
날짜 : YYYY-MM-DD HH : MM : SS (1000년 1월 1일 00 : 00 : 00 / 23시 59분 59초 9999-12-31)
타임 스탬프 : 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 数据库名.表名