文章目录
- 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. 数据库操作
查询:
- 查询所有数据库:
SHOW DATABASES;
示例代码:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| company |
| demo |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
当我们输入show databases;指令时,就会显示出我们电脑中此时所有存在的数据库。
- 查询当前数据库:
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. 查询
- 查询当前数据库所有表:
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;
这个语句就可以查询该数据库下的所有表。
- 查询表结构:
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这个表的表结构。
- 查询指定表的建表语言:
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):
- 10都代表所能存储的最大字符串长度,一旦超出10个字符将会报错。
- 在char中 即便只是一个字符,也会占用10个字符的空间,未未占用的空间会使用空格进行补位。
- 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 修改字段
- 修改数据类型:
ALTER TABLE 表名MODIFY 字段名 新数据类型(长度);
- 修改字段名和字段类型:
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 删除表
- 删除表
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)
- 删除指定表,并重新创建该表
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>
这条删除语句,会删除掉指定的表。但是还会再创建一个同样名字的表,只不过这个表的内容是空的,只是一个空的表结构而已。