mysql 学习4 DDL创建表;删除表;改动表名;DDL给表中 添加 新字段;修改表中的字段;删除表中的字段;创建表时的类型说明;查看表创建信息;查看表结构;查看当前数据库中所有表;

发布于:2025-02-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

我们知道 表的创建,操作,都是在某一个数据库下面执行的,因此我们先要使用 use 数据库名,进入到某一个具体的数据库下,才能进行表的操作

例如,我们先进入itcast 数据库

use itcast;

如果在运行时不确定当前指令在那个数据库,可以使用 select database();查看当前所在的数据库

select database();

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

创建表

CREATE TABLE 表名(

        字段1 字段1类型[COMMENT '字段1注释'],

        字段2 字段2类型[COMMENT '字段2注释'],

        ......

        字段n 字段n类型[COMMENT '字段n注释']

)[COMMENT '表注释'];

CREATE TABLE 表名(

        字段1 字段1类型[COMMENT '字段1注释'],

        字段2 字段2类型[COMMENT '字段2注释'],

        ......

        字段n 字段n类型[COMMENT '字段n注释']

)[COMMENT '表注释'];

例子,创建如下的一张表

create table tb_user(
    id int comment '编号',
    name varchar(64) comment '姓名',
    age int comment '年龄',
    gender varchar(1) comment '性别'
) comment '用户表';

mysql> create table tb_user(
    -> id int comment '编号',
    -> name varchar(64) comment '姓名',
    -> age int comment '年龄',
    -> gender varchar(1) comment '性别'
    -> ) comment '用户表';
Query OK, 0 rows affected (0.03 sec)

查看当前数据库有哪些表

这里在数据库中新建了一个表,因此再使用 show tables看一下有哪些表

show tables;

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

查看表的创建语句

SHOW CREATE TABLE 表名;

show create table tb_user;

mysql> show create table tb_user;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_user | CREATE TABLE `tb_user` (
  `id` int DEFAULT NULL COMMENT '编号',
  `name` varchar(64) 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.01 sec)

查看表结构

DESC 表名;

例子:

desc tb_user;

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

创建表时的类型说明

1、整数类型:BIGINT、INT\INTEGER、MEDIUMINT、SMALLINT、TINYINT

--BIGINT:大整数类型,占用8个字节保存数据。范围为 -9223372036854775808 到 9223372036854775807(有符号)或 0 到 18446744073709551615(无符号)。
--INT\INTEGER:标准整数类型,占用4个字节保存数据,能够表示42亿多数据.范围为 -2147483648 到 2147483647(有符号)或 0 到 4294967295(无符号)。
--MEDIUMINT:中整数类型,占用3个字节保存数据。范围为 -8388608 到 8388607(有符号)或 0 到 16777215(无符号)。
--SMALLINT:小整数类型,占用2个字节保存数据,能够表示65536个数据。范围为 -32768 到 32767(有符号)或 0 到 65535(无符号)。
--TINYINT:迷你整数类型,占用1个字节保存数据,能够表示256个数值。范围为 -128 到 127(有符号)或 0 到 255(无符号)。

2、浮点类型:FLOAT、DOUBLE\REAL、DECIMAL\NUMERIC

比如高考数学成绩,满分150,可能得分数是 126.5  , 138, 37  , 也就是说,成绩最多占4位,小数占1位

score double(总长度,小数点后保留的位数)

score double(4,1);

FLOAT:单精度浮点数,占用 4 字节。
DOUBLE 或 REAL:双精度浮点数,占用 8 字节。
DECIMAL 或 NUMERIC:高精度小数,指定精度和小数位数。
salary    NUMERIC(8,2) NOT NULL

3、字符串类型:VARCHAR、CHAR、TEXT

CHAR:CHAR(n)中的n表示字符数。用于存储固定长度的字符串,即每条数据占用等长字节空间,最多可存储255个字符,当存储的字符串长度小于定义的长度时,MySQL会在字符串后面填充空格。适合用在身份证号、手机号等固定长度的字节。如果时utf8编码方式,那么CHAR类型占255*3个字节(utf8下一个字符占用1-3个字节)。
VARCHAR:VARCHAR(n)中的n表示字符数。用于存储可变长度的字符串,最多可以存储65535个字符。实际占用的存储空间取决于存储的字符串长度。适合用在长度可变的属性
emp_name  VARCHAR(50) NOT NULL
超过char和varchar的n设置后,字符串会被截断。

4. 二进制 TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB

存储二进制文件。

例如 音视频文件,可执行文件等,但是实际开发中 一般使用 专门的文件服务器存储

5、日期和时间类型:DATE、TIME、DATETIME

DATE:用于存储日期值,格式为 'YYYY-MM-DD',范围从 '1000-01-01' 到 '9999-12-31'。
TIME:用于存储时间值,格式为 'HH:MM:SS',范围从 '-838:59:59' 到 '838:59:59'。
DATETIME:用于存储日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS',范围从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。
TIMESTAMP:也用于存储日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS',范围从 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。在存储时会自动转换为当前时区的时间,并且具有自动更新功能,适合用于记录数据修改的时间。
YEAR:用于存储年份值,可以存储四位数的年份,范围从 1901 到 2155。

6. 无符号 UNSIGNED

age TINYINT UNSIGNED

无符号语法:在字段类型后面使用unsigned进行标识。age TINYINT UNSIGNED(年龄是一个迷你整型0-255,无符号表示)

练习

create table emp_info(
	id int comment '编号',
	workernumber varchar(10) comment '员工工号',
	workername varchar(10) comment '员工姓名',
	workergender char(1) comment '员工性别',
	age tinyint unsigned comment '员工年龄',
	idcard char(18) comment '员工身份证号',
	entrydate date comment '员工入职时间'
);

mysql> create table emp_info(
    -> id int comment '编号',
    -> workernumber varchar(10) comment '员工工号',
    -> workername varchar(10) comment '员工姓名',
    -> workergender char(1) comment '员工性别',
    -> age tinyint unsigned comment '员工年龄',
    -> idcard char(18) comment '员工身份证号',
    -> entrydate date comment '员工入职时间'
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emp_info         |
| tb_user          |
+------------------+
2 rows in set (0.00 sec)

mysql> DESC emp_info;
+--------------+------------------+------+-----+---------+-------+
| Field        | Type             | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| id           | int              | YES  |     | NULL    |       |
| workernumber | varchar(10)      | YES  |     | NULL    |       |
| workername   | varchar(10)      | YES  |     | NULL    |       |
| workergender | 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)

改动表名;

alter table 表名 rename to 新表名

例如:将 tb_user 这张表的名字 变成 new_tb_user

alter table tb_user rename to new_tb_user;

mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emp_info         |
| tb_user          |
+------------------+
2 rows in set (0.00 sec)

mysql> alter table tb_user rename to new_tb_user;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emp_info         |
| new_tb_user      |
+------------------+
2 rows in set (0.00 sec)

删除表;

drop table [if exists] 表名

例子,删除 new_tb_user 这张表

drop table if exists new_tb_user;

mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| emp_info         |
| new_tb_user      |
+------------------+
2 rows in set (0.00 sec)

mysql> drop table if exists new_tb_user;
Query OK, 0 rows affected (0.02 sec)

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

清空表

TRUNCATE TABLE 表名

清空表的 内部实现 为 : 删除表,然后重新创建表。因此表现为 如果 以前表中有数据,则会清空

truncate table emp_info;

mysql> truncate table emp_info;
Query OK, 0 rows affected (0.04 sec)

mysql> select * from emp_info;
Empty set (0.00 sec)

这里为了验证,使用select 查询了一下,后面会正式的学习 select

DDL给表中 添加 新字段;

alter table 表名 add 字段名 字段类型[长度] [comment 注释][约束]

例子:

添加一个 studentname字段,studentname字段类型为 varchar,最大为64.

添加一个 studentnumber 字段,studentnumber 字段类型为 int.

alter table emp_info add studentname varchar(64) comment '徒弟名字';

mysql> desc emp_info;
+--------------+------------------+------+-----+---------+-------+
| Field        | Type             | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| id           | int              | YES  |     | NULL    |       |
| workernumber | varchar(10)      | YES  |     | NULL    |       |
| workername   | varchar(10)      | YES  |     | NULL    |       |
| workergender | 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> alter table emp_info add studentname varchar(64) comment '徒弟名字';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp_info;
+--------------+------------------+------+-----+---------+-------+
| Field        | Type             | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+-------+
| id           | int              | YES  |     | NULL    |       |
| workernumber | varchar(10)      | YES  |     | NULL    |       |
| workername   | varchar(10)      | YES  |     | NULL    |       |
| workergender | char(1)          | YES  |     | NULL    |       |
| age          | tinyint unsigned | YES  |     | NULL    |       |
| idcard       | char(18)         | YES  |     | NULL    |       |
| entrydate    | date             | YES  |     | NULL    |       |
| studentname  | varchar(64)      | YES  |     | NULL    |       |
+--------------+------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

alter table emp_info add studentnumber int comment '徒弟工号';

mysql> alter table emp_info add studentnumber int comment '徒弟工号';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp_info;
+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id            | int              | YES  |     | NULL    |       |
| workernumber  | varchar(10)      | YES  |     | NULL    |       |
| workername    | varchar(10)      | YES  |     | NULL    |       |
| workergender  | char(1)          | YES  |     | NULL    |       |
| age           | tinyint unsigned | YES  |     | NULL    |       |
| idcard        | char(18)         | YES  |     | NULL    |       |
| entrydate     | date             | YES  |     | NULL    |       |
| studentname   | varchar(64)      | YES  |     | NULL    |       |
| studentnumber | int              | YES  |     | NULL    |       |
+---------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

修改表中的字段;

修改表中某一个字段的类型

alter table 表名 modify 字段 字段新类型

例子 

alter table emp_info modify studentname char(32);

mysql> desc emp_info;
+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id            | int              | YES  |     | NULL    |       |
| workernumber  | varchar(10)      | YES  |     | NULL    |       |
| workername    | varchar(10)      | YES  |     | NULL    |       |
| workergender  | char(1)          | YES  |     | NULL    |       |
| age           | tinyint unsigned | YES  |     | NULL    |       |
| idcard        | char(18)         | YES  |     | NULL    |       |
| entrydate     | date             | YES  |     | NULL    |       |
| studentname   | varchar(64)      | YES  |     | NULL    |       |
| studentnumber | int              | YES  |     | NULL    |       |
+---------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

mysql> alter table emp_info modify studentname char(32);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp_info;
+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id            | int              | YES  |     | NULL    |       |
| workernumber  | varchar(10)      | YES  |     | NULL    |       |
| workername    | varchar(10)      | YES  |     | NULL    |       |
| workergender  | char(1)          | YES  |     | NULL    |       |
| age           | tinyint unsigned | YES  |     | NULL    |       |
| idcard        | char(18)         | YES  |     | NULL    |       |
| entrydate     | date             | YES  |     | NULL    |       |
| studentname   | char(32)         | YES  |     | NULL    |       |
| studentnumber | int              | YES  |     | NULL    |       |
+---------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

修改表中的某一个字段的名字 和 类型

alter table 表名 change 旧字段名 新字段名 新字段名类型[长度] [comment 注释][约束] 

例子 

alter table emp_info change studentname newstudentname varchar(128);

mysql> desc emp_info;
+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id            | int              | YES  |     | NULL    |       |
| workernumber  | varchar(10)      | YES  |     | NULL    |       |
| workername    | varchar(10)      | YES  |     | NULL    |       |
| workergender  | char(1)          | YES  |     | NULL    |       |
| age           | tinyint unsigned | YES  |     | NULL    |       |
| idcard        | char(18)         | YES  |     | NULL    |       |
| entrydate     | date             | YES  |     | NULL    |       |
| studentname   | char(32)         | YES  |     | NULL    |       |
| studentnumber | int              | YES  |     | NULL    |       |
+---------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

mysql> alter table emp_info change studentname newstudentname varchar(128);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp_info;
+----------------+------------------+------+-----+---------+-------+
| Field          | Type             | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+-------+
| id             | int              | YES  |     | NULL    |       |
| workernumber   | varchar(10)      | YES  |     | NULL    |       |
| workername     | varchar(10)      | YES  |     | NULL    |       |
| workergender   | char(1)          | YES  |     | NULL    |       |
| age            | tinyint unsigned | YES  |     | NULL    |       |
| idcard         | char(18)         | YES  |     | NULL    |       |
| entrydate      | date             | YES  |     | NULL    |       |
| newstudentname | varchar(128)     | YES  |     | NULL    |       |
| studentnumber  | int              | YES  |     | NULL    |       |
+----------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

alter table emp_info change newstudentname newstudentnumber float(3,1);

mysql> desc emp_info;
+----------------+------------------+------+-----+---------+-------+
| Field          | Type             | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+-------+
| id             | int              | YES  |     | NULL    |       |
| workernumber   | varchar(10)      | YES  |     | NULL    |       |
| workername     | varchar(10)      | YES  |     | NULL    |       |
| workergender   | char(1)          | YES  |     | NULL    |       |
| age            | tinyint unsigned | YES  |     | NULL    |       |
| idcard         | char(18)         | YES  |     | NULL    |       |
| entrydate      | date             | YES  |     | NULL    |       |
| newstudentname | varchar(128)     | YES  |     | NULL    |       |
| studentnumber  | int              | YES  |     | NULL    |       |
+----------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)


mysql> alter table emp_info change newstudentname newstudentnumber float(3,1);
Query OK, 0 rows affected, 1 warning (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> desc emp_info;
+------------------+------------------+------+-----+---------+-------+
| Field            | Type             | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| id               | int              | YES  |     | NULL    |       |
| workernumber     | varchar(10)      | YES  |     | NULL    |       |
| workername       | varchar(10)      | YES  |     | NULL    |       |
| workergender     | char(1)          | YES  |     | NULL    |       |
| age              | tinyint unsigned | YES  |     | NULL    |       |
| idcard           | char(18)         | YES  |     | NULL    |       |
| entrydate        | date             | YES  |     | NULL    |       |
| newstudentnumber | float(3,1)       | YES  |     | NULL    |       |
| studentnumber    | int              | YES  |     | NULL    |       |
+------------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

删除表中的字段;

alter table 表名 drop 字段名;

例子:删除 emp_info 表中的 studentnumber 字段

alter table emp_info drop studentnumber;

mysql> desc emp_info;
+------------------+------------------+------+-----+---------+-------+
| Field            | Type             | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| id               | int              | YES  |     | NULL    |       |
| workernumber     | varchar(10)      | YES  |     | NULL    |       |
| workername       | varchar(10)      | YES  |     | NULL    |       |
| workergender     | char(1)          | YES  |     | NULL    |       |
| age              | tinyint unsigned | YES  |     | NULL    |       |
| idcard           | char(18)         | YES  |     | NULL    |       |
| entrydate        | date             | YES  |     | NULL    |       |
| newstudentnumber | float(3,1)       | YES  |     | NULL    |       |
| studentnumber    | int              | YES  |     | NULL    |       |
+------------------+------------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

mysql> alter table emp_info drop studentnumber;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp_info;
+------------------+------------------+------+-----+---------+-------+
| Field            | Type             | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| id               | int              | YES  |     | NULL    |       |
| workernumber     | varchar(10)      | YES  |     | NULL    |       |
| workername       | varchar(10)      | YES  |     | NULL    |       |
| workergender     | char(1)          | YES  |     | NULL    |       |
| age              | tinyint unsigned | YES  |     | NULL    |       |
| idcard           | char(18)         | YES  |     | NULL    |       |
| entrydate        | date             | YES  |     | NULL    |       |
| newstudentnumber | float(3,1)       | YES  |     | NULL    |       |
+------------------+------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)


总结


网站公告

今日签到

点亮在社区的每一天
去签到