【数据库】SQL--DDL(初阶)

2024-06-06 06:04

本文主要是介绍【数据库】SQL--DDL(初阶),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • DDL
    • 1. 数据库操作
      • 1.1. 表操作
        • 1.1.1 创建
        • 1.1.2. 查询
    • 2. 数据类型及案例
      • 2.1 数值类型
      • 2.2 字符串类型
      • 2.3 日期时间类型
      • 2.4 案例练习
    • 3. 表操作--修改
      • 3.1 添加字段
      • 3.2 修改字段
      • 3.3 修改表名
    • 4. 表操作-删除
      • 4.1 删除字段
      • 4.2 删除表
    • 5. DDL小结


更多数据库MySQL系统内容就在以下专栏:
专栏链接:数据库MySQL


DDL

在这里插入图片描述

1. 数据库操作

查询:

  1. 查询所有数据库:
SHOW DATABASES;

示例代码:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

当我们输入show databases;指令时,就会显示出我们电脑中此时所有存在的数据库。

  1. 查询当前数据库:
SELECT DATABASE();

示例代码:
在这里插入图片描述

mysql> select database();
+------------+
| database() |
+------------+
| sys        |
+------------+
1 row in set (0.00 sec)

如果我们已经忘记此时处在哪个数据库下,我们就可以使用这条语句来进行查询。在输入select database() ;指令时,会显示出电脑此时处在的数据库。

创建:

CREATE DATABASE [IF NOT EXISTS] 数据库名[DEFAULT CHARSET 字符集] [COLLATE 排序规则];

示例代码:

mysql> create database itcast;
Query OK, 1 row affected (0.01 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

在这个代码中,我们创建了一个数据库itcast.

此时,我们已经创建了itcast这个数据库,如果我们再输入创建一个itcast数据库的语句,程序将会报错。

示例代码:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.01 sec)mysql>
mysql>
mysql> create database itcast;
ERROR 1007 (HY000): Can't create database 'itcast'; database exists
mysql>
  • 从上面的代码中可以看出,如果创建已经存在的数据库,程序将会报错。
    在这里插入图片描述

为了避免这样的情况发生,我们可以使用if not exists。

示例代码:

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)mysql>
mysql>
mysql> create database if not exists itcast;
Query OK, 1 row affected, 1 warning (0.01 sec)mysql>
  • 加上 if not exists 这个语句,就代表如果存在itcast 这个数据库,就不创建;如果不存在itcast 这个数据库,就创建一个新的itcast 数据库。

我们在创建数据的时候,还可以指定其字符集。

示例代码:

mysql>
mysql> create database itxiaobu default charset utf8mb4;
Query OK, 1 row affected (0.01 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| itxiaobu           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
8 rows in set (0.00 sec)mysql>

在这个代码中,创建了itxiaobu 这个数据库,并指定其字符集为utf8mb4,我们通常不使用utf8这个字符集,因为utf8是3个字节,但是我们其中是有占4个字节的,所以我们使用utf8mb4。

删除:

DROP DATABASE[IF EXISTS]数据库名;

示例代码:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| itxiaobu           |
| mysql              |
| performance_schema |
| sys                |
| text               |
+--------------------+
9 rows in set (0.00 sec)

此时,我们电脑中存在text 这样一个数据库,如何删除这个数据库?
在这里插入图片描述

mysql> drop database text;
Query OK, 0 rows affected (0.02 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| company            |
| demo               |
| information_schema |
| itcast             |
| itxiaobu           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
8 rows in set (0.01 sec)

使用drop database 数据库名;这个语句就可以达到删除指定数据库的目的。


如果我们想要删除一个数据库,但是并不知道它存不存在,也不想程序报错,就可以加上if exists

示例代码:

mysql>
mysql> drop database if exists text;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql>

使用:

USE 数据库名;

示例代码:

mysql>
mysql> select database();
+------------+
| database() |
+------------+
| itxiaobu   |
+------------+
1 row in set (0.00 sec)

可以看出我们一开始 处在itxiaobu 这个数据下,
在这里插入图片描述

现在我们要切换到itcast 这个数据库下:

mysql> use itcast;
Database changed
mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| itcast     |
+------------+
1 row in set (0.00 sec)mysql>

使用use 数据库名这个语句,就可以切换到指定的数据库下。

1.1. 表操作

1.1.1 创建
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
.....
字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];

注意:[…]为可选参数,最后一个字段后面没有逗号。

  • 我们实现一下下面的一个表
    在这里插入图片描述
    示例代码:
mysql>
mysql> create table tb_user(-> id int comment'编号',-> name varchar(50) comment '姓名',-> age int comment'年龄',-> gender varchar(1) comment'性别'-> ) comment '用户表';
Query OK, 0 rows affected (0.04 sec)

注意:

  • 代码中,除了注释中的汉字,其余全部都是英文。
  • 我们在这个代码中创建一个用户表tb_user,这里仅仅是实现了这样的一个表结构。
1.1.2. 查询
  1. 查询当前数据库所有表:
SHOW TABLES;

示例代码:

mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| itcast     |
+------------+
1 row in set (0.00 sec)

可以看到我们当前处在itcast 这个数据下。

mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| tb_user          |
+------------------+
1 row in set (0.00 sec)mysql>

使用show tables;这个语句就可以查询该数据库下的所有表。
在这里插入图片描述


  1. 查询表结构:
DESC 表名;

仅仅使用show tables;语句是仅仅只能查看所处数据下的所有表名称,不能查看其具体的表结构。

mysql>
mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int         | YES  |     | NULL    |       |
| name   | varchar(50) | YES  |     | NULL    |       |
| age    | int         | YES  |     | NULL    |       |
| gender | varchar(1)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

使用desc tb_user;语句就可以查看tb_user这个表的表结构。


  1. 查询指定表的建表语言:
SHOW CREATE TABLE 表名;

在创建tb_user表时,是有注释的,使用desc tb_user;语句只能查看其表结构,,并不能看到注释。

mysql> show create table tb_user;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table|
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_user | CREATE TABLE `tb_user` (`id` int DEFAULT NULL COMMENT '编号',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`age` int DEFAULT NULL COMMENT '年龄',`gender` varchar(1) DEFAULT NULL COMMENT '性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表' |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql>

使用show create table tb_user;语句 就可以查看tb_user表的建表语言。

2. 数据类型及案例

2.1 数值类型

在这里插入图片描述

M(精度)和D(标度):

  • 精度:小数点前后 共有几位数字。
  • 标度:小数点后共有几位数字。
  • 例如:double(4,1)
    定义了一个double 类型的数据,表示其总位数为4位,即小数点前后有四位数字,其小数点之后有一位数字。

如果定义年龄的数值类型的话,我们使用 age tinyint unsigned .如果定义为int类型,int占4个字节的内存空间,太浪费内存空间了;再加上年龄不可能是负数,所以我们使用unsigned 来进行修饰。

2.2 字符串类型

在这里插入图片描述

char和varchar

  • 区别:char 性能高; varchar 性能低。
  • char(10)和 varchar(10):
  1. 10都代表所能存储的最大字符串长度,一旦超出10个字符将会报错。
  2. 在char中 即便只是一个字符,也会占用10个字符的空间,未未占用的空间会使用空格进行补位。
  3. varchar 中如果是一个字符,就只占用一个字符的空间,两个字符就占用两个字符的空间。varchar 会根据输入的内容计算当前所占用的空间,这也是varchar 性能差的原因。

2.3 日期时间类型

在这里插入图片描述

date类型只表示日期;
time类型只表示时间。
year类型只表示年;
datetime类型表示日期和时间;
timestamp类型表示时间戳。

2.4 案例练习

在这里插入图片描述

mysql>
mysql> create table emp(-> id int comment '编号',-> workno varchar(10) comment'工号',-> name varchar(10) comment '姓名',-> gender char(1) comment '性别',-> age tinyint unsigned comment '年龄',-> idcard char(18) comment '身份证号',-> entrydate date comment '入职时间'-> ) comment '员工表';
Query OK, 0 rows affected (0.03 sec)mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)mysql>

3. 表操作–修改

3.1 添加字段

基本语法:

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

案例:

为emp表添加一个新的字段“昵称” 为nickname,类型为varchar(20)

示例代码:

mysql> alter table emp add nickname varchar(20) comment '昵称';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql>
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
| nickname  | varchar(20)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)mysql>

3.2 修改字段

  1. 修改数据类型:
ALTER TABLE 表名MODIFY 字段名 新数据类型(长度);
  1. 修改字段名和字段类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; 
  • 案例:

将emp表的nickname 字段修改为username,类型为varchar(30)

示例代码:

mysql> alter table emp change nickname username varchar(30) comment
'昵称';
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
| username  | varchar(30)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)mysql>

3.3 修改表名

基本语法:

ALTER TABLE 表名 RENAME TO 新表名;

案例:

将emp表的表名修改为employee

示例代码:

mysql>
mysql> alter table emp rename to emloyee;
Query OK, 0 rows affected (0.02 sec)mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
| tb_user          |
+------------------+
2 rows in set (0.00 sec)mysql>

4. 表操作-删除

4.1 删除字段

基本语法:

ALTER TABLE 表名 DROP 字段名;

案例:

将employee表的字段username删除

示例代码:

mysql> alter table emloyee drop username;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc emloyee;
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id        | int              | YES  |     | NULL    |       |
| workno    | varchar(10)      | YES  |     | NULL    |       |
| name      | varchar(10)      | YES  |     | NULL    |       |
| gender    | char(1)          | YES  |     | NULL    |       |
| age       | tinyint unsigned | YES  |     | NULL    |       |
| idcard    | char(18)         | YES  |     | NULL    |       |
| entrydate | date             | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

4.2 删除表

  1. 删除表
DROP TABLE [IF EXISTS] 表名;
mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
| tb_user          |
+------------------+
2 rows in set (0.00 sec)mysql>
mysql>
mysql> drop table tb_user;
Query OK, 0 rows affected (0.02 sec)mysql>
mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
+------------------+
1 row in set (0.00 sec)
  1. 删除指定表,并重新创建该表
TRUNCATE TABLE 表名;

案例:

删除emloyee表

mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
+------------------+
1 row in set (0.00 sec)mysql>
mysql>
mysql> truncate table emloyee;
Query OK, 0 rows affected (0.03 sec)mysql>
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emloyee          |
+------------------+
1 row in set (0.00 sec)
mysql>

这条删除语句,会删除掉指定的表。但是还会再创建一个同样名字的表,只不过这个表的内容是空的,只是一个空的表结构而已。

5. DDL小结

在这里插入图片描述

这篇关于【数据库】SQL--DDL(初阶)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035285

相关文章

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务