MySQL之表基本操作及重要概念

2024-03-21 15:36

本文主要是介绍MySQL之表基本操作及重要概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 前言

表就相当于文件夹中的excel文件,表中的每一条记录就是excel中的一条记录,字段就是表格的表头,记录就是表格中的每一行数据本文将详细介绍表相关操作、mysql存储引擎、字段数据类型及约束条件等知识。

存储引擎

计算机中存储的文件格式有很多种,针对不同的文件格式会有对应不同的存储方式和处理机制,比如存储pdf格式的文件和txt格式的文件存储机制就是不同的。

对应到MySQL中存储引擎就是不同的存储机制,在创建表时候可以指定存储引擎,可以通过下述SQL语句查看所有的存储引擎:

show engines;

这里只介绍MySQL最常用的四种存储引擎:

Innodb : 是MySQL5.5版本及之后默认的存储引擎 存储数据更加的安全

myisam :是MySQL5.5版本之前默认的存储引擎 速度比Inodb更快,但是我们更加注重的是数据的安全

memory :内存引擎,数据全部存放在内存中,断电数据丢失

blackhole 无论存什么,都立刻消失(黑洞)

创建表

创建表的基本语法如下:

use database;  # 切换到需要创建表的库下
create table 表名(字段1 字段1数据类型(宽度) 约束条件, 字段2 字段2数据类型(宽度) 约束条件...)
复制代码

在同一张表中字段名不能重复,创建表时字段和字段类型是必须的,宽度一般情况下指的是对数据长度的限制,约束条件是在宽度的基础上为字段增加额外的约束,宽度和约束条件是可选的。

下述的SQL语句创建表的过程中,有些操作目前没有介绍,屏幕面前的小伙伴先看着,后续文章都会做详细介绍的。

-- 创建数据库
mysql> create database ex; 
Query OK, 1 row affected (0.00 sec)-- 切换数据库
mysql> use ex;
Database changed-- 在数据库内创建表,表名为info,字段分别是id name age sex phone
mysql> create table info(id int, name varchar(20), age int(3), sex enum('male','female'), phone bigint(11));
Query OK, 0 rows affected (0.01 sec)-- 查看数据库中所有的表
mysql> show tables;
+--------------+
| Tables_in_ex |
+--------------+
| info         |
+--------------+
1 row in set (0.00 sec)-- 查看info这张表的信息
mysql> desc info;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(20)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
5 rows in set (0.09 sec)-- 查询info这张表的所有数据
mysql> select * from info;
Empty set (0.00 sec)

表中插入数据

上述查看表中所有数据的操作中,得到的结果empty,这是因为我们虽然创建了表但是表中并没有数据的原因,因此我们需要向表中插入数据,可以一次性插入多条记录,向表中插入数据有两种方式:

第一种,按照字段和值的对应关系插入:

-- 基本语法
insert into 表名 (字段1,字段2...) values (字段1的值, 字段2的值...), (字段1的值, 字段2的值...);-- 具体操作
mysql> insert into info(id, name, sex, phone) values(1, 'python', 'male', 110), (2, 'java', 'female', 119);  -- 插入两条数据
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0-- 查看表中所有数据,由于age没有插入对应数据,因此为null
mysql> select * from info;  
+------+--------+------+--------+-------+
| id   | name   | age  | sex    | phone |
+------+--------+------+--------+-------+
|    1 | python | NULL | male   |   110 |
|    2 | java   | NULL | female |   119 |
+------+--------+------+--------+-------+
2 rows in set (0.00 sec)

第二种,不指定字段值插入数据,必须按照创建表时的顺序增加数据,同样可以一次插入多条数据;

-- 语法
insert into 表名 values(字段1的值, 字段2的值...);-- 具体操作
-- 如果没有按照创建表时字段的顺序和数量就会出现数据错乱和报错
mysql> insert into info values (3, 'php', 'male', 114);
ERROR 1136 (21S01): Column count does not match value count at row 1-- 下述SQL语句就是正确的操作
mysql> insert into info values (3, 'php',10, 'male', 114),(4,'go',5,'male', 120);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from info;
+------+--------+------+--------+-------+
| id   | name   | age  | sex    | phone |
+------+--------+------+--------+-------+
|    1 | python | NULL | male   |   110 |
|    2 | java   | NULL | female |   119 |
|    3 | php    |   10 | male   |   114 |  
|    4 | go     |    5 | male   |   120 |
+------+--------+------+--------+-------+
4 rows in set (0.00 sec)

查看表结构

查看表结构有两种方式,分别是descshow create table。上述SQL语句中我们使用的就是desc 表名查看表结构,但是输出的信息还不够全面,为了得到更全面的表定义信息,有时候就需要查看创建表的SQL语句,使用show create table语法。除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。

-- desc查看表结构,也可以使用describe,desc是descride的简写,效果相同
mysql> desc info;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(20)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
5 rows in set (0.94 sec)mysql> describe info;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(20)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
5 rows in set (0.08 sec)

下面在使用show create table的方式查看一下表结构:

-- \G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。
mysql> show create table info \G;  
*************************** 1. row ***************************Table: info
Create Table: CREATE TABLE `info` (`id` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,`age` int(3) DEFAULT NULL,`sex` enum('male','female') DEFAULT NULL,`phone` bigint(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)ERROR:
No query specified

数据类型

MySQL支持所有标准的SQL数值数据类型,大概可以分为以下几类,这些类型是创建表时指定的字段的数据类型。

整数类型

MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT;对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在MySQL中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

下表中显示了每种数字类型的存储和范围以及大致用途:

类型大小范围(有符号)范围(无符号)unsigned约束用途
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值

TINYINT:

默认情况下带正负号,如果存储的数值超过该类型可接受的范围默认存储最大可接受数值

mysql> create table t(id int, num tinyint);
Query OK, 0 rows affected (0.01 sec)mysql> insert into t values(1, -129), (2, -100), (3, 100), (4, 128);
Query OK, 4 rows affected, 2 warnings (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 2-- 数据超过该数据类型范围时就只能存储支持的最大接收数值
mysql> select * from t;
+------+------+
| id   | num  |
+------+------+
|    1 |  128 |
|    2 |  100 |
|    3 |  100 |
|    4 |  127 |
+------+------+
4 rows in set (0.00 sec)

如果不想存入负数的话可以使用 unsigned 约束条件,只能存储正数;

mysql> create table t1(id int, num tinyint unsigned);
Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values(1, -129), (2, -100),(3,100),(4, 128);
Query OK, 4 rows affected, 2 warnings (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 2mysql> desc t1;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id    | int(11)             | YES  |     | NULL    |       |
| num   | tinyint(3) unsigned | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)mysql> select * from t1;
+------+------+
| id   | num  |
+------+------+
|    1 |    0 |
|    2 |    0 |
|    3 |  100 |
|    4 |  128 |
+------+------+
4 rows in set (0.00 sec)

INT

默认也是带有正负号,可以通过unsigned约束条件限制只存储正数:

mysql> create table t2(id int(8));
Query OK, 0 rows affected (0.01 sec)

在介绍创建表的语法时介绍在数据类型后的小括号中的数字表示宽度,针对其他类型来讲宽度就是字符的长度,但是对整形来讲宽度指的是字节数,比如上述创建表时定义int(8)如果数字没有超出8位,默认用空格填充至8位,如果数字超出了8位,那么有几位就存几位(但是还是要遵循最大范围)

mysql> create table t2(id int(8));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t2 values(123), (123456789);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t2;
+-----------+
| id        |
+-----------+
|       123 |
| 123456789 |
+-----------+
2 rows in set (0.00 sec)

使用空格填充的方式不是很方便看出是否被填充,我们可以使用zerofill约束条件,用0进行填充:

mysql> create table t3(id int(8) zerofill);
Query OK, 0 rows affected (0.01 sec)mysql> insert into t3 values(1),(123456789);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t3;
+-----------+
| id        |
+-----------+
|  00000001 |
| 123456789 |
+-----------+
2 rows in set (0.00 sec)

总结来说,针对整形字段括号内无需指定宽度,因为默认的宽度以及足够显示所有的数据了。

小数类型

对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在MySQL中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

# 存储限制
float(255,30)# 总共255位,小数部分占30位
duble(255,30)# 总共255位,小数部分占30位
decimal(65,30)# 总共65位,小数部分占30位# 精确度验证
create table t(id float(255,30));
create table t(id double(255,30));
create table t(id decimal(65,30));insert into t values(1.1111111111111111);# 精确度比较,结合实际应用场景,看情况
float<double<decimal

字符类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT。这里介绍CHAR和VARCHAR两种,这两种类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

类型大小用途
CHAR0-255字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65 535字节二进制形式的长文本数据
TEXT0-65 535字节长文本数据
MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215字节中等长度文本数据
LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295字节极大文本数据

CHAR列的长度固定为创建表是声明的长度,范围(0-255),而VARCHAR的值是可变长字符串范围(0-65535)。

mysql> create table t4 (v varchar(4),c char(4));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t4 values ('ab  ','ab  ');
Query OK, 1 row affected (0.00 sec)# 在检索的时候char数据类型会去掉空格
mysql> select * from t4;
+------+------+
| v    | c    |
+------+------+
| ab   | ab   |
+------+------+
row in set (0.00 sec)# 对查询结果计算长度
mysql> select length(v),length(c) from t4;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
|         4 |         2 |
+-----------+-----------+
row in set (0.00 sec)# 当存储的长度超出定义的长度,会截断
mysql> insert into t4 values ('abcd  ','abcd  ');
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> select * from t4;
+------+------+
| v    | c    |
+------+------+
| ab   | ab   |
| abcd | abcd |
+------+------+
rows in set (0.00 sec)

日期类型

表示时间值的日期和时间类型为DATETIME、DATE、TIME和YEAR。每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。

date/time/datetime

mysql> create table t4 (d date,t time,dt datetime);
Query OK, 0 rows affected (0.02 sec)mysql> desc t4;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| d     | date     | YES  |     | NULL    |       |
| t     | time     | YES  |     | NULL    |       |
| dt    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
rows in set (0.01 sec)mysql> insert into t4 values (now(),now(),now());  -- now()表示现在的时间
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> select * from t4;
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2021-06-15 | 14:31:21 | 2021-06-15 14:31:21 |
+------------+----------+---------------------+
row in set (0.00 sec)

枚举与集合类型

ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示。ENUM只允许从值集合中选取单个值,而不能一次取多个值也不能插入枚举中没有的值。简而言之就是多选一

SET和ENUM非常相似,set类型可以允许值集合中任意选择1或多个元素进行组合。对不属于集合的内容将不允许插入数据,而对重复的值将进行自动去重。是多选多

枚举和集合在创建表的时候都可以使用default指定默认值,当然也可以不指定。

-- 枚举字段:后期在存数据的时候只能从枚举里面选择一个存储
create table user(id int,name char(16),gender enum('male','female','other') default 'other');
insert into user values(1,'jason','male');
insert into user valuses(2,'egon','xxxooo') # 报错-- 集合:可以只选一个,也可以选多个,但是不能写没有列举的
create table teacher(id int,name char(16),gender enum('male','female','others'),hobby set('read','hecha')
)
insert into teacher values(1,'python','male','read,hecha');
insert into teacher values(2,'java','others','生蚝'); # 报错

约束条件

约束条件是创建表时可选的,在上文中介绍了两个约束条件,分别是unsignedzerofill,一个是用来约束数字类型不存负数另一个是使用0进行填充,接下来就来介绍一下其他约束条件。

unique唯一

指定某列或者某几列的组合数据不能重复,即单列唯一和多列联合唯一:

-- 单列唯一,id列插入重复的数据就会报错
mysql> create table t(id int unique, name varchar(4));
Query OK, 0 rows affected (0.10 sec)mysql> insert into t values(1, 'python'),(2, 'java');
Query OK, 2 rows affected, 1 warning (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 1mysql> insert into t values(1, 'python'),(2, 'java');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'-- 联合唯一,比如ip和port单个都可以重复,但是加起来必须是唯一的
mysql> create table t(id int unique, ip varchar(12), port varchar(4), unique(ip, port));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t values(1,'127.0.0.1',8080);
Query OK, 1 row affected (0.00 sec)mysql> insert into t values(2,'127.0.0.1',8081);
Query OK, 1 row affected (0.00 sec)mysql> insert into t values(3,'127.0.0.2',8080);
Query OK, 1 row affected (0.00 sec)mysql> insert into t values(4,'127.0.0.1',8080);
ERROR 1062 (23000): Duplicate entry '127.0.0.1-8080' for key 'ip'

not null非空

该约束条件的意思就是在向表中插入数据的时候,有约定条件not null的列值不能为空,否则会报错。

mysql> create table t1(id int not null, name varchar(4));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 (id, name) values (1, 'python');
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> insert into t1 (id, name) values (1, null);
Query OK, 1 row affected (0.00 sec)mysql> insert into t1 (id, name) values (null, null);
ERROR 1048 (23000): Column 'id' cannot be null

primary key主键

该约束条件非常重要,但从约束条件的角度来看primary key的效果等价于not null + unique,即非空且唯一,主键除了有上述约束效果之外,还是innodb引擎组织存储数据的依据,innodb存储引擎在创建表的时候必须要有primary key,它类似与于的目录,能够帮助提示查询效率并且也是建表的依据。

一张表必须设置主键,并且一张表中有且只有一个主键,如果你没有设置主键,那么会从上往下搜索直到遇到一个非空且唯一的字段将它自动升级为主键。

mysql> create table t2(id int not null unique, name varchar(4));
Query OK, 0 rows affected (0.01 sec)mysql> desc t2;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | NO   | PRI | NULL    |       |
| name  | varchar(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

如果表内没有主键也没有其他任何的非空且唯一的字段,那么innodb会采用自己内部提供的一个隐藏字段作为主键,隐藏意味无法使用,就无法提升查询速度。

一张表中通常都应该有一个主键字段,并且通常将id/uid/sid字段作为主键。

-- 单一主键
mysql> create table t3(id int primary key);
Query OK, 0 rows affected (0.01 sec)mysql> desc t3;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)-- 联合主键
mysql> create table t4(ip varchar(16), port varchar(6), primary key(ip, port));
Query OK, 0 rows affected (0.07 sec)mysql> desc t4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ip    | varchar(16) | NO   | PRI |         |       |
| port  | varchar(6)  | NO   | PRI |         |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

auto_increment自增

通常设置主键是将与表中的数据没有关联的数据作为主键,一般选择数字,就像排队时的号码牌,因此主键最好选择整数类型并且能够自增,而auto_increment约束条件就是加在主键字段上的,并且在插入数据的时候主键的值无需手动插入了。

-- 创建表的完整语法
mysql> create table t5(id int primary key auto_increment, name varchar(4), age int(3), phone varchar(11));
Query OK, 0 rows affected (0.01 sec)mysql> insert into t5 (name, age, phone) values ('python', 5, '119'),('java', 10, '120');
Query OK, 2 rows affected, 1 warning (0.15 sec)
Records: 2  Duplicates: 0  Warnings: 1mysql> select * from t5;
+----+------+------+-------+
| id | name | age  | phone |
+----+------+------+-------+
|  1 | pyth |    5 | 119   |
|  2 | java |   10 | 120   |
+----+------+------+-------+
2 rows in set (0.00 sec)mysql> desc t5;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(4)  | YES  |     | NULL    |                |
| age   | int(3)      | YES  |     | NULL    |                |
| phone | varchar(11) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

修改表结构

-- 修改表名:alter table 表名 rename 新表名;
mysql> create table t1(id int unique);
Query OK, 0 rows affected (0.01 sec)mysql> alter table t1 rename t;
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+--------------+
| Tables_in_ex |
+--------------+
| t            |
+--------------+
1 row in set (0.00 sec)-- 表增加字段: alter table 表名 add 字段名 数据类型(宽度) 约束条件;
mysql> alter table t add name varchar(4) not null;
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  | UNI | NULL    |       |
| name  | varchar(4) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (1.05 sec)-- 表删除字段,字段删除后数据也会删除: alter table 表名 drop 字段名;
mysql> alter table t drop name;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  | UNI | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)-- 表修改字段名:alter table 表名 change 旧字段名 新字段名 数据类型(宽度) 约束条件;
mysql> alter table t change id uid int unique;
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 1mysql> desc t;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| uid   | int(11) | NO   | PRI | 0       |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)-- 修改字段数据类型、约束条件等:alter table 表名 modify 字段名 数据类型(宽度) 约束条件;
mysql> alter table t modify id int primary key auto_increment;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.01 sec)-- 修改字段排列顺序
ALTER TABLE 表名 CHANGE 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…]  FIRST;
ALTER TABLE 表名 MODIFY 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;-- 增加字段时指定字段位置
ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;-- 操作主键,如果发现主键建错了,可以先删除主键再增加主键,需要注意在增加主键前必须把重复主键值删除
alter table t drop primary key;
alter table t add primary key(id);

删除表

删除操作一定要谨慎,时刻谨记删库跑路的教训哦~

-- 切换到数据库下
use study;-- 删除表
drop table 表名;-- 删除表中的数据
delete from 表名;  -- 删除表中的所有数据,但是主键的自增不会停止
truncate 表名;  -- 清空表数据并重置主键

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

这篇关于MySQL之表基本操作及重要概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M