K丶W

导航

 

DDL操作总结

DDL(Data Define Language,数据定义语言):主要⽤来对数据库、表进⾏⼀些管理操作。 如:建库、删库、建表、修改表、删除表、对列的增删改等等。

⽂中涉及到的语法⽤[]包含的内容属于可选项,用<>包含的内容为实际操作中替换项,命令的详细语法可在MySQL中使用help <命令名称>查看,下列为常用语法总结及示例。


 

数据库管理语句

1. 创建数据库

 CREATE DATABASE [IF NOT EXISTS] <数据库名> 

mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.01 sec)

 

2. 删除数据库

 DROP DATABASE [IF EXISTS] db_name 

 

数据表管理语句

1.创建数据表

CREATE TABLE 表名(
    <字段名1>  <类型> [约束条件] [COMMENT '<字段说明>'],
    <字段名2>  <类型> [约束条件] [COMMENT '<字段说明>'],
    <字段名3>  <类型> [约束条件] [COMMENT '<字段说明>']
);

 

 2.完整性约束条件

完整性约束条件用于保护数据库中数据的完整性,MySQL中常见完整性约束如下:

PRIMARY KEY (PK):标识该字段为主键,用于唯一标识元组,若插入记录操作导致主键重复则会插入失败并报错
该约束有两种创建方式:

一种是跟在该字段创建语句之后

一种是在所有字段创建语句之后 

方式二也可用于创建组合主键

FROEIGN KEY (FK):用于标识字段为外键,创建语法为

FOREIGN KEY(<当前字段名> ,[<当前字段名>]) REFERENCES  <外键表名>(<外键字段名>[,<外键字段名>])

 注:

  • 两张表中需要建⽴外键关系的字段类型需要⼀致
  • 要设置外键的字段不能为主键
  • 被引⽤的字段需要为主键
  • 被插⼊的值在外键表必须存在

UNIQUE KEY (UK):用于标识字段值唯一,插入重复的值会插入失败。

创建语法与主键一致,可在要创建的字段创建语句之后,也可在所有字段的创建语句之后,在所有字段创建语句之后时可创建多个字段。

NOT NULL:用于标识字段非空

mysql> CREATE TABLE test(
    -> field INT NOT NULL
    -> );
Query OK, 0 rows affected (0.06 sec)

 DEFAULT VALUE:用于为字段设置默认值

mysql> CREATE TABLE test(
    -> field1 VARCHAR(10) DEFAULT  'aaa',
    -> field2 INT DEFAULT 0
    -> );
Query OK, 0 rows affected (0.05 sec)

 AUTO_INCREMENT:用于标识字段自动增长,设置自动增长的字段必须为整数类型且为主键

mysql> CREATE TABLE test(
    -> field1 INT PRIMARY KEY AUTO_INCREMENT,
    -> field2 VARCHAR(10)
    -> );
Query OK, 0 rows affected (0.04 sec)

注:自增字段的初始值和步长可在mysql数据库中通过修改配置文件设置,默认初始值和步长都为1,⾃增长字段的当前值存储在内存中,数据库每次重启之后,会查询当前表中⾃增字段的最⼤值作 为当前值,如果表数据被清空之后,数据库重启了,⾃增字段的值将从初始值开始

 

3.修改表名

一般语法: ALTER TABLE <当前表名> RENAME [TO] <新表名>; 

mysql> ALTER TABLE test RENAME new_test;
Query OK, 0 rows affected (0.04 sec)

 

4.设置表备注

一般语法: ALTER TABLE <表名> COMMENT '<备注信息>'; 

mysql> ALTER TABLE test COMMENT  '测试表';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

5.复制表

只复制表结构

CREATE TABLE <表名> LIKE <被复制表名>;
mysql> DESC test0;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| field1 | int         | NO   | PRI | NULL    |       |
| field2 | varchar(10) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> CREATE TABLE test1 LIKE test0;
Query OK, 0 rows affected (0.05 sec)

mysql> DESC test1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| field1 | int         | NO   | PRI | NULL    |       |
| field2 | varchar(10) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

复制表结构+数据

CREATE TABLE <表名> [AS] SELECT <字段名>,... FROM <被复制表> [WHERE 条件];
mysql> SELECT * FROM test0;
+--------+--------+
| field1 | field2 |
+--------+--------+
|      1 | aaa    |
+--------+--------+
1 row in set (0.00 sec)

mysql> CREATE TABLE test1 AS SELECT * FROM test0;
Query OK, 1 row affected (0.07 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test1;
+--------+--------+
| field1 | field2 |
+--------+--------+
|      1 | aaa    |
+--------+--------+
1 row in set (0.00 sec)

 

6.删除表

DROP TABLE <表名>;
mysql> DROP TABLE test1;
Query OK, 0 rows affected (0.06 sec)

 

7.表中字段管理

添加字段或约束

ALTER TABLE <表名> ADD COLUMN <列名> <类型> [约束条件]
mysql> ALTER TABLE test ADD COLUMN field3 INT NOT NULL;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| field1 | int         | NO   | PRI | NULL    | auto_increment |
| field2 | varchar(10) | YES  |     | NULL    |                |
| field3 | int         | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

  mysql> ALTER TABLE test ADD UNIQUE(field3);
  Query OK, 0 rows affected (0.04 sec)
  Records: 0 Duplicates: 0 Warnings: 0 

  mysql> SHOW COLUMNS FROM test;
  +--------+-------------+------+-----+---------+----------------+
  | Field | Type | Null | Key | Default | Extra |
  +--------+-------------+------+-----+---------+----------------+
  | field1 | int | NO | PRI | NULL | auto_increment |
  | field2 | varchar(10) | YES | | NULL | |
  | field3 | int | NO | UNI | NULL | |
  +--------+-------------+------+-----+---------+----------------+
  3 rows in set (0.01 sec)

修改字段或约束

ALTER TABLE <表名> MODIFY COLUMN <列名> <新类型> [约束];
ALTER TABLE <表名> CHANGE COLUMN <列名> <新列名> <新类型> [约束];

注:MODIFY和CHANGE的不同在于CHANGE可以修改列名

mysql> ALTER TABLE test MODIFY field3 VARCHAR(10)  NULL;
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| field1 | int         | NO   | PRI | NULL    | auto_increment |
| field2 | varchar(10) | YES  |     | NULL    |                |
| field3 | varchar(10) | YES  | UNI | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE test CHANGE field3 age INT  NOT NULL;
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| field1 | int         | NO   | PRI | NULL    | auto_increment |
| field2 | varchar(10) | YES  |     | NULL    |                |
| age    | int         | NO   | UNI | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

删除字段或约束

ALTER TABLE <表名> DROP COLUMN <列名>
mysql> ALTER TABLE test DROP age;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC test;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| field1 | int         | NO   | PRI | NULL    | auto_increment |
| field2 | varchar(10) | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
posted on 2020-12-31 21:57  K丶W  阅读(56)  评论(0编辑  收藏  举报