MySQL数据表的操作
创建数据表
表是数据库对象, 创建数据表的语法格式为:
create [temporary] table [if not exists] 表名(
字段名1 数据类型 [约束类型],
字段名2 数据类型 [约束类型],
…
);
-
查看表的信息
desc 表名;
-
重命名表
rename table 原数据表名 to 新数据表名;
可以对多个数据表进行重命名, 表之间以逗号","进行分隔 -
删除表
drop table 表名;
drop table 表名1, 表名2, …;
drop table if exists 表名;
选择合适的数据类型
选择合适的数据类型, 节省存储空间, 有效提升数据的计算性能.
- 符合取值范围和精度的前提下, 尽量使用"短"数据类型
- 数据类型越简单越好.
- 使用内置的日期和时间数据类型.
- 字段值完全由数字组成, 不执行加减乘除运算的, 选择字符串类型.
- 尽量采用精确小数类型(例如decimal), 而不是浮点数类型, 计算更精确且更节省空间.
- 尽量避免null字段, 建议指定not null约束.
在创建表时, 使用字符串应遵循以下原则:
- 从速度方面考虑, 选择固定的列, 可以使用char类型.
- 要节省空间, 使用动态的列, 可以使用varchar类型.
- 要将列中的内容限制在一种选择, 可以使用enum类型.
- 允许在一个列中有多于一个的条目, 可以使用set类型.
- 如果要搜索的内容不区分大小写, 可以使用text类型.
修改表的结构
使用alter table语句修改表的结构, 表结构的修改有增加字段, 删除字段, 修改数据类型, 字段名重命名等内容.
-
增加字段
alter table 表名 add 新字段名 新数据类型 [first|after 旧字段名];
默认时加在表最右边
表名, 指出修改的表名
新字段名, 要添加的字段名称
新数据类型, 和创建表时选择数据类型原则一致
first, 将新字段添加到表的最左边
after, 将旧字段添加到表中原有某个字段的右边 -
删除字段
alter table 表名 drop 字段名;
-
修改字段的数据类型
alter table 表名 modify 字段名 新数据类型;
-
修改字段名
alter table 表名 change 旧字段名 新字段名 数据类型;
设置约束
数据完整性(data integrity)是指数据的精确性(accuracy)和可靠性(reliability), 它的作用是防止数据库中存在不符合语义规定的数据, 以及防止因数据库操作员错误数据的输入/输出而造成数据库中存在错误数据.
MySQL数据库将数据完整性解释为: 存储在数据库中的所有数据值均正确.
为表设置约束是解决数据完整性的主要方法.
约束就是一种强制性的规定, 是通过定义字段的取值规则来维护数据完整性的.
MySQL数据库支持的约束有: primary key(主键)约束, not null(非空)约束, unique(唯一)约束, foreign key(外键)约束, default(默认)约束.
MySQL中, 为表创建约束有两种方法: ①创建表时添加约束;②修改表结构添加约束.
创建表时添加约束
-
主键约束(primary key)
该字段的值不能为空, 且不能重复.字段名 数据类型 primary key;
或者
constraint 约束名称 primary key(字段名); -
唯一约束
设置字段的唯一性.字段名 数据类型 unique;
-
非空约束
设定某列值不能为空, 用来强制实现数据的域完整性.字段名 数据类型 not null;
-
默认约束
为未填入值的字段强制填入一个默认情况下的值.字段名 数据类型 default ‘值’;
值是数字可以省略单引号 -
外键约束
表与表之间的数据是有关联性的, 为了防止数据的丢失或无意义的数据在数据库中扩散, 使得数据不一致, 需要设置外键.
一张表中的字段值恰好引用了另外一张表的主键值, 那么该字段就是本表的外键.constraint 约束名称 foreign key(字段名) references 主表名(字段名);
外键的作用:
- 禁止在从表中插入主表中不存在的数据
- 禁止由于修改主表中主键的值, 导致从表中相应的外键值孤立
- 禁止删除在从表中有对应记录的主表记录
修改表结构添加约束
通过修改表结构语句"alter table"为已经创建好的表添加约束, 语法如下:
alter table 表名 add constraint 约束名 约束类型(字段名[, …, n]);
其约束类型可以是primary key, foreign key.alter table 表名 modify 字段 数据类型 约束类型;
其约束类型可以是not null, default, unique.
删除约束
-
删除表的主键约束语法格式
alter table 表名 drop primary key;
-
删除表的外键约束语法格式
alter table 表名 drop foreign key 约束名;
数据更新
-
插入数据
使用insert语句向表中插入一条或多条记录.insert [into] 表名 set 字段1 = 值1, 字段2 = 值2, …;
或者
insert [into] 表名 [(字段列表)] values(字段值1, 字段值2, 字段值3, …); -
修改数据
使用update语句修改表中一个字段或多个字段的全部值, 也可修改满足条件的数据行和列的部分值.update 表名 set 字段1 = 值1[, 字段2 = 值2, …] [where 条件表达式];
where可选, 省略则表示表中对应的字段值都被更新.
值, 可以是表达式, 表字段的计算, 指定的数据, 查询结果等. -
删除数据
-
使用delete语句删除记录
delete from 表名 [where 条件表达式];
说明: 没有指定where子句, 那么该表的所有记录都将被删除, 但表结构依旧存在.
-
使用truncate table语句完全清空一个表
truncate [table] 表名;
-
delete与truncate 的区别:
清空记录的表如果是父表, 那么truncate命令会执行失败.
如果truncate语句成功清空表记录, 那么会重新设置自增型字段的计数器(delete不会).
truncate语句不支持事务的回滚, 并且不会触发触发器程序的运行.
delete语句删除的数据是可以恢复的.
-
Tips: MySQL每张表只能有一个自动增长(auto_increase)字段, 这个自动增长字段可以作为主键, 也可以作为非主键使用, 但是注意将非主键字段作为自动增长字段时必须为其添加唯一(unique)索引, 否则系统会报错.