MySQL学习——操作表

Wesley13
• 阅读 757

MySQL学习——操作表

摘要:本文主要学习了使用DDL语句操作表的方法。

创建表

语法

1 create table 表名 [表定义选项] [表选项];

表定义选项

用来创建定义表的结构,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

实例

 1 mysql> create table test (
 2     ->   id int(11) not null comment '编号',
 3     ->   name varchar(50) default null comment '姓名',
 4     ->   address varchar(50) default null comment '地址',
 5     ->   status int(2) default null comment '状态',
 6     ->   createtime date default null comment '创建时间',
 7     ->   updatetime date default null comment '修改时间',
 8     ->   primary key (id)
 9     -> ) engine=innodb default charset=utf8mb4 comment='测试';
10 Query OK, 0 rows affected (0.01 sec)
11 
12 mysql>

复制表

语法

1 create table 新表名 as select * from 旧表名;

实例

1 Database changed
2 mysql> create table grade as select * from score;
3 Query OK, 12 rows affected (0.01 sec)
4 Records: 12  Duplicates: 0  Warnings: 0
5 
6 mysql>

查看表的列

语法

1 show columns from 表名;

实例

 1 mysql> show columns from test;
 2 +------------+-------------+------+-----+---------+-------+
 3 | Field      | Type        | Null | Key | Default | Extra |
 4 +------------+-------------+------+-----+---------+-------+
 5 | id         | int(11)     | NO   | PRI | NULL    |       |
 6 | name       | varchar(50) | YES  |     | NULL    |       |
 7 | address    | varchar(50) | YES  |     | NULL    |       |
 8 | status     | int(2)      | YES  |     | NULL    |       |
 9 | createtime | date        | YES  |     | NULL    |       |
10 | updatetime | date        | YES  |     | NULL    |       |
11 +------------+-------------+------+-----+---------+-------+
12 6 rows in set (0.00 sec)
13 
14 mysql>

说明

Field:列名。

Type:类型。

Null:表示该列是否可以存储NULL值。

Key:表示该列是否已编制索引。PRI表示该列是主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次。

Default:表示该列是否有默认值,如果有,值是多少。

Extra:表示可以获取的与给定列有关的附加信息,如:AUTO_INCREMENT等。

查看表结构

语法

1 desc 表名;

实例

 1 mysql> desc test;
 2 +------------+-------------+------+-----+---------+-------+
 3 | Field      | Type        | Null | Key | Default | Extra |
 4 +------------+-------------+------+-----+---------+-------+
 5 | id         | int(11)     | NO   | PRI | NULL    |       |
 6 | name       | varchar(50) | YES  |     | NULL    |       |
 7 | address    | varchar(50) | YES  |     | NULL    |       |
 8 | status     | int(2)      | YES  |     | NULL    |       |
 9 | createtime | date        | YES  |     | NULL    |       |
10 | updatetime | date        | YES  |     | NULL    |       |
11 +------------+-------------+------+-----+---------+-------+
12 6 rows in set (0.00 sec)
13 
14 mysql>

说明

Filed:列名。

Type:类型。

Null:表示该列是否可以存储NULL值。

Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次。

Default:表示该列是否有默认值,如果有,值是多少。

Extra:表示可以获取的与给定列有关的附加信息,如:AUTO_INCREMENT等。

查询所有的表

语法

1 show tables;

实例

1 mysql> show tables;
2 +----------------+
3 | Tables_in_demo |
4 +----------------+
5 | test           |
6 +----------------+
7 1 row in set (0.00 sec)
8 
9 mysql>

查看表的创建

语法

1 show create table 表名 \G;

实例

 1 mysql> show create table test \G;
 2 *************************** 1. row ***************************
 3        Table: test
 4 Create Table: CREATE TABLE `test` (
 5   `id` int(11) NOT NULL COMMENT '编号',
 6   `name` varchar(50) DEFAULT NULL COMMENT '姓名',
 7   `address` varchar(50) DEFAULT NULL COMMENT '地址',
 8   `status` int(2) DEFAULT NULL COMMENT '状态',
 9   `createtime` date DEFAULT NULL COMMENT '创建时间',
10   `updatetime` date DEFAULT NULL COMMENT '修改时间',
11   PRIMARY KEY (`id`)
12 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试'
13 1 row in set (0.00 sec)
14 
15 ERROR: 
16 No query specified
17 
18 mysql>

查看表的状态

语法

1 show table status like from 数据库 [like '模糊查询表名'] \G;

实例

 1 mysql> show table status from demo \G ;
 2 *************************** 1. row ***************************
 3            Name: test
 4          Engine: InnoDB
 5         Version: 10
 6      Row_format: Compact
 7            Rows: 0
 8  Avg_row_length: 0
 9     Data_length: 16384
10 Max_data_length: 0
11    Index_length: 0
12       Data_free: 0
13  Auto_increment: NULL
14     Create_time: 2019-09-02 17:21:06
15     Update_time: NULL
16      Check_time: NULL
17       Collation: utf8mb4_general_ci
18        Checksum: NULL
19  Create_options: 
20         Comment: 测试
21 1 row in set (0.00 sec)
22 
23 ERROR: 
24 No query specified
25 
26 mysql>

查看表索引

语法

show index from 表名;

示例

 1 mysql> show index from user;
 2 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
 3 | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
 4 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
 5 | user  |          0 | PRIMARY  |            1 | Host        | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
 6 | user  |          0 | PRIMARY  |            2 | User        | A         |           3 |     NULL | NULL   |      | BTREE      |         |               |
 7 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
 8 2 rows in set (0.00 sec)
 9 
10 mysql>

修改表

添加列

1 alter table 表名 add column 新列名 [数据类型] [约束条件] [first | after 已存在的列名];

实例

1 mysql> alter table test add column age int(3) null comment '年龄' after name;
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql>

修改列

1 alter table 表名 change column 旧列名 新列名 [新数据类型];

实例

1 mysql> alter table test change column username name varchar(30) not null default 'none' comment '姓名';
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql>

删除列

1 alter table 表名 drop 列名;

实例

1 mysql> alter table test drop age;
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql>

删除表

语法

1 drop table [if exists] 表名;

实例

1 mysql> drop table demo;
2 Query OK, 0 rows affected (0.01 sec)
3 
4 mysql>

清空表

语法

1 truncate table 表名;

实例

1 mysql> truncate table demo;
2 Query OK, 0 rows affected (0.01 sec)
3 
4 mysql>
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这