✨个人主页:****北 海
🎉所属专栏:****MySQL 学习
🎃操作环境:****CentOS 7.6 阿里云远程服务器
🎁软件版本:****MySQL 5.7.44
文章目录
1.创建表
首先创建一个 **数据库
testForTable
**
mysql>createdatabaseifnotexists testForTable;
当前创建的 **数据库
testForTable
** 字符集和校验集分别为
utf8
和
utf8_general_ci
,这是由配置文件中的默认编码集决定的
接下来创建一张表,具体语法为
CREATETABLE[ifnotexists] tablename
(
field1 datatype,
field2 datatype,
field3 datatype
)[characterset 字符集][collate 校验规则][engine 存储引擎];
其中 字符集、校验规则、存储引擎 可以不用指定,默认使用当前数据库的默认属性
创建一张
person
表,包含 姓名、性别、年龄 三个字段
注意:创建表之前需要先使用数据库
mysql>createtableifnotexists person
(
name varchar(16)comment'姓名',
sex char(2)comment'性别,只能为男/女',
age intunsignedcomment'年龄,不能为负数');
这样就得到了一张
person
表,当前表的字符集为
utf8
,校验集为
utf8_general_ci
,存储引擎为
InnoDB
,这些都是数据库的 默认属性,只要我们在创建表时不指定属性,表就会继承数据库的默认属性
通过
InnoDB
引擎创建的表会生成 两个文件
注意:
comment '内容'
表示注释,通常用来注明该字段的含义及用途- 在
MySQL
中定义无符号类型的数据,需要把unsigned
放在类型之后修饰
1.1.创建时指定属性
除了使用数据库的 默认属性,还可以在创建时指定属性,比如再创建一张
goods
表,表示商品信息,包含字段有 商品名、价格、数量、厂商,并且在创建表时,指定字符集为
gbk
,校验集为
gdk_chinese_ci
,存储引用选择
MyISAM
mysql>createtableifnotexists goods
(
name varchar(32)comment'商品名称',
price double(10,2)unsignedcomment'商品价格,最多支持小数点前 5 位数,小数点后 2 位数',
num intunsignedcomment'商品数量',
factory varchar(64)comment'厂商名称')characterset'gbk'collate'gbk_chinese_ci'engine'MyISAM';
通过
MyISAM
引擎创建的表会生成 三个文件
2.查看表
身处某个数据库中,可以通过
show tables
查看当前数据库中有哪些表
mysql>showtables;
当前数据库中就只有之前创建的两张表
2.1.查看表结构
知道有哪些表后,还需要进一步了解表的 结构 信息,比如有哪些字段,才能知道如何使用这张表,查看表的详细信息语法为
DESC tablename
分别查看刚才创建的两张表的 结构 信息
mysql>desc person;
mysql>desc goods;
可以看到查询结果为一张行列构建的表,第一行表示各种属性信息,属性支持修改
Field
表示 列名Type
表示 类型Null
表示 是否可为空Key
表示 是否存在 主键/外键/唯一键 约束Default
表示 是否有默认值Extra
表示 额外信息
2.2.查看建表信息
如果想查看关于表更详细的信息,可以通过指令查看建表时的语句内容,语法为
SHOWCREATETABLE tablename
SHOWCREATETABLE tablename \G
加了
\G
之后表示格式化输出内容,便于查看,通过指令回顾刚才创建的 两张 表的语句内容
mysql>showcreatetable person\G
mysql>showcreatetable goods\G
其实之前使用
desc
指令查询到的结果,就是从这里截取的,更详细的信息包括:列的注释、字符集、存储引擎,这也证明了当我们不指定这些属性时,自动使用数据库的默认属性
MySQL
会记录下用户的所有操作痕迹,这也是备份后,恢复数据库的关键,把所有指令再执行一遍,就能得到一模一样的数据库了
3.修改表
3.1.修改列属性
首先是新增字段,语法为
ALTERTABLE tablename ADD(column datatype [DEFAULT expr][,column datatype]...);
column
表示 列名,
datatype
表示 类型,
[DEFAULT expr]
表示该列的各种 属性,比如约束、默认值、是否为空等,支持同时新增多个字段
给
person
表新增 出生日期、爱好 两个字段
注意:**如果新增多个字段时,需要使用
( )
将新增的一批字段括起来**
mysql>altertable person add(birthday datecomment'生日', hobby varchar(32)comment'爱好');
新增的字段默认是紧跟最后一个字段的
如果想新增至指定字段之后,可以在语句后面加上
after column
,比如在 **性别
sex
** 之后新增一个 籍贯 字段
注意:**只支持新增单个字段时,指定位置,也就是说
( )
与
after column
是冲突的,不能同时使用**
mysql>altertable person add hometown varchar(16)comment'籍贯'after sex;
hometown
字段被成功新增到了
sex
字段之后
除了可以新增字段,还可以修改字段,语法为
ALTERTABLE tablename MODIFYcolumn datatype [DEFAULT expr],[MODIFY...];
注意:
- 需要确保修改的字段存在,并且要保证修改后的字段类型与表中已经存在的数据类型相匹配
- 修改多个字段时,可以叠加多条
MODIFY column datatype [DEFAULT expr]
语句,通过,
分隔 - 修改字段后,原字段的所有信息都会被覆盖,包括注释
修改
name
的类型为
varchar(32)
,修改
age
的类型为
int
,因为此时是空表,所以可以随便修改
mysql>altertable person modify name varchar(32),modify age int;
可以看到,之前的注释没了,并且字段的类型也修改了
最后就是删除字段,语法为
ALTERTABLE tablename DROP(column),[DROP...];
注意:删除字段时,同样需要确保字段存在,字段被删除后,表中对应的数据也会被删除
先随便新增几个无用字段,再删除
mysql>altertable person add(a int, b int, c double);
mysql>altertable person drop a,drop b,drop c;
刚刚新增的无用字段立马就被删除了
在
MySQL
中,删除 一直都是一个 高危 操作,毕竟数据丢了不容易找回,比如这里的删除字段,如果表中有数据,那么表中数据关于该字段的信息会被全部删除,所以删除字段要 慎用
3.2.修改列名
列名是支持修改的,语法为
ALTERTABLE tablename CHANGE oldcolumn newcolumn datatype [DEFAULT expr];
注意:修改需要确保字段存在,修改后,上层应用会受影响
比如把
goods
表中的
num
改为
nums
mysql>altertable goods change num nums intunsigned;
可以看到修改之后,注释也没了,这个操作也要 慎用,因为上层查询时,可能会查询失败,需要上层配合更新信息
3.3.修改表名
表名支持修改,语法为
ALTERTABLE oldname RENAME[TO] newname;
其中
TO
可以省略,修改成功后,
Linux
中对应的文件名也会被修改
注意:如同修改字段名一样,修改表名也是一个危险操作,同样会影响上层使用
修改
person
表名为
students
mysql>altertable person renameto students;
可以看到,表对应的文件名,也被修改了
4.删除表
删除表的语法为
DROPTABLE tablename;
注意:删除表很危险,删除之后,表中所有的数据就都没了,不要轻易删除!
删除
goods
表
mysql>droptable goods;
当然,删除成功后,
Linux
中对应的文件也被删除了
写在最后:「修改字段、删除字段、修改字段名、修改表名、删除表」这些都是敏感操作,会对数据库中的数据造成影响,如果是新建的数据库,可以随便操作,但如果是运行了一段时间的数据库,在进行这些操作前,最好先备份数据库,万一发生错误,还有后悔的余地
版权归原作者 北 海 所有, 如有侵权,请联系我们删除。