表的操作(MySQL)

1.创建表

语法:

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

说明:

  • field 表示列名
  • datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

2.创建表案例

sql 复制代码
create  table users (
   id int,
   name varchar(20) comment '用户名',
   password char(32) comment '密码是32位的md5值',
   birthday date comment '生日'

) character set utf8 engine MyISAM;

说明:

  • 不同的存储引擎,创建表的文件不一样。

users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:

  • users.frm:表结构
  • users.MYD:表数据
  • users.MYI:表索引

备注:创建一个engine是innodb的数据库,观察存储目录

3.查看表结构

sql 复制代码
desc 表名;

示例:

4.修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

sql 复制代码
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column 
datatype]...);

ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column 
datatype]...);

ALTER TABLE tablename DROP (column);

案例:

  • 在users表添加二条记录
sql 复制代码
mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-
04');
  • 在users表添加一个字段,用于保存图片路径
sql 复制代码
mysql> alter table users add assets varchar(100) comment '图片路径' after 
birthday;
sql 复制代码
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)     | YES |     | NULL   |       |
| name     | varchar(20) | YES |     | NULL   |       |
| password | char(32)     | YES |     | NULL   |       |
| birthday | date         | YES |     | NULL   |       |
| assets   | varchar(100) | YES |     | NULL   |       |
+----------+--------------+------+-----+---------+-------+

插入新字段后,对原来表中的数据没有影响:

sql 复制代码
mysql> select * from users;
+------+------+----------+------------+-------+
| id   | name | password | birthday   | assets |
+------+------+----------+------------+-------+
|   1 | a   | b       | 1982-01-04 | NULL |<= 原来的数据仍然存在
|   2 | b   | c       | 1984-01-04 | NULL |
+------+------+----------+------------+-------+

插入新字段后,对原来表中的数据没有影响:

sql 复制代码
mysql> select * from users;
+------+------+----------+------------+-------+
| id   | name | password | birthday   | assets |
+------+------+----------+------------+-------+
|   1 | a   | b       | 1982-01-04 | NULL |<= 原来的数据仍然存在
|   2 | b   | c       | 1984-01-04 | NULL |
+------+------+----------+------------+-------+
  • 修改name,将其长度改成60
sql 复制代码
mysql> alter table users modify name varchar(60);
sql 复制代码
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)     | YES |     | NULL   |       |
| name     | varchar(60) | YES |     | NULL   |       |<= 长度变成60
| password | char(32)     | YES |     | NULL   |       |
| birthday | date         | YES |     | NULL   |       |
| assets   | varchar(100) | YES |     | NULL   |       |
+----------+--------------+------+-----+---------+-------+
  • 删除password列

注意:删除字段一定要小心,删除字段及其对应的列数据都没了

sql 复制代码
mysql> alter table users drop password;
mysql> desc users;
+----------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)     | YES |     | NULL   |       |
| name     | varchar(60) | YES |     | NULL   |       |
| birthday | date         | YES |     | NULL   |       |
| assets   | varchar(100) | YES |     | NULL   |       |
+----------+--------------+------+-----+---------+-------+ 
  • 修改表名为employee
sql 复制代码
mysql> alter table users rename to employee;
sql 复制代码
mysql> select * from employee;
+------+------+------------+-------+
| id   | name | birthday   | assets |
+------+------+------------+-------+
|    1 | a   | 1982-01-04 | NULL |
|    2 | b   | 1984-01-04 | NULL |
+------+------+------------+-------+

to:可以省掉

  • 将name列修改为xingming
sql 复制代码
mysql> alter table employee change name xingming varchar(60); --新字段需要完整
定义
sql 复制代码
mysql> desc employee;
+----------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)     | YES |     | NULL   |       |
| xingming | varchar(60) | YES |     | NULL   |       |
| birthday | date         | YES |     | NULL   |       |
| assets   | varchar(100) | YES |     | NULL   |       |
+----------+--------------+------+-----+---------+-------+

5 删除表

语法格式:

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

示例:

sql 复制代码
drop table t1;
相关推荐
广州智造2 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥5 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸7 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1237 小时前
Redis解析
数据库·redis·缓存
数据库幼崽7 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd8 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou8 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh9 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵10 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多10 小时前
Linux——mysql主从复制与读写分离
数据库·mysql