DDL :(データ定義言語)データ定義言語
DML :(データ操作言語)データ操作言語
1つは、テーブルの作成(DDL)
1.文法
create table 表名 (
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
2.mysqlの一般的なデータ型
データの種類 | 意味 |
---|---|
char | 固定長の文字列(最大255)、ストレージスペースは固定されており、実際のデータとは関係ありません。不適切な使用は、スペースの浪費につながる可能性があります。 |
varchar | 可変長文字列(最大255)は、実際のデータ長に応じてストレージスペースを動的に割り当て、より多くのスペースを節約します。 |
int | 整数(最大11) |
bigint | 長整数 |
浮く | 浮動小数点(単精度) |
ダブル | 浮動小数点(倍精度) |
日付 | 短い日付タイプ |
日付時刻 | ロングデートタイプ |
クロブ | Character Larger Object(Character Larger Object)は、記事や説明など、最大4Gの文字列を格納できます。 |
ブロブ | Binary Larger Object(Binary Larger Object)は、画像、音声、ビデオなどのストリーミングメディアデータを保存するために特に使用されます。データを挿入するときにIOストリームを使用する必要があります。 |
3.データの挿入(DML)
3.1データを挿入します。
insert into 表名(字段1,字段2,字段3...) values(值1,值2,值3...);
3.2複数のデータを挿入します。
insert into 表名(字段1,字段2,字段3...) values(值1,值2,值3...),(值1,值2,值3...),()...;
注
:
- フィールド名と値は1対1で対応している必要があります。
- テーブル名のみを書き込むことは、すべてのフィールドのデータを追加することを意味し、順序は、テーブルが作成されたときのフィールドの順序と同じである必要があります。
- 数量とデータ型は対応している必要があります。
insert语句一旦执行成功,必然会多一条记录,未指定值的字段默认为NULL。
mysql> insert into t_stu values(1,'zhangsan',21,'[email protected]','1999-9-9');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_stu(num,name,age,birth,email) values(2,'lisi',21,'1999-10-10','[email protected]');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_stu(num) values(3);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_stu;
+------+----------+------+------------------+------------+
| num | name | age | email | birth |
+------+----------+------+------------------+------------+
| 1 | zhangsan | 21 | zhangsan@163.com | 1999-09-09 |
| 2 | lisi | 21 | lisi@163.com | 1999-10-10 |
| 3 | NULL | NULL | NULL | NULL |
+------+----------+------+------------------+------------+
3 rows in set (0.00 sec)
4.日付を挿入します
4.1 mysqlの日付形式:
- %Y年
- %m月
- %d日
- %h時間
- %i 分
- %s秒
4。2日付変換機能
str_to_date
:異常な日付文字列を日付型に変換します。通常、挿入ステートメントで使用されます。
mysql> insert into user values(1,'zhangsan',str_to_date('01-01-1995','%d-%m-%Y'));
Query OK, 1 row affected (0.01 sec)
date_format
:日付をフォーマットし、日付を特定のフォーマットの文字列に変換します。通常、selectステートメントで表示する日付フォーマットを設定するために使用されます。
mysql> select id,name,date_format(birth,'%m/%d/%Y') birth from user;
+------+----------+------------+
| id | name | birth |
+------+----------+------------+
| 1 | zhangsan | 01/01/1995 |
| 2 | lisi | 03/03/1996 |
+------+----------+------------+
2 rows in set (0.00 sec)
4。3日付と日時の違い
mysql> insert into user values (1,'zhangsan','1999-09-09','2021-03-05 20:58:10');
Query OK, 1 row affected (0.01 sec)
mysql> insert into user values(2,'lisi','1999-10-10',now());
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+------+----------+------------+---------------------+
| id | name | birth | create_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1999-09-09 | 2021-03-05 20:58:10 |
| 2 | lisi | 1999-10-10 | 2021-03-05 20:59:51 |
+------+----------+------------+---------------------+
2 rows in set (0.00 sec)
注
:now()
現在のシステム時刻を秒単位で正確に取得できます。
4.4クエリ結果をテーブルに挿入する
insert into 表1 select 字段 from 表2;
5.テーブルをすばやく作成します(テーブルの構造とデータをコピーします)
create table 新表 as select * from 原表;
6.テーブルデータ(DML)を変更します
update 表名 set 字段1=值1,字段2=值2,... where 条件;
注
:条件がないと、すべてのデータが更新されません。
mysql> update user set name='jack',birth='2000-10-10' where id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user;
+------+----------+------------+---------------------+
| id | name | birth | create_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1999-09-09 | 2021-03-05 20:58:10 |
| 2 | jack | 2000-10-10 | 2021-03-05 20:59:51 |
+------+----------+------------+---------------------+
2 rows in set (0.01 sec)
6.テーブルデータを削除します
6.1削除(DML)
delete from 表名 where 条件;
注
:
没有条件
制限、テーブルデータ全体は全部删除
!!!テーブルはまだ存在します。- ハードディスク上のデータであるテーブルデータを削除するには、deleteを使用します
真实存储空间不会被释放
。 - 短所:削除効率が低い。
- 利点:、
支持事务回滚
エラーの削除を復元できます。
6.2切り捨て(DDL)
truncate table 表名;
注
:
- 1つのデータを削除することはできません。
- 物理的に削除されると、テーブルは1回切り捨てられます。高効率ですが、ロールバックをサポートしていません。
- 使用する前に、データを削除できるかどうかをよく確認してください
删除后不可恢复
。
2つ目は、テーブル構造を変更することです。
三、テーブルの削除
文法:
drop table 表名; //如果表不存在会报错
drop table if exists 表名;//表存在才删除,不存在什么都不做。
4.制約(キーポイント)
1.制約とは何ですか?
制約キーワード:constraint
テーブルを作成するときに、テーブルのフィールドにいくつかの制約を追加できます保证表中数据的完整性和有效性
。
- 列レベルの制約:どの列に制約を追加する必要があるかについては、列の直後に制約名を書き込むだけです。
- テーブルレベルの制約:制約は列の後に追加されず、複数のフィールドが組み合わされて制約がある場合に使用されます。フォーマット:
约束名(字段1,字段2,...)
2.制約の分類
制約名 | 意味 |
---|---|
nullではない | null以外の制約、フィールドデータをNULLにすることはできません |
ユニーク | 一意性制約、このフィールドのデータは一意であり、繰り返すことはできません |
主キー | 主キーの制約、フィールドデータは一意です |
外部キー | 外部キー制約 |
小切手 | 制約を確認してください。mysqlはサポートしていません。oracleはサポートしています。 |
2.1 not null
空でない制約
- null以外の制約フィールドは値を渡す必要があり、nullを渡すことはできません。null以外には、列レベルの制約のみがあります。
mysql> create table vip(
-> id int,
-> name varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into vip values (1,'zhangsan');
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip(id) values (3);
ERROR 1364 (HY000): Field 'name' doesn't have a default value
mysql> insert into vip values (3,null);
ERROR 1048 (23000): Column 'name' cannot be null
2.2 unique
一意の制約
- 一意性制約フィールドを繰り返すことはできませんが、NULLにすることができ、複数のNULLが存在する可能性があります。
mysql> create table vip(
-> id int,
-> name varchar(10) not null,
-> email varchar(255) unique);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into vip values(1,'zhangsan','[email protected]');
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip values(2,'lisi',null);
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip values(3,'wangwu','[email protected]');
ERROR 1062 (23000): Duplicate entry '[email protected]' for key 'vip.email'
- 複数のフィールドが組み合わされて一意になり、複数のフィールドが全体として見なされ、すべて同じであり、同じ部分を挿入できます。
mysql> create table vip(
-> id int,
-> name varchar(10) not null,
-> email varchar(255),
-> unique(name,email));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into vip values(1,'zhangsan','[email protected]');
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip values(2,'zhangsan','[email protected]');
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip values(3,'zhangsan','[email protected]');
ERROR 1062 (23000): Duplicate entry '[email protected]' for key 'vip.name'
2.3 primary key
主キーの制約(略してPK)
- 各行が記録されて
一张表只能有一个主键
いることを一意に識別する主キー。 - すべてのテーブルに主キーが必要です。主キーがないと、テーブルは無効になります。
mysql> create table vip(
-> id int primary key,
-> name varchar(10));
Query OK, 0 rows affected (0.02 sec)
- 主キーの特性:nullではない+一意(
主键值不能为空且不能重复
)
mysql> insert into vip values(1,'zs');
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip values(2,'ls');
Query OK, 1 row affected (0.01 sec)
mysql> insert into vip values(2,'ww');
ERROR 1062 (23000): Duplicate entry '2' for key 'vip.PRIMARY'
mysql> insert into vip(name) values('zl');
ERROR 1364 (HY000): Field 'id' doesn't have a default value
- 主キーは、列レベルの制約またはテーブルレベルの制約を使用して追加できます。
mysql> create table vip(
-> id int,
-> name varchar(10),
-> primary key(id));
Query OK, 0 rows affected (0.03 sec)
- 複数のフィールドを組み合わせて、複合主キーと呼ばれる主キーを追加できます。これはお勧めしません。
mysql> create table vip(
-> id int,
-> name varchar(10),
-> primary key(id,name));
Query OK, 0 rows affected (0.03 sec)
- 単一の主キーと複合主キーに加えて、主キーは自然主キーとビジネス主キーに分割することもできます。
自然主キー:主キーの値は自然数であり、ビジネスとは関係ありません。
ビジネスの主キー:主キーの値はビジネスと密接に関連しています。たとえば、銀行のカード番号が主キーの値として使用されます。
実際の開発では、主キーは非反復的である必要があるだけであり、意味がないため、自然な主キーがより多く使用されます。ビジネスの主キーを使用すると、ビジネスが変更されたときに主キーの値が影響を受ける可能性はほとんどありません。 - mysqlでは
auto_increment
、主キー値の自動メンテナンスを使用できます。つまり、自增
1から始まり、1ずつ増加します。
2.4 foreign key
外部キー制約(略してFK)
データの冗長性とスペースの浪費を回避するために、外部キーを追加してデータの有効性を確保できます。
create table 表名(
字段 数据类型 foreign key(外键字段名) references 引用表(引用字段名)
);
注
:
- 外部キーが追加されたテーブルは子テーブルと呼ばれ、参照されたテーブルは親テーブルと呼ばれます。
- テーブルが作成される順序は?最初に親テーブルを作成してから、子テーブルを作成します。
- データを挿入する順序は?最初に親テーブルを挿入してから、子テーブルを挿入します。
- テーブルとテーブルデータを削除する順序は?最初に子テーブルを削除し、次に親テーブルを削除します。
つづく