MySQL基础教程---Chapter 6 修改表

以下为个人作为初学者的自己看书总结,访客看到有不足或差错之处,欢迎交流指正。
day3 2020/10/17

6.1 修改表的列结构

重点使用 ALTER TABLE + MODIFY、ADD、CHANGE、DROP 语句。

6.1.1 修改列的数据类型
ALTER TABLE 表名 MODIFY 列名 数据类型;
如:ALTER TABLE tb1C MODIFY name VARCHAR(100);
6.1.2 添加列
ALTER TABLE 表名 ADD 列名 数据类型;
如:ALTER TABLE tb1C ADD birth DATATIME;
6.1.3 修改列的位置
ALTER TABLE 表名 ADD 列名 数据类型 FIRST;    新建的列添加到最前面
ALTER TABLE 表名 ADD 列名 数据类型 AFTER 列名1;    添加到指定位置; 新建的列添加到列名1的后面

对于已经存在的列,修改其中某列的顺序:
ALTER TABLE 表名 MODIFY 列名 数据类型 FIRST;
ALTER TABLE 表名 MODIFY 列名 数据类型 AFTER 列名1;
6.1.4 修改列名和数据类型
ALTER TABLE 表名 CHANGE 修改前的列名 修改后的列名 修改后的数据类型;
如:ALTER TABLE tb1C CHANGE birth birthday DATA;
6.1.5 删除列
ALTER TABLE 表名 DROP 列名;
如:ALTER TABLE tb1C DROP birthday;

注意:
如:当指定数据类型为VARCHAR(5), 表示该列数据字符长度最大为 5, 如果你输入的是 '1234567',则只保留了 '12345' 后面的数据被删除丢失了。
6.1.6 设置列的默认值
1. 创建时设置默认值
CREATE TABLE 表名 (列名 数据类型 DEFAULT 默认值...);

2. 已经创建好了,修改时设置默认值
ALTER TABLE 表名 MODIFY 列名 数据类型 DEFAULT 默认值;
如:ALTER TABLE tb1C MODIFY name VARCHAR(10) DEFAULT '未输入姓名';
6.2 主键相关操作

主键 (PRIMARY KEY) : 是列的一种特殊属性,能过对某一列和其他列进行区分。

  • 没有重复值
  • 不允许插入空值 (NULL)

唯一键 (UNIQUE):不允许重复 这一个限制属性(可以为NULL)。

6.2.1 设置主键
CREATE TABLE 表名 (列名 数据类型 PRIMARY KEY...);
如:CREATE TABLE t_pk (a INT PRIMARY KEY, b VARCHAR(10));
6.2.2 设置唯一键
CREATE TABLE 表名 (列名 数据类型 UNIQUE...);
如:CREATE TABLE t_pk (a INT UNIQUE, b VARCHAR(10));
6.3 自动连续编号功能

使用自动连续编号,在定义列的时候需要进行以下三个设置:

  1. 列的数据类型为 INT、TINYINT 等类型;
  2. 给数据类型加关键字 AUTO_INCREMENT;
  3. 设置主键 (PRIMARY KEY) ,使列具有唯一性。

设置为 AUTO_INCREMENT 的列显然是不允许重复的(唯一的状态),这样的列非常适合作为主键使用。

6.3.1 使列具有自动编号功能
CREATE TABLE 表名 (列名 数据类型 AUTO_INCREMENT PRIMARY KEY...); 
如:CREATE TABLE tb1C (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(10));
6.3.2 使用自动编号插入记录
1. 因为列 a 中会自动编号,故只需要在其他的列中插入数据即可
INSERT INTO 表名 (非自动编号的列名) VALUES (数据); 
如:INSERT INTO t_series (b) VALUES ('子'), ('丑'), ('寅');

2. 拥有自动编号的列编号可以设置任意值
如:INSERT INTO t_series VALUES (100, '卯');   下一个记录的自动编号会从101接着开始
6.3.3 设置连续编号初始值
1. 如果把表中的记录都删了,重新插入一条记录,编号会 接着既有的最大值+1往后继续输入,而不会从头开始,除非用 2 的方式进行设置初始值

2. 删掉所有记录,让编号从 1 开始连续输入
ALTER TABLE 表名 AUTO_INCREMENT=1;
6.4 索引的创建、显示、删除
1. 创建索引
CREATE INDEX 索引名 ON 表名 (列名);
如:CREATE INDEX my_idx ON tb1C (empid);

2. 显示索引
SHOW INDEX FROM 表名;
如:SHOW INDEX FROM tb1C \G    纵向显示表tb1C中的empid列值的索引
纵向显示列值: 用 \G 来替换最后的 ;

3. 删除索引
DROP INDEX 索引名 ON 表名;
如:DROP INDEX my_idx ON tb1C;
6.5 数据库的实体是什么
当你在 MySQL 监听器中创建了一个新的数据库,那么 C:\MAMP\db\mysql 的文件夹内会自动创建一个和数据库同名的文件夹,相应的所创建的表等实体就保存在里面。

在 C:\MAMP\db\mysql 中手动建立一个文件夹如 manual,在 MySQL 监听器中用 SHOW DATABASES;查看也会存在这个数据库。
6.6 课后练习题
创建表 t_initial_serial, 列 id 要求 INT 类型, AUTO_INCREMENT, PRIMARY KEY, 初始值为100; 列 c_time DATATIME 类型;
并使用 NOW() 插入当前时间

CREATE TABLE t_initial_serial (id INT AUTO_INCREMENT PRIMARY KEY, c_time DATATIME) AUTO_INCREMENT=100; 
注意:上面语句设置自动编号从100开始,AUTO_INCREMENT=100 必须在语句最后面。括号中声明 AUTO_INCREMENT 的后面不能直接赋值,语法报错。
INSERT INTO t_initial_serial (c_time) VALUES (NOW());

在这里插入图片描述

接下来一系列会每天记录《MySQL基础教程》的学习总结。挑战半个月看书,动手,写博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值