1.制約に関連するステートメント
1.主キー制約(主キー制約では、主キー列のデータが一意であり、空であってはいけません)
#创建库
mysql> create database test1;
#进入到库中
mysql> use test1;
#创建一个带有主键约束的表
mysql> create table tab1(
-> id int(10),
-> name varchar(10) primary key,
-> sex varchar(5),
-> info varchar(200)
-> );
Query OK, 0 rows affected (0.01 sec)
作成された主キーがあるかどうか(列にPRIという単語が含まれているかどうか)を確認します。
上記は、列を定義するときに主キーを定義するためのものです。すべての列を定義した後、主キーを指定するように書きましょう。
mysql> create table tab2(
-> id int(10),
-> name varchar(10),
-> sex varchar(10),
-> primary key(id) # 括号里定义主键的列
-> );
2.非null制約(列の値を空にすることはできません)
mysql> create table tab3(
-> id int(6) not null, # not null :不允许为空
-> name varchar(10)
-> );
3.設定値の一意性(データの重複は許可されません。空にすることもできますが、存在できるのは1つだけです。それ以外の場合、重複と見なされます)
mysql> create table tab4(
-> id int not null unique,
-> name varchar(20)
-> );
これは主キーとして識別されていますが、作成時に主キーとして指定されていませんが、この列の属性は基本的に、一意などの主キーの要件を満たしているため、空にすることはできません。
4.列のデフォルト値を設定します(列が空の場合は、デフォルト値を書き込みます)
mysql> create table tab5(
-> id int(2) not null,
-> name varchar(20),
-> project varchar(20) default 'mysql'
-> );
5.自己増分値を設定します(通常はid列に使用され、自己増分列は主キーとして設定する必要があります)
注:mysqlは初期値のみを設定でき、自己増分値を設定できません。つまり、最初の値を5に設定できます。次に、5、6、7などの順番に増加します。ただし、5、7、9などのように、一度に2回ずつ増加するように設定することはできません。
mysql> create table tab6(
-> id int not null primary key auto_increment,
-> name varchar(20)
-> );
自己増加効果をテストします。
mysql> insert into tab6(name) values('zyz'),('lisi');
mysql> select * from tab6;
+----+------+
| id | name |
+----+------+
| 1 | zyz |
| 2 | lisi |
+----+------+
上記のテストからわかるように、nameの値は2つだけ挿入され、idの値は挿入されませんが、テーブルデータを表示すると、idにはすでに値があり、自己増分が有効になり
、自己増分の開始値が設定されます
mysql> create table tab7(
-> id int primary key auto_increment,
-> name varchar(20)
-> )auto_increment=6;
#插入数据验证
mysql> insert into tab7(name) values('zyz'),('lisi'),('zhangsan');
mysql> select * from tab7;
+----+----------+
| id | name |
+----+----------+
| 6 | zyz |
| 7 | lisi |
| 8 | zhangsan |
+----+----------+
第二に、ALTER命令の使用
1.列値のデータ長を変更します
mysql> desc tab1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| name | varchar(10) | NO | PRI | NULL | |
| sex | varchar(5) | YES | | NULL | |
| info | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
#修改name 字符长度为20
mysql> alter table tab1 modify name varchar(20);
2.フィールド名を変更します(フィールド名を変更するときに、新しいフィールド名のデータ型とデータ長を変更することもできます)
mysql> desc tab1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| name | varchar(20) | NO | PRI | NULL | |
| sex | varchar(5) | YES | | NULL | |
| info | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
mysql> alter table tab1 change info info2 char(20);
3.テーブルに新しいフィールドを挿入します
1)最後の列に新しい列を挿入します。
mysql> desc tab3;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(6) | NO | | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
#插入一个 zuihou 列
mysql> alter table tab3 add zuihou int(10);
2)テーブルの先頭に新しい列を挿入します。
mysql> alter table tab3 add sex char(10) first;
3)指定した列の後に新しい列を挿入します。
mysql> alter table tab3 add local varchar(255) after name;
4.フィールドを追加するときに制約を追加する
mysql> alter table tab3 add hello varchar(20) default 'work';
5、外部キーを追加し
、この操作の前に、自分自身のニーズを見つけるために、テーブルの主キー(私は、主キーを列TAB1テーブルをされている名前)
tab1のテーブル構造を:
TAB3テーブル構造を:
今、名前欄t3のテーブルをt1テーブルで追加します名前列の外部キー(t3_t1_nameはカスタム制約名です):
mysql> alter table tab3 add constraint tab3_tab1_name foreign key(name) references tab1(name);
tab3テーブルの変更を表示します。6
.外部キーを削除します
上記で追加した外部キーを削除します。tab3_tab1_nameは外部キーの名前です。
mysql> alter table tab3 drop foreign key tab3_tab1_name;
mysql> alter table tab3 drop key tab3_tab1_name;
——————————
外部キーと言えば、ここでは外部キーとは何かについて説明します。
関連情報のクエリはすべて、いくつかの用語を話すことに関するものです。外部キーの主な機能は、データの一貫性と整合性を維持することです。混乱していると聞き、理解できなかったとのこと。
ここでも、兄の言葉から説明します。下の小さな表を見ることができます
+ ------- + ref + ------- +
| sub | ------> | main |
+ ------- + + ------- +
テーブル(サブ)の列からメインテーブルの列の値を参照(ref)します。
たとえば、studentテーブルには学生番号(sid)があり、scoreテーブルの学生列(stu)は、studentテーブルの学生番号を参照しています。この時点では、scoreテーブルのstuについてです。学生テーブルのsidは外部キーです。
セカンダリテーブルは外部キーテーブルとも呼ばれ、プライマリテーブルは主キーテーブル、外部テーブルとも呼ばれ、列はフィールドとも呼ばれます。
だから設計するとき。表1に外部キーを追加します。この外部キーは、表2の学生番号フィールドです。次に、表1がメインテーブルで、表2が子テーブルです。
あなたの主従関係は逆さまです。ダイアグラムでは、表1は確かにメインテーブルです。表2は子テーブルですが、表1への外部キーの追加ではなく、表2への外部キーの追加と呼ばれます。表2の学生番号フィールドは、表1の学生番号フィールドの主キーである外部キーと呼ばれます。
あなたはこれを言うことができます:表1の学生番号フィールドは表2の外部キーです
————————外部キーの説明の終わり——————
7、列の削除
mysql> alter table tab3 drop zuihou;
注:削除する列が別のテーブルの列に関連している場合は、列を削除する前に関係を削除する必要があります。そうしないと、後で同じ名前の列が作成されるときに、自動的に関係が確立されます。
8.列の順序を変更します
mysql> alter table tab3 modify name varchar(10) first;
9.テーブルを削除します
#直接删除
mysql> drop table tab6;
Query OK, 0 rows affected (0.01 sec)
#再次删除这个表,可以看到已经提示说没有这个表了,说明已经删除
mysql> drop table tab6;
ERROR 1051 (42S02): Unknown table 'test1.tab6'
#进行判断后删除,if exists表示如果存在就删除
mysql> drop table if exists tab6;
Query OK, 0 rows affected, 1 warning (0.00 sec)
#可以看到上述返回的信息有1个warning事项,可以执行以下命令进行查看
mysql> show warnings; # 返回的信息显示不知道test1库中的tab6表
+-------+------+----------------------------+
| Level | Code | Message |
+-------+------+----------------------------+
| Note | 1051 | Unknown table 'test1.tab6' |
+-------+------+----------------------------+
1 row in set (0.00 sec)
同様に、テーブルの削除操作を実行するときに、関連付け関係がある場合は、最初に関連付け関係を削除してからテーブルを削除する必要があります。
同様に、テーブルの削除操作を実行する場合、関連付け関係がある場合は、関連付け関係を削除してからテーブルを削除する必要があります
。テーブルの削除操作を実行するときに、関連付け関係がある場合は、テーブルを削除する前に関連付け関係を削除する必要があります。