【MySQL表的操作】

目录:

  • 前言
  • 表的操作
  • 创建表
  • 查看表结构
  • 修改表
    • 对列的增删改
    • 修改表名
  • 对表中数据的操作
    • 插入数据
    • 查找数据
    • 修改数据
    • 删除数据
  • 删除表
  • 总结

前言

剑指offer:一年又3天


表的操作

创建、查看、修改(属性和内容)与删除



创建表

语法:

sql 复制代码
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

说明:

  • field 表示列名
  • datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
sql 复制代码
mysql> create table stu(
    -> id int comment '唯一标识',
    -> name varchar(32) comment '姓名',
    -> age int comment '年龄',
    -> password varchar(32) comment '密码');
Query OK, 0 rows affected (0.04 sec)


查看表结构

语法:

sql 复制代码
mysql> desc stu;
sql 复制代码
mysql> desc stu;         --- 查看表结构:列名 数据类型 (数据类型以及后面的四个约束放在后面的文章中进行介绍)
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(32) | YES  |     | NULL    |       |
| age      | int(11)     | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> show create table stu \G        --- 查看表的创建语句
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `id` int(11) DEFAULT NULL COMMENT '唯一标识',
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `password` varchar(32) DEFAULT NULL COMMENT '密码'
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)


修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,

表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

语法:

对列的增删改

sql 复制代码
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...) [after column];  --- 添加列
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]...);     --- 修改列属性
ALTER TABLE tablename DROP (column);													--- 删除列

示例:

sql 复制代码
mysql> alter table stu add gender char(2) comment '性别' after name; --- 修改表stu:在name之后添加一列gender
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc stu;            --- 查看表结构
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(32) | YES  |     | NULL    |       |   
| gender   | char(2)     | YES  |     | NULL    |       |    --- 插入成功
| age      | int(11)     | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> show create table stu \G          --- 查看一下创建语句
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `id` int(11) DEFAULT NULL COMMENT '唯一标识',
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `gender` char(2) DEFAULT NULL COMMENT '性别',         --- 插入成功
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `password` varchar(32) DEFAULT NULL COMMENT '密码'
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

mysql> alter table stu modify gender char(8);         --- 修改:只修改gender列数据类型为 char(8)
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table stu \G
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `id` int(11) DEFAULT NULL COMMENT '唯一标识',
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `gender` char(8) DEFAULT NULL,                   --- 结果:数据类型是修改了,但是我们之前写的注释"性别"也没有了
  `age` int(11) DEFAULT NULL COMMENT '年龄',     
  `password` varchar(32) DEFAULT NULL COMMENT '密码'
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

mysql> alter table stu drop gender;       --- 删除列gender
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc stu;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| name     | varchar(32) | YES  |     | NULL    |       |   --- 已删除
| age      | int(11)     | YES  |     | NULL    |       |
| password | varchar(32) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

结论:修改是全覆盖式写入,因此当我们需要修改列的某一个属性时,需要先查看一下创建语句,复制粘贴只把想要修改的部分改掉即可。

修改表名

语法:

sql 复制代码
ALTER TABLE tablename RENAME [ TO ] new_tablename;

示例:

sql 复制代码
mysql> create table test(id int);
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;                        --- 查看所有表
+---------------+
| Tables_in_db1 |
+---------------+
| stu           |
| test          |
+---------------+
2 rows in set (0.00 sec)

mysql> alter table test rename to newTest;      --- 修改表test名字为newTest
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| newTest       |                             --- 修改完成
| stu           |
+---------------+
2 rows in set (0.00 sec)

对表中数据的操作

插入数据

语法:

sql 复制代码
INSERT INTO tablename[(field1, field2, ...)] values(...), (...);

说明:

  • 插入数据到表tablename,后面小括号中为插入数据包含表中的那些列,如果不写默认插入全部列;

示例:

sql 复制代码
mysql> insert into stu(id, name) values(001, '张三'),    --- 只插入id,name
    -> (002, '李四');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into stu(name, id) values('王五', 003);     --- 只插入id,name 一一对应
Query OK, 1 row affected (0.01 sec)

mysql> insert into stu values                 			--- 默认插入所有列
    -> (004, '赵六', 20, '123456'),
    -> (005, '孙七', 19, '654321');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from stu;
+------+--------+------+----------+
| id   | name   | age  | password |
+------+--------+------+----------+
|    1 | 张三   | NULL | NULL     |                --- 没插入的数据显示为空
|    2 | 李四   | NULL | NULL     |
|    3 | 王五   | NULL | NULL     |
|    4 | 赵六   |   20 | 123456   |
|    5 | 孙七   |   19 | 654321   |
+------+--------+------+----------+
5 rows in set (0.00 sec)

查找数据

语法:

sql 复制代码
SELECT field1, field2 FROM tablename [WHERE field3 = xxx];

说明:

  • 在tablename中查找列field1,field2 的信息;where是筛选条件。

示例:

sql 复制代码
mysql> select  name, age from stu;        --- 只显示name列与age列
+--------+------+
| name   | age  |
+--------+------+
| 张三   | NULL |
| 李四   | NULL |
| 王五   | NULL |
| 赵六   |   20 |
| 孙七   |   19 |
+--------+------+
5 rows in set (0.00 sec)

mysql> select id, name from stu where id >= 3;   --- 只显示id >= 3的学生的id和name列
+------+--------+
| id   | name   |
+------+--------+
|    3 | 王五   |
|    4 | 赵六   |
|    5 | 孙七   |
+------+--------+
3 rows in set (0.00 sec)

mysql> select * from stu;                      ---  * 代表所有列
+------+--------+------+----------+
| id   | name   | age  | password |
+------+--------+------+----------+
|    1 | 张三   | NULL | NULL     |
|    2 | 李四   | NULL | NULL     |
|    3 | 王五   | NULL | NULL     |
|    4 | 赵六   |   20 | 123456   |
|    5 | 孙七   |   19 | 654321   |
+------+--------+------+----------+
5 rows in set (0.00 sec)

修改数据

语法:

sql 复制代码
UPDATE tablename SET field1 = xxx, field2 = xxx [WHERE field3 = xxx];

说明:

  • 修改表tablename的field1 和 field2 列的内容,where的作用是筛选,如果不筛选会作用于所有行。

示例:

sql 复制代码
mysql> update stu set name = '周八', age = 30 where id = 5;   --- where是设置查找条件:只修改id = 5的行
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+------+--------+------+----------+
| id   | name   | age  | password |
+------+--------+------+----------+
|    1 | 张三   | NULL | NULL     |
|    2 | 李四   | NULL | NULL     |
|    3 | 王五   | NULL | NULL     |
|    4 | 赵六   |   20 | 123456   |
|    5 | 周八   |   30 | 654321   |                  --- 修改完成
+------+--------+------+----------+
5 rows in set (0.00 sec)

mysql> update stu set password = '111111';       --- 不设置限制(查找条件)就会作用于所有行
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0

mysql> select * from stu;
+------+--------+------+----------+
| id   | name   | age  | password |
+------+--------+------+----------+
|    1 | 张三   | NULL | 111111   |             --- 全部修改
|    2 | 李四   | NULL | 111111   | 
|    3 | 王五   | NULL | 111111   |
|    4 | 赵六   |   20 | 111111   |
|    5 | 周八   |   30 | 111111   |
+------+--------+------+----------+
5 rows in set (0.00 sec)

删除数据

语法:

sql 复制代码
DELETE FROM tabename [where ...];  -- 删除特定数据(不写where会直接清空表)

示例:

sql 复制代码
mysql> create table tb10(
    -> name varchar(20),
    -> age int
    -> );
Query OK, 0 rows affected (0.03 sec)

									-- 插入数据省略
									
mysql> select * from tb10;
+--------+------+
| name   | age  |
+--------+------+
| 张三   |   20 |
| 张三   |   20 |
| 张三   |   20 |
| 李四   |   21 |
| 李四   |   21 |
| 李四   |   21 |
| 王五   |   30 |
| 王五   |   30 |
| 王五   |   30 |
+--------+------+
9 rows in set (0.00 sec)

mysql> delete from tb10 where name='李四';   -- 删除名字为李四的记录
Query OK, 3 rows affected (0.00 sec)

mysql> select * from tb10;
+--------+------+
| name   | age  |
+--------+------+
| 张三   |   20 |
| 张三   |   20 |
| 张三   |   20 |
| 王五   |   30 |
| 王五   |   30 |
| 王五   |   30 |
+--------+------+
6 rows in set (0.00 sec)

mysql> delete from tb10;                -- 删除所有记录
Query OK, 6 rows affected (0.01 sec)

mysql> select * from tb10; 
Empty set (0.00 sec)                    -- tb10为空


删除表

语法:

sql 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

示例:

sql 复制代码
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| newTest       |
| stu           |
+---------------+
2 rows in set (0.00 sec)

mysql> drop table newTest;              --- 删除newTest
Query OK, 0 rows affected (0.02 sec)

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


总结



相关推荐
数新网络1 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
CoderIsArt1 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧3 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis4 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林4 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享5 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil275 小时前
Redis - String 字符串
数据库·redis·缓存
NiNg_1_2345 小时前
高级 SQL 技巧详解
sql
Hsu_kk6 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql