データベース紹介_02

データの種類

  • データ型を定義することは列を定義することと同じであり、データ型によってデータの特性が決まります。
  • データ型は主に文字列型、浮動小数点ブック型と固定小数点数型、日付型、バイナリ型に分けられます。
  • データ型はストレージ エンジンごとに動作が異なります
  • 使用するデータ型、要件、データ特性に基づいてデータ型を選択します

データの保存は、データ処理の最初のステップです。データが正しく保存されて初めて、効果的に処理および分析できます。そうしないと、何も始まらない混乱が生じるだけです。では、ビジネスに関連するさまざまなユーザーの複雑なデータを、どのようにして秩序正しく効率的に保存できるのでしょうか? MySQL では、完全なデータ ストレージ プロセスには、データベースの作成、フィールドの確認、データ テーブルの作成、データの挿入という合計 4 つのステップがあります。

データテーブルを直接作成するのではなく、最初にデータベースを作成したいですか?

  • システム アーキテクチャ レベルの観点から見ると、MySQL データベース システムは大規模なものから小規模なものまで [データベース サーバー、データベース、データ テーブル
    、データ テーブルの行と列] であるためです。

データ型は主に列にドメイン整合性制約を追加します。開発者が列のデータ型を設定すると、DBMS は追加されたデータの正当性を検証し、不正な場合はエラーが報告され、追加は拒否されます。

数値

  • tinyint、smallint、mediumint、int、bigint の 5 種類の整数。主な違いは、値の範囲が異なり、
    型の前に制限語 unsigned を追加できることと、負の数値が許可されていないことです。
  • 3 つの浮動小数点型: float と double は正確に格納できませんが、10 進数と数値は正確に格納できます
型名 説明する
タイニーント 1B、値の範囲 -128 ~ 127
smallint 2B、値の範囲は -32768 ~ 32767 です。
中程度の 3B、値の範囲は -8388608 ~ 8388607 です。
int または 整数 4B、値の範囲は 2e9 です
ビギント 8B、値の範囲は 9e18 です
浮く 図4Bの単精度浮動小数点型では、値の範囲は3.4e38であり、nは総ビット幅、mは小数点以下の桁数である。n>=m であることが必要です。nm が定義されていない場合、デフォルトで 7 ~ 8 ビットの有効なデータが提供されます。
ダブル 8B、倍精度浮動小数点型、値の範囲は1.7e308、合計桁数は15を超えません
10進数と数値 固定小数点ストレージは浮動小数点数を格納するために使用され、特定のバイト数は定義中に設定されたパラメータによって異なります。ビット幅が設定されていない場合、デフォルトは (10,0)、合計ビット幅の最大値は 65、小数点以下の最大桁数は 30 です。

unsigned は列を符号なしに設定し、0 以上のデータのみを格納でき、負の数は存在しません。unsigned 型を使用すると、値の範囲に
負の部分がなくなるため、上限が 2 倍になります。

create table t3(id int unsigned); 
mysql> insert into t3 value(-10); -- 不允许存储负数 
ERROR 1264 (22003): Out of range value for column 'id' at row 1 
mysql> insert into t3 value(255); -- 存储数据的上线扩大一倍
Query OK, 1 row affected (0.01 sec)

int(5) のように、正の整数を含む型名の後に括弧を追加できます。ここでの意味は、5 桁の長さの整数のみを格納できるということではありません。意味は、クエリ時に自動的に格納されるということです。 5 桁までのスペースを埋め込みます。実際のデータ長が 5 を超える場合は、実際のデータ長に従って出力されます。

mysql> create table t4(id int(2)); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into t4 values(99999); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t4 values(9); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from t4;
+-------+
| id | 
+-------+ 
| 99999 | 
| 	  9 | 
+-------+
2 rows in set (0.00 sec)

Decimal と numeric は、浮動小数点数を文字列として格納します。これにより、 float と double に 2 進
浮動小数点数の格納を使用する代わりに、浮動小数点数の正確な格納を実現できます。メソッド numeric(合計ビット幅、小数点以下の桁数) を使用します。小数点以下の桁数は合計ビット幅以下でなければなりません。小数点以下の最大桁数は 30 で、合計ビット幅の最大値は次のとおりです。保存できるデータは範囲を超える可能性があり、その中の記号は数字と小数点がビット幅を占有しないことに注意してください。

mysql> create table t5(id numeric(5,3)); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t5 values(99.999); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t5 values(-99.999); -- 位宽统计中符号位不算 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t5 values(100); -- 整数超出范围报错 ERROR 1264 (22003): 
Out of range value for column 'id' at row 1 

mysql> insert into t5 values(9.1235); -- 小数位数多余则自动四舍五入 
Query OK, 1 row affected, 1 warning (0.00 sec) 

mysql> insert into t5 values(9.1234); 
Query OK, 1 row affected, 1 warning (0.01 sec) 

mysql> select * from t5; 
+---------+ 
| id      | 
+---------+ 
|  99.999 | 
| -99.999 | 
|   9.124 | 
| 	9.123 | 
+---------+ 
4 rows in set (0.00 sec)

整数と数値

  • int型は小数点以下の桁数を保存できないため、小数点以下を保存する際に自動的に四捨五入されます。
mysql> create table t6(id int); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t6 values(99.99); 
Query OK, 1 row affected (0.01 sec) 

mysql> select * from t6; 
+------+ 
|  id  | 
+------+ 
|  100 | 
+------+ 
1 row in set (0.00 sec)
  • numeric は小数点以下の桁数を保存でき、小数点以下の桁数が 0 の場合、int 型の格納効果をシミュレートできます。実際に使用される保存方法は
    文字列です。クエリ効率は int よりもはるかに低い
mysql> create table t7(id numeric); 
Query OK, 0 rows affected (0.03 sec) 

mysql> desc t7; 
+-------+---------------+------+-----+---------+-------+ 
| Field | Type          | Null | Key | Default | Extra | 
+-------+---------------+------+-----+---------+-------+ 
| id    | decimal(10,0) | YES  |     | NULL    |       | 
+-------+---------------+------+-----+---------+-------+ 
1 row in set (0.00 sec)

数値列の拡張プロパティ

  • auto_increment は通常、主キーに使用され、この列の連続整数値を自動的に生成できます。
mysql> create table t8(id int auto_increment,name varchar(20)); 
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key 

mysql> create table t8(id int primary key auto_increment,name varchar(20)); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t8 values(null,'yan1');-- 插入数据时不指定插入的值或者设置插入值 为null则会自动添加一个自增值 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t8 values(99,'yan1'); -- 如果插入数据时不指定对应的值,则自增长 max(id)+1;如果指定对应的值,则自增效果失效 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t8(name) values('yan1'); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from t8;
+-----+------+ 
|  id | name | 
+-----+------+
| 1   | yan1 | 
| 99  | yan1 | 
| 100 | yan1 | 
+-----+------+ 
3 rows in set (0.00 sec)

AUTO_INCREMENT を使用する場合は、次の点に注意してください。

1. AUTO_INCREMENT はデータ列の属性であり、整数型のデータ列にのみ適用されます。


2. AUTO_INCREMENT 属性を設定するデータ列は正の数値シーケンスである必要があるため、シーケンスの数を 2 倍にできるようにデータ列を UNSIGNED として宣言する必要があります。

id int unsigned primary key auto_increment

3. AUTO_INCREMENT データ列には、シリアル番号の重複を避けるために一意のインデックスが必要です (つまり、主キーまたは主キーの一部です)。
AUTO_INCREMENT データ列には NOT NULL 属性が必要です。

4. AUTO_INCREMENT データ列の最大数は、列のデータ型によって制限されます。たとえば、TINYINT データ列の最大数は 127 です。UNSIGNED を
追加すると、最大数は 255 になります。制限に達すると、AUTO_INCREMENT は期限切れになります。

  • auto_incement が上限に達した場合、次の id を再度申請した場合、取得された値は変更されません。主キー値の重複エラー
  • 一部のデータが削除された場合でも、auto_increment は最後の値からカウントします。

5. テーブル全体を削除すると、MySQL AUTO_INCREMENT は番号を 1 から再スタートします。これは、フル テーブル操作を実行するときに
、MySQL が実際にそのような最適化操作を実行するためです。まず、データ テーブル内のすべてのデータとインデックスを削除してから、データ テーブルを再構築します。

  • テーブル名から削除; テーブル内のすべてのデータは削除されますが、auto_increment は引き続き前のカウントに従ってデータを生成します。
  • auto_increment を使用して先頭からカウントする必要がある場合は、truncate テーブル名を使用してデータを削除する必要があります。


すべてのデータ行を削除し、シリアル番号情報を保持したい場合は、 MySQL の最適化を抑制する where を指定して削除コマンドを使用できます。

last_insert_id() を使用して、インクリメントされたばかりの値を取得します。

  • unsigned は負の値を無効にします
  • zerofill クエリ表示時に実際のデータが指定したビット幅より小さい場合、自動的に値0を追加します
mysql> create table t9(id int(5) zerofill); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t9 values(12); 
Query OK, 1 row affected (0.01 sec) 

mysql> select * from t9; 
+-------+ 
| id    | 
+-------+ 
| 00012 | 
+-------+ 
1 row in set (0.00 sec) 

mysql> insert into t9 values(123456); 
Query OK, 1 row affected (0.01 sec) 

mysql> select * from t9; 
+--------+ 
| id     | 
+--------+ 
| 00012  | 
| 123456 | 
+--------+ 
2 rows in set (0.00 sec)
  • default はデフォルト値を設定するために使用されます

デフォルトはデータが挿入されていない場合にのみ有効です。データが挿入されている場合は、null 値が挿入されても有効になりません。

mysql> create table t10(id int default 0,name varchar(20)); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into t10 values(11,'yan1');-- 指定对应的数据,则default无效 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t10 values(null,'yan1'); -- 指定对应的数据,则default无效,即 使设置的值为null 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t10(name) values('yan1'); -- 只有不针对这个列进行数据插入时 default才能生效 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from t10; 
+------+------+ 
| id   | name | 
+------+------+ 
| 11   | yan1 | 
| NULL | yan1 | 
| 0    | yan1 | 
+------+------+ 
3 rows in set (0.00 sec)

null とはどういう意味ですか?

Null は、空の文字列でも特定の値でもない未知のデータを意味します。どの値も
Null 値と比較できません。null は不定値を意味するためです。
null 値の真の比較では、is null または is not nullという特殊な演算子を使用する必要があります

mysql> select null=null; -- =表示等值比较 
+-----------+ 
| null=null | 
+-----------+ 
|      NULL | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> select null!=null; -- 比较不相等 
+------------+ 
| null!=null | 
+------------+ 
|       NULL | 
+------------+ 
1 row in set (0.00 sec) 

mysql> select null is null; 
+--------------+ 
| null is null | 
+--------------+ 
|            1 | 
+--------------+ 
1 row in set (0.00 sec) 

mysql> select null is not null;
+------------------+ 
| null is not null | 
+------------------+ 
|                0 | 
+------------------+ 
1 row in set (0.00 sec)

文字列型

char (n) 固定長の文字列。n 値は許容される最大長を表すために使用されます。値の範囲は 0 ~ 255 です。

  • 長さ制限は中国語と英語を区別せず、最大何文字まで保存できるかを示します。
  • length 関数を使用して、文字数ではなくバイト数を取得します。utf-8 エンコーディングでは、中国語の文字は 3 バイトを占めます。
mysql> create table c2(id char(5)); 
Query OK, 0 rows affected (0.03 sec) 

mysql> insert into c2 values("yan"); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into c2 values("中国人民好"); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into c2 values("中国人民好1"); 
ERROR 1406 (22001): Data too long for column 'id' at row 1

varchar (n) 可変長文字列、n 値の範囲は 0 ~ 65535

  • 実際に格納される文字数は同じ数の位置を占め、各列が占める長さは特定のコンテンツによって異なります。
create table t1(id varchar(20));

char と varchar

  • char は固定長に属し、varchar は可変長に属します。選択の最も基本的な基準は、固定長には char を使用し、可変長には varchar を使用することです。
  • char で許可される最大長は 255 で、varchar で許可される最大長は 65535 です。
  • 保存された文字列の長さがあまり変わらない場合は、char の使用を優先することをお勧めします。たとえば、パスワードの md5 暗号化の場合、固定長の行は断片化されにくく、短い列の場合はパフォーマンスが低下します。 varchar は文字列の長さを格納するために 1 ~ 2 バイト追加する必要があるため、varchar よりも char の方が優れています。
  • Char は計算時にスペースを自動的に削除します。varchar はスペースを削除しませんが、文字列を比較する場合は比較前にスペースを削除します。データを挿入する場合、システムは文字列内のデフォルトの冗長
    スペースを自動的に削除します。

ラージオブジェクトタイプ Lob

ラージ オブジェクト タイプは、テキスト タイプとバイナリ タイプの 2 つのカテゴリに分類できます。

  • BLOB は、可変長データを収容できるバイナリ ラージ オブジェクトであり、tinyblob、blob、
    mediumblob、longblob に分割されます。通常、サウンド、画像、ビデオなどのバイナリ データを保存するために使用されます。
  • Text は、可変長データを収容できる大きなテキスト オブジェクトであり、tinytext、text、mediumtext、
    longtext に分類され、一般に小説や製品紹介などのテキスト タイプのデータを格納するために使用されます。
mysql> create table c9(id text); 
Query OK, 0 rows affected (0.02 sec)

mysql> create table c8(id blob); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into c9 values("Abc"); 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into c8 values("Abc"); 
Query OK, 1 row affected (0.01 sec) 

mysql> select * from c9 where id='abc'; 
+------+ 
| id   | 
+------+ 
| Abc  | 
+------+ 
1 row in set (0.00 sec) 

mysql> select * from c8 where id='abc'; 
Empty set (0.00 sec)

2 つの違い:

  • BLOB は可変長データを保持できるバイナリ型で、大文字と小文字が区別されます。テキストは大文字と小文字が区別されない BLOB です。
型名 許可される最大長 説明する
小さなテキスト 0-255 短いテキスト文字列
文章 0-65535 長いテキスト文字列
ミディアムテキスト 16M 中程度の長さの長いテキスト文字列
長文 4G 非常に大きなテキストデータ
小さな塊 0-255 長いバイナリ文字列は 255 個以下
0-65535 バイナリ型の長いテキスト文字列
中ブロブ 16M 中程度の長さのバイナリの長いテキスト文字列
肺塊 4G 非常に大きなバイナリデータ

日時型

create table dt1(id date); 

insert into dt1 values('1989-2-3');

特別な時間はタイムスタンプ型です

create table dt2(id timestamp default current_timestamp,name varchar(20)); 

mysql> insert into dt3(name) values('yan1'); 
Query OK, 1 row affected (0.01 sec) 

mysql> select * from dt3; 
+---------------------+------+ 
| id 				  | name | 
+---------------------+------+ 
| 2022-04-17 15:07:33 | yan1 | 
+---------------------+------+ 
1 row in set (0.00 sec)

タイムスタンプ フィールドの定義は、主に次の 2 種類の操作に影響します。

  • レコードを挿入するとき、タイムスタンプ フィールドには DEFAULT CURRENT_TIMESTAMP が含まれます。レコードの挿入時に特定の時刻データが指定されていない場合は、タイムスタンプ フィールドの値を現在時刻に設定します。
  • レコードを更新するとき、タイムスタンプ フィールドには ON UPDATE CURRENT_TIMESTAMP が含まれます。レコードの更新時に特定の時刻データが指定されていない場合は、タイムスタンプ フィールドの値を現在時刻に設定します。
  • フィールドがタイムスタンプ DEFAULT CURRENT_TIMESTAMP ON UPDATE
    CURRENT_TIMESTAMP として定義されている場合、つまり挿入または更新時にフィールドに値が指定されていない場合、現在の時刻が割り当てられます。

システム関数 now() はシステムの現在時刻を取得できます。

select now();

create table t8(id int, name varchar(32), bdate datetime default now());

タイプの説明

型名 説明する フォーマット
日にち 日付タイプ。有効範囲は、時、分、秒を除く 1000 ~ 9999 年です。 3B、yyyy-MM-dd
時間 時間タイプ。有効範囲は -838 ~ 838 時間で、通常は時間値または期間を表すために使用されます。年月日は含まれません 3B、HH:mm:ss
年のタイプ、有効範囲は 1901 年から 2155 年までです 1B、yyyy
日付時刻 日付と時刻を含む datetime 型は秒まで正確であり、有効範囲は 1000 ~ 9999 年です。具体的な保管時間はタイムゾーンとは関係ありません。MySQL 5.6.4 以降では、秒の小数部分を含めることができ、精度は最大マイクロ秒 (6 桁) です。 小数部以外 5B+小数部 0-3B、小数部がある場合は小数点以下の桁数で変わります yyyy-MMdd HH:mm:ss
タイムスタンプ タイムスタンプの種類は秒単位まで正確で、有効時間は 1970 年から 2038 年です。同時に、変更時刻の自動保存、タイムゾーン データの保存、ミリ秒単位の実際の保存もサポートしています。MySQL 5.6.4 以降のバージョンでは、タイムスタンプ タイプのデータをマイクロ秒の最高精度で保存でき、タイムスタンプ(N)N の値の範囲は 0 ~ 6 です。 非小数部 4B+ 小数部 0-3B、デフォルトの表示形式は YYYY-MM-ddHH:mm:ss

コレクションと列挙型

  • コレクション タイプを設定し、複数のコレクション メンバーを設定でき、複数のコレクション メンバーから複数のデータを選択して挿入できます。
create table set1(id int,hobby set('抽烟','喝酒','烫头')); 

insert into set1 values(1,''); -- 允许,同时允许插入null
insert into set1 values(1,'烫头,抽烟'); -- 没问题 
insert into set1 values(1,'烫头,喝酒'); -- 没有问题,但是入库时会自动排序
insert into set1 values(1,'烫头,抽烟,扣脚'); -- 报错,因为其中一个值不在set定义种 

insert into set1 values(1,'抽烟,抽烟');-- 实际上只插入一个值,也就是会自动去除重复值
  • enum 列挙型では、選択可能な複数の値を設定でき、列には特定の列挙メンバー値のみを割り当てることができます。
create table enum1(id int,sex enum('男','女','不确定')); 

insert into enum1 values(1,''); -- 报错,但是允许插入null
insert into enum1 values(1,'男'); 

insert into enum1 values(2,'男,女'); -- 报错

ビットタイプ

bit を直接使用する場合、デフォルトの bit(1)

bit(1) はバイナリビットを格納できることを意味し、0 または 1 のみを格納でき、n の最大上限は 64 です。

bit(8) は、8 バイナリ ビットの値を保存できることを意味し、値の範囲は 0 ~ 255 です。

要約する

  • データ型を定義することは列を定義することと同じであり、データ型によってデータの特性が決まります [ドメイン整合性]
  • データ型は主に文字列型、固定小数点数・浮動小数点数型、日付型、ラージオブジェクト型に分かれます【使用には注意】
  • データ型はストレージ エンジンごとに動作が異なります
  • データで使用されるデータ型は、ビジネス要件と対応するデータ型の特性に従って選択されます。複雑すぎるデータ型の使用は推奨されません。

整合性の制約

保存されたデータが完全かつ有効であることを確認し、ガベージ データの保存を回避するために、DBMS は挿入されたデータをチェックします。

  • 開発者が対応するルールを指定し、DBMS がチェックを行います。不正なデータを挿入しようとすると、自動的にエラーが報告され、挿入は拒否されます。
  • 実際には 6 種類の制約があり、整合性制約の 3 つのカテゴリに分類できます。外国人の書籍の中には 4 つのタイプを提案しているものもあります [ドメインの整合性]
    • エンティティの整合性(主キー制約によって実装)
    • 外部キー制約によって実装される参照整合性
    • 他の 4 つの制約によって実装されるユーザー定義の整合性
  • 実際の開発では、主キー制約を除き、他の制約は追加されません。他のデータ チェックは通常、コード テストの便宜上、アプリケーションの実装に依存します。

1. 非 null 制約。指定された列の値を空にすることはできません。

create table t1(id int not null); --不允许id列值为null 

create table t2(id int null); -- 允许id列值为null 
create table 3(id int);-- 允许id列值为null

2. デフォルト制約のデフォルト

一般に、デフォルト制約は非 null 制約と併用されることが多く、データが挿入されない場合はデフォルト値が有効になります。

create table t1(id int not null default 0);

create table t2(id datetime default now()); -- 正确的,过去只有timestamp default current_timestamp

3. 主キー制約 (エンティティ整合性とも呼ばれる) により、データを繰り返し保存することができなくなります。

  • 主キーはデータ行を一意に識別できます
  • 主キー制約の意味は非 null であり、一意です。
create table t1(id int primary key,....); 

create table t2( 
	id int not null,... 
	primary key(id) -- 注意这里的主键约束允许使用复合主键,多个列构成的主键 
);

InnoDB ストレージ エンジンを使用する場合、データ テーブルに主キー セットがない場合、Innodb はテーブルに長さ 6 バイトの非表示のデフォルト主キー row_id を設定します。Innodb はグローバルな dict_sys.row_id 値を維持しており、これは主キーのないすべてのデータ テーブルで使用されます。主キーなしでデータ テーブルにデータ行を挿入すると、現在の dict_sys.row_id の値が 1 ずつ増加します。

実際の row_id の値が格納される場合、データ長は 8 バイトですが、Innodb は最後の 6 バイトのみを使用します。row_id の値は、
データ テーブルに書き込まれるときに次の 2 つの特性を持ちます。

1. テーブルに記述される row_id の値の範囲は 0-2^48-1 です。

2. row_id の値が 2^48 の場合、データが挿入されると、row_id の最後の 6 バイトの値はすべて 0 になります。

つまり、row_id の値が 2^48 乗 -1 に達すると、データが再度挿入され、次の値は 0 になり、サイクルが開始されます。ただし、
カスタム主キーとは異なり、row_id で識別される主キーには一意性制約がありません。挿入されたデータの row_id 値がテーブルにすでに存在する場合、書き込まれたデータは既存のデータを「静かに」上書きします。

テーブルには可能な限り主キーを設定し、主キーは可能な限りbigint型を使用する必要がありますが、21億の上限はまだ可能です。例えばWarcraftではrow_idの上限はありますが、は 281 兆にも達しており、データをカバーすることは明らかに受け入れられません

4. 一意の制約 一意

  • 一意制約が追加された列では重複値は許可されません
  • null 値制約は存在できず、null の一意性を判断できません。
create table t1(id int unique,name varchar(20)); 

insert into t1 values(1,'zhangsan'); 

insert into t1(name) values('zhao4');-- id为null 
insert into t1(name) values('zhao4');-- id为null,两次null并不会报错 

insert into t1 values(1,'li4'); -- 报错

mysql> create table t23( 
	-> id int, 
	-> name varchar(32), 
	-> unique(id,name)); -- 多个列的组合不允许重复,单一列允许重复

5. 外部キー制約 (参照整合性とも呼ばれます)

6. 制約をチェックする

mysql> create table t24( 
	-> id boolean default 1, 
	-> check(id in(1,0)));

DDLテーブルの操作

作成操作

create table tb_student( 
	id bigint primary key auto_increment, 
	name varchar(10) not null comment '说明信息', -- comment用于对表或者列添加说 明信息
	birth date, 
	sex boolean default 1, \
	salary numeric(8,2) 
)engine=innodb default charset utf8;

別のテーブルと同じ構造を持つテーブルをすばやく作成します。データではなくテーブル構造を複製するだけです。

create table 新表名称 like 已经存在的旧表名称;

create table 新表名称 as 
	select id emp_no,name emp_name from 克隆表的名称 
	where 1=2;

テーブル構造を変更します。構文規則はalter tableテーブル名です。add/drop/modify 列名称 [类型 约束]

alter table tb_student add class_name varchar(20) default '软件19'; -- 新增列 

alter table tb_student drop column salary; -- 删除指定列 

alter table tb_student modify class_name int; -- 修改列定义时,要求已经存在的数据必须 符合规则,否则修改失败。modify一般用于修改列的数据类型和长度,但是如果有数据则必须和目标类型匹 配,否则修改失败

列の名前を変更します

alter table 表名称 change 旧有列名称 新列名称 类型 约束;

テーブルの削除drop table 表名称

drop table tb_student; 

drop table if exists tb_student;

現在のデータベース内のすべてのテーブルを表示する

show tables;

show tables from sys;

テーブル構造を表示する

desc 表名称;

SQL ステートメントを表示してテーブルを作成する

show create table tb_student;

その他の操作

テーブルの名前を変更するRENAME TABLE emp TO myemp;
ALTER table dept RENAME [TO] detail_dept;

空のテーブル

TRUNCATE TABLE ステートメント: テーブル内のすべてのデータを削除し、テーブルの記憶領域を解放します。

TRUNCATE TABLE detail_dept;TRUNCATE ステートメントはロールバックできませんが、DELETE ステートメントはデータの削除に使用でき、ロールバックできます。

Alibaba 開発仕様:
[参考] TRUNCATE TABLE は DELETE よりも高速で、使用するシステム リソースとトランザクション ログ リソースが少なくなりますが、TRUNCATE には
トランザクションがなく、TRIGGER がトリガーされないため、事故が発生する可能性があるため、開発でこのステートメントを使用することはお勧めできません。コード。
説明: TRUNCATE TABLE は、WHERE 句のない DELETE ステートメントと機能的には同じです。

おすすめ

転載: blog.csdn.net/qq_39756007/article/details/126962927