MySQL的表操作

#前言:我们说过,库相当于一个文件夹,表相当于文件夹里的一个个文件,表里面的一条记录相当于一行内容,表中的一条记录有对应的标题,称为表的字段

#直观表

#id,name,sex,age为表的字段,其余一行内容称为一条记录

1.建表

#创建表语法格式

Create  table <表名>  (
    <字段名1><类型1>,
        …..
    <字段名n><类型n>
);
#提示:
  1.其中create table是关键字,不能更改,但是大小写可以变化
  2.字段名和类型是必须的
  3.同张表中,字段名不能相同

#查看帮助:help create table

#例子:

#1.创建db库
mysql> create database db;
Query OK, 1 row affected (0.00 sec)

mysql> use db;
Database changed

#2.创建一个student表
mysql> create table student (
    -> id int(4) not null auto_increment,
    -> name char(20) not null,
    -> age tinyint(2) not null default '0',
    -> dept varchar(16) default null,
    -> primary key(id));
Query OK, 0 rows affected (0.01 sec)

#解释表的字段意思:
  create table 表示创建表的固定关键字,student为表名,有四个字段,分别表示
  id:学号列,  int:数字类型,         4:长度为4,  not null:不为空值, auto_incement:自增长
  name:名字列,char:定长字符类型,    20:长度为20, not null:不为空值
  age:年龄列, tinyint:很小的数字类型,2:长度为2,  not null:不为空值, default '0':默认为0值
  dept:系别列,varchar:可变长字符类型,16:长度为16,default null:默认为空


#3.查看建表语句
mysql> show create table student\G;
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `age` tinyint(2) NOT NULL DEFAULT '0',
  `dept` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.07 sec)

#数据类型

#mysql中,有三种主要的类型:文本、数字和日期/时间类型

#数字类型

类型           大小        用途
TINYINT       1 字节     小整数值
SMALLINT      2 字节     大整数值
MEDIUMINT     3 字节     大整数值
INT或INTEGER  4 字节     大整数值
BIGINT        8 字节     极大整数值
FLOAT         4 字节     单精度
浮点数值
DOUBLE        8 字节  

#日期/时间类型

类型        大小(字节)        格式                    用途
DATE        3              YYYY-MM-DD              日期值
TIME        3              HH:MM:SS               时间值或持续时间
YEAR        1              YYYY                    年份值
DATETIME    8              YYYY-MM-DD HH:MM:SS    混合日期和时间值
TIMESTAMP   4              YYYYMMDD HHMMSS       混合日期和时间值,时间戳

#字符串类型

类型          大小                     用途
CHAR         0-255字节                定长字符串
VARCHAR      0-65535 字节             变长字符串
TINYBLOB     0-255字节                不超过 255 个字符的二进制字符串
TINYTEXT     0-255字节                短文本字符串
BLOB         0-65 535字节             二进制形式的长文本数据
TEXT         0-65 535字节             长文本数据
MEDIUMBLOB   0-16 777 215字节         二进制形式的中等长度文本数据
MEDIUMTEXT   0-16 777 215字节         中等长度文本数据
LONGBLOB     0-4 294 967 295字节      二进制形式的极大文本数据
LONGTEXT     0-4 294 967 295字节      极大文本数据

#创建表的时候指定存储引擎

mysql> create table test (
    -> id int(4) not null auto_increment,
    -> name char(20) not null,
    -> primary key(id)
    -> )engine=innodb;
Query OK, 0 rows affected (0.01 sec)

2.查看建表结构及建表语句

#查看表结构命令语法:desc 表名 或者 show columns from 表名

#查看帮助:help desc

mysql> help desc;
Name: 'DESC'
Description:
Syntax:
{EXPLAIN | DESCRIBE | DESC}
    tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}
    [explain_type]
    {explainable_stmt | FOR CONNECTION connection_id}

explain_type: {
    EXTENDED
  | PARTITIONS
  | FORMAT = format_name
}

format_name: {
    TRADITIONAL
  | JSON
}

explainable_stmt: {
    SELECT statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
}

The DESCRIBE and EXPLAIN statements are synonyms. In practice, the
DESCRIBE keyword is more often used to obtain information about table
structure, whereas EXPLAIN is used to obtain a query execution plan
(that is, an explanation of how MySQL would execute a query).

URL: https://dev.mysql.com/doc/refman/5.7/en/explain.html

#例子:

mysql> use db;
Database changed

mysql> desc student; #查看表结构
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(4)      | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   |     | NULL    |                |
| age   | tinyint(2)  | NO   |     | 0       |                |
| dept  | varchar(16) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> show columns from student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(4)      | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   |     | NULL    |                |
| age   | tinyint(2)  | NO   |     | 0       |                |
| dept  | varchar(16) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

#查看建表语句

mysql> show create table student\G  #G以垂直方式显示
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `age` tinyint(2) NOT NULL DEFAULT '0',
  `dept` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

3.删除表

#语法格式:drop table <表名>

#例子:删除db库里面的student表

mysql> use db;
Database changed

mysql> show tables; #查看库中的表
+--------------+
| Tables_in_db |
+--------------+
| student      |
| test         |
+--------------+
2 rows in set (0.00 sec)

mysql> drop table student;  #删除student表
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;  #再次查看
+--------------+
| Tables_in_db |
+--------------+
| test         |
+--------------+
1 row in set (0.00 sec)

4.使用alter增删表的字段

#语法格式:alter table 表名 add 字段 类型 其他:

#查看帮助:help alter table

#例子:在test表中添加字段sex,age,qq,类型分别为char(4),int(4),varchar(15)

#1.添加性别列, 默认语句,会默认添加到最后

mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(4)   | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | NO   |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> alter table test  add sex char(4); #添加
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(4)   | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | NO   |     | NULL    |                |
| sex   | char(4)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

#2.指定位置添加:指定添加年龄列到name后面的位置

mysql> alter table  test add age int(4) after name; #提示:after是后的意思,在name字段添加age
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(4)   | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | NO   |     | NULL    |                |
| age   | int(4)   | YES  |     | NULL    |                |
| sex   | char(4)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

#3.指定添加到第一列

mysql> alter table test add qq varchar(15) first; #first:第一
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| qq    | varchar(15) | YES  |     | NULL    |                |
| id    | int(4)      | NO   | PRI | NULL    | auto_increment |
| name  | char(20)    | NO   |     | NULL    |                |
| age   | int(4)      | YES  |     | NULL    |                |
| sex   | char(4)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

#更改字段类型

#例子:将qq字段的varchar(15)改成char(20)

mysql> alter table test modify column qq char(20); #更改
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| qq    | char(20) | YES  |     | NULL    |                |
| id    | int(4)   | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | NO   |     | NULL    |                |
| age   | int(4)   | YES  |     | NULL    |                |
| sex   | char(4)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

#更改字段名称

将qq字段名改为guoke

mysql> alter table test change qq guoke char(20)  first;  #first指定字段位置
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| guoke | char(20) | YES  |     | NULL    |                |
| id    | int(4)   | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | NO   |     | NULL    |                |
| age   | int(4)   | YES  |     | NULL    |                |
| sex   | char(4)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

#删除字段

#例子:将guoke字段删除

mysql> alter table test drop column guoke;  #删除guoke字段
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(4)   | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | NO   |     | NULL    |                |
| age   | int(4)   | YES  |     | NULL    |                |
| sex   | char(4)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

5.使用rename或alter更改表名

#使用rename更改表名

#rename语法格式:rename table 原表名 to 新表名

#查看帮助:help rename

#例子:将test表改为student

mysql> show tables;  #查看原表名
+--------------+
| Tables_in_db |
+--------------+
| test         |
+--------------+
1 row in set (0.00 sec)

mysql> rename table test to student;  #更改
Query OK, 0 rows affected (0.01 sec)

mysql> show tables; #更改后再次查看
+--------------+
| Tables_in_db |
+--------------+
| student      |
+--------------+
1 row in set (0.00 sec)

#使用alter更改表名

#语法:alter table 原表名 rename to 新表名

#例子:将student表改为guoke

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

mysql> alter table student rename to guoke; #更改表名
Query OK, 0 rows affected (0.01 sec)

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL的单表多表查询

    #4.like 'fdfdsf': parttern可以是%或_。 %表示任意多字符,_表示一个字符

    老油条IT记
  • 数据库及MySQL概述

     DQL全称data query language,称为数据检索语句,作用是从表中获得数据

    老油条IT记
  • MySQL的库操作

    #前言:MySQL中的库相当于我们Windows系统中的一个文件夹,里面存放着一些文件,这些文件在数据库里面我们称之为表

    老油条IT记
  • Mysql-7-mysql函数

    1.数学函数   用来处理数值数据方面的运算,主要的数学函数有:绝对值函数,三角函数,对数函数,随机函数。使用数学函数过程中,如果有错误产生,该函数会返回nul...

    用户1173509
  • MySQL函数大全及用法示例(二)

    数学函数 abs(n) 返回n的绝对值 mysql> select abs(2);   -> 2 mysql> select abs(-...

    哲洛不闹
  • kubernetes是怎么做资源管理的?

    在Kubernetes中,Pod是最小的调度单元,所以跟资源和调度相关的属性都是Pod对象的字段,而其中最重要的就是CPU和内存。如下所示:

    极客运维圈
  • Java中判断字符是否为字母或数字

    Character.isDigit(char c) 判断字符c是否是数字字符,如‘1’,‘2’,是则返回true,否则返回false

    乐心湖
  • 经典小程序源码及其下载地址

    祈澈菇凉
  • 资源 | GitHub万星:适用于初学者的TensorFlow代码资源集

    机器之心
  • NLP入门+实战必读:一文教会你最常见的10种自然语言处理技术(附代码)

    大数据文摘

扫码关注云+社区

领取腾讯云代金券