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. CHAR:固定長。常に格納されたデータセットの長さを使用します。
  2. varchar型:可変長。可変長データが格納されているの長さ内に設けられました。
  3. 列挙型:列挙型。文法はenum('0','1')、フィールド値は1でなければなりません!enum内容は専用の文字列ではなく、数値型または他のことができます!
  4. セット:複数の選択肢。そして、enum似ていますが、スペースを追加しないように注意して、各要素の間にカンマで区切って、選択することができます。

時間

  1. 年:YYYY(1901/2155)

  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 / 9999-12-31夜11時59分59秒)

  5. タイムスタンプ:YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/2038年1月19日??)

    注:日時8つのバイトを、NULLにすることができ、タイムスタンプは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