电脑基础 · 2023年3月25日

SQL基础语句 - 数据定义DDL操作数据库和数据表的详细介绍

文章目录

    • 数据定义DDL
      • DDL操作数据库
      • DDL操作数据表

数据定义DDL

DDL操作数据库

查询:

查询数据库: SHOW DATABASES;

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

创建:

创建数据库: CREATE DATABASE 数据库名称;

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

创建数据库(判断,如果不存在则创建): CREATE DATABASE IF NOT EXISTS 数据库名称;

mysql> CREATE DATABASE IF NOT EXISTS db1;
Query OK, 1 row affected, 1 warning (0.00 sec)

删除:

删除数据库: DROP DATABASE 数据库名称;

mysql> DROP DATABASE db1;
Query OK, 0 rows affected (0.02 sec)

删除数据库(判断,如果存在则删除): DROP DATABASE IF EXISTS 数据库名称;

mysql> DROP DATABASE IF EXISTS db1;
Query OK, 0 rows affected, 1 warning (0.01 sec)

使用数据库:

使用某个数据库: USE 数据库名称;

mysql> USE db1;
Database changed

查看当前使用的数据库: SELECT DATABASE();

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)


DDL操作数据表

查询表(Retrieve):

查询当前数据库下所有表的名称: SHOW TABLES;

例如下面查看mysql数据库中的数据表

mysql> USE mysql;
Database changed
mysql> SHOW TABLES;
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                         |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                   |
| innodb_table_stats                                   |
| ndb_binlog_index                                     |
| password_history                                     |
| plugin                                               |
| procs_priv                                           |
| proxies_priv                                         |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version              |
| replication_group_member_actions                     |
| role_edges                                           |
| server_cost                                          |
| servers                                              |
| slave_master_info                                    |
| slave_relay_log_info                                 |
| slave_worker_info                                    |
| slow_log                                             |
| tables_priv                                          |
| time_zone                                            |
| time_zone_leap_second                                |
| time_zone_name                                       |
| time_zone_transition                                 |
| time_zone_transition_type                            |
| user                                                 |
+------------------------------------------------------+
38 rows in set (0.00 sec)

查询表的具体结构: DESC 表名称;

例如下面查询的是mysql数据库中的func数据表

mysql> DESC func;
+-------+------------------------------+------+-----+---------+-------+
| Field | Type                         | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+---------+-------+
| name  | char(64)                     | NO   | PRI |         |       |
| ret   | tinyint                      | NO   |     | 0       |       |
| dl    | char(128)                    | NO   |     |         |       |
| type  | enum('function','aggregate') | NO   |     | NULL    |       |
+-------+------------------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

创建表(Create):

注意:每一行字段用逗号隔开, 最后一行末尾,不能加逗号

创建表语法格式如下:

CREATE TABLE 表名 (
		字段名1  数据类型1,
		字段名2  数据类型2,,
		字段名n  数据类型n
);

在我们自己创建的数据库db1中进行表的创建演示:

mysql> USE db1;
Database changed
mysql> CREATE TABLE tb_user(
    -> id int,
    -> username varchar(20),
    -> password varchar(32)
    -> );
Query OK, 0 rows affected (0.01 sec)

创建表案例练习:

设计一张学生表,请注重数据类型、长度的合理性

  • 编号
  • 姓名,姓名最长不超过10个汉字
  • 性别,因为取值只有两种可能,因此最多一个汉字
  • 生日,取值为年月日
  • 入学成绩,小数点后保留两位
  • 邮件地址,最大长度不超过 64
  • 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
  • 学生状态(用数字表示,正常、休学、毕业…)
mysql> CREATE TABLE student(
    -> id int,
    -> name varchar(10),
    -> sex char(1),
    -> birthday date,
    -> score double(5,2),
    -> email varchar(64),
    -> tel varchar(15),
    -> status tinyint
    -> );
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> DESC student;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| name     | varchar(10) | YES  |     | NULL    |       |
| sex      | char(1)     | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| score    | double(5,2) | YES  |     | NULL    |       |
| email    | varchar(64) | YES  |     | NULL    |       |
| tel      | varchar(15) | YES  |     | NULL    |       |
| status   | tinyint     | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.01 sec)

修改表(Update):

修改表名: ALTER TABLE 表名 RENAME TO 新的表名;

例如修改tb_user表的名字

mysql> ALTER TABLE tb_user RENAME TO user;
Query OK, 0 rows affected (0.01 sec)

添加一列: ALTER TABLE 表名 ADD 列名 数据类型;

mysql> ALTER TABLE user ADD address varchar(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改数据类型: ALTER TABLE 表名 MODIFY 列名 新数据类型;

mysql> ALTER TABLE user MODIFY address char(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改列名和数据类型: ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;

mysql> ALTER TABLE user CHANGE address addr varchar(30);
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除列: ALTER TABLE 表名 DROP 列名;

mysql> ALTER TABLE user DROP addr;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除(Delete):

删除表: DROP TABLE 表名;

mysql> DROP TABLE user;
Query OK, 0 rows affected (0.01 sec)

删除表(判断是否存在, 存在则删除): DROP TABLE IF EXISTS 表名;

mysql> DROP TABLE IF EXISTS user;
Query OK, 0 rows affected, 1 warning (0.01 sec)