「这是我参与2022首次更文挑战的第32天,活动详情查看:2022首次更文挑战」
1、表的创建
用代码创建
-- 注意点:英文括号() 表的名称和字段尽量用``
-- AUTO_INCREMENT 自增 一个表只能有一个自增键,而且必须是主键
-- 字符串用单引号括起来
-- 所有的语句后面加,(英文的) 最后一个不用加
-- PRIMARY KEY 设置主键,一个表一般只有唯一的主键
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR (50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 拓展
SHOW CREATE DATABASE school -- 查看数据库的语句
SHOW CREATE TABLE student -- 查看表的语句
DESC student -- 显示表的结构
基于现有的表创建,同时导入数据
create table myemp2 as select employee_id,last_name,salary from employees;
2、表的修改
修改表名
-- 修改表名
-- 方式一:ALTER TABLE 原表名 RENAME AS 现表名
ALTER TABLE teacher RENAME AS teacher1
-- 方式二:
rename table teacher1 to teacher3
添加表的字段
要向表中添加一个或多个列,需要执行以下步骤:
- 首先,在
ALTER TABLE
子句之后指定要添加table_name
,表示列所在的表。 - 其次,将新列定义放在
ADD
子句之后。 如果要在表中指定新列的顺序,可以使用可选子句AFTER existing_column
。
-- 增加表的字段,默认添加到表的最后一个位置 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE myemp2
ADD qq INT(11)
表
-- 添加多个字段,以下语句一次将fee和max_limit列添加到myemp2表
ALTER TABLE myemp2
ADD fee NUMERIC (10, 2) AFTER qq,
ADD max_limit INT AFTER fee;
修改表的字段
-- 修改表的字段(1.重命名 2.修改约束)
-- 修改约束 ALTER TABLE 表名 MODIFY 字段 列属性
ALTER TABLE teacher1 MODIFY age VARCHAR(11)
-- 字段重命名 把qq重命名为weixin,还把int类型变为varchar类型 ALTER TABLE 表名 CHANGE 原字段名 现字段名 列属性
ALTER TABLE teacher1 CHANGE qq weixin VARCHAR(10)
结论 :modify用来修改约束和类型,change用来字段重命名
删除字段
当表的字段已过时且未被任何其他数据库对象(如触发器,视图,存储过程和存储过程)使用时,需要将其从表中删除。
要删除一个或多个列,使用以下语法:
-- 删除表的字段 ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP afe
ALTER TABLE table_name
DROP column_name,
DROP colum_name,
...
3、表的删除
随着数据库在应用过程不断的数据增加,有时需要从数据库中删除过时的冗余表或不用的表。 要删除表,可使用DROP TABLE
语句。
以下是DROP TABLE
语句的语法。
DROP TABLE IF EXISTS table_name;
要删除现有表,可在DROP TABLE
子句后指定表的名称。 如果要删除的表不存在,则数据库系统会发出错误。
DROP TABLE
语句允许同时删除多个表。 为此,需要在DROP TABLE
子句之后指定逗号分隔表名称的列表,如下所示:
DROP TABLE table_name1,table_name2,...;
然后,数据库系统逐个删除指定的所有表。
4、表的清空
使用DROP TABLE
删除表时,不光删除表的结构,还会把表中的数据删除。
要清空表中的所有数据,使用TRUNCATE TABLE
语句:
TRUNCATE TABLE table_name;
MySQL 允许直接省略TABLE
关键字,因此在MySQL中TRUNCATE TABLE
语句用法如下:
-- 删除一个表的数据
TRUNCATE table_name;
-- 删除多个表的数据
TRUNCATE table_name1, table_name2, ...;
使用实例
TRUNCATE myemp3; -- 删除数据
select * from myemp3 -- 查看数据
TRUNCATE 和 DELETE 的区别
逻辑上,TRUNCATE TABLE
语句和不带WHERE
子句的DELETE
语句(delete from myemp3)提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:
- 使用
DELETE
语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE
语句时,除非在尚未提交的事务中使用它,否则无法回滚。 - 要从外键约束引用的表中删除数据,不能使用
TRUNCATE TABLE
语句。 在这种情况下,必须使用DELETE
语句。 - 如果表具有与之关联的触发器,则
TRUNCATE TABLE
语句不会触发delete
触发器。 - 执行
TRUNCATE TABLE
语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。DELETE
语句不是这种情况。 - 带有
WHERE
子句的DELETE
语句从表中删除部分数据,而TRUNCATE TABLE
语句始终从表中删除所有数据。