[mysql]修改表和课后练习
目录
DDL数据定义语言
添加一个字段
添加一个字段到最后一个
添加到表中的第一个一个字段
选择其中一个位置:
修改一个字段:数据类型,长度,默认值(略)
重命名一个字段
删除一个字段
重命名表
删除表
清空表
DCL中事务相关内容
DCL中COMMIT和ROLLBACK的讲解
对比TRUNCATE TABLE 和DELETE FROM
创建管理表的课后练习
练习1
答案
练习2
解答
DDL数据定义语言
修改表
DESC myemp1
添加一个字段
添加一个字段到最后一个
ALTER TABLE myemp2
ADD phone_test VARCHAR(11) FIRST#默认添加到表中的最后一个字段
添加到表中的第一个一个字段
ADD phone_test VARCHAR(11) FIRST#FIRST
选择其中一个位置:
ALTER TABLE myemp2
ADD email_test varchar(45) AFTER phone_test;
DESC myemp2
修改一个字段:数据类型,长度,默认值(略)
我们一般会修改数据类型吗,我们一般都不会做了,如果我们把邮箱写成字符串,或者把小数写成字符串类型,里面已经有小数的数据了,那么我们也不适合改,也不会成功,总之,数据类型我们改的不多
我们一般就只会修改长度
ALTER TABLE myemp2
MODIFY phone_test varchar(20)
默认值:
ALTER TABLE myemp2
MODIFY phone_test varchar(20) default ‘aaa’
就是没有指定这个字段的时候默认就是aaa
重命名一个字段
ALTER TABLE myemp2
CHANGE salary salary_test int(5)
ALTER TABLE myemp2
CHANGE salary_test salary varchar(12)
我们是可以发现,我们改名的时候是可以修改类型和长度的,所以在这个过程中也是存在MODIFY的行为.
删除一个字段
ALTER TABLE myemp2
DROP COLUMN email_test
重命名表
重命名有两种方式,大家记一个就行,第一个比较标准,建议记这个,第一个RENAME TABLE myemp2 TO myemp22
第二种修改
ALTER TABLE myemp22
RENAME TO myem12
删除表
DROP TABLE IF EXISTS myemp12
#如果存在就删除,不存在就算了.和之前我们如果不存在就创建是一样的关键词
那么大家会不会好奇,这个操作可以撤销,或者说回滚吗,不能我们如果删除是不能回滚的.那就得看你有没有日志文件了,就得跑路了
清空表
删除表DROP意味着不光将表结构删除了,将表数据也删除了.而我们的TRUNCATE TABLE只是将表内容删除,表结构还在.
TRUNCATE TABLE
DCL中事务相关内容
DCL中COMMIT和ROLLBACK的讲解
COMMIT:提交数据,一旦执行COMMIT数据就被永久保存内容,意味数据不可以回滚
ROLLBACK:回滚数据,一旦ROLLBACK撤销,就可以回滚到最近的一次COMMIT之后,如果COMMIT的之前就不能撤销了.
比如C1运行一次comitc2运行一次commit c3没有运行,那么c3就会被撤销
事务我们先不解释,那么我们先把这两个和
对比TRUNCATE TABLE 和DELETE FROM
相同点:都可以实现对表的数据删除,表结构还在
不同点:
TRUNCATE TABLE表数据全部清除,同时数据不可以回滚
DELECT FROM 一旦执行此操作,表数据可以全部清除.不带WHERE就可以全部清除,可以实现回滚,也可以不实现,我们就可以引入
DDL数据定义语言和DML数据操作语言
DDL的操作,创建表,删除表,创建数据库,删除数据库一旦运行,就不能撤回
DML的操作,默认情况下一旦执行也是不能回滚但是我们可以修改参数SET autocommit =FALSE,则执行DML操作就可以进行回滚,
也就是这个参数值只对DML生效
演示:
DELETE FROM 我们建立一个表
CREATE TABLE myemp3
AS
SELECT * FROM employees
我们先COMMIT一下
然后取消一下不能撤销关键词
SET autocommit =FALSE
删除一下表
DELETE FROM myemp3
我们查询之后就没有数据了
我们回滚一下再查询
发现回滚有效,是不是就ROLLBACK到我们COMMIT之后.
现在我们再进行一下TRUNCATE TABLE
实际DDL有一个自动的COMMIT操作,这个操作不会收到关键词 AUTOCOMMIT影响
因为他只影响DML
所以使用DDL一定要谨慎.
DCL中和事务相关的内容我们就说到这,剩下的我们下篇再继续说事务的事
那么大家对DCL和DML,DDL的区别大家就应该明白了,如果我们想删除一个表,你是要使用TRUNCATE,还是DELECT FROM表.由于TRUNCATE比DELETE(由于要备份)的速度快,而且使用的系统和事务资源扫,但TRUNCATE无事务部且不触发TRIGGER,有可能造成事故,对于实际项目中,核心数据如果用TRUNCATE 删除了那就非常危险,所以我们还是使用DELECT比较好,就算因为备份会导致占用资源.
创建管理表的课后练习
DCL数据控制语言和DDL数据定义语言的课后练习
练习1
#1. 创建数据库test01_office,指明字符集为utf8。并在此数据库下执行下述操作 #2. 创建表dept01 /* 字段 类型 id NAME */ INT(7) VARCHAR(25)
#3. 将表departments中的数据插入新表dept02中
#4. 创建表emp01 /* 字段 类型 id INT(7) first_name VARCHAR (25) last_name VARCHAR(25) dept_id INT(7) */
#5. 将列last_name的长度增加到50
#6. 根据表employees创建emp02
#7. 删除表emp01
#8. 将表emp02重命名为emp01
#9.在表dept02和emp01中添加新列test_column,并检查所作的操作
#10.直接删除表emp01中的列 department_i
这里的难度会比查询中低很多,只要你知道关键词就一定可以做出来,但是之前查询就算你知道
SELECT PASSWORD('mysql') FROM DuaL
SELECT ENCODE('mysql','你好'),DECODE(ENCODE('mysql','你好'),'你好') FROM DuaL
DCL数据控制语言和DDL数据定义语言的课后练习
答案
#1. 创建数据库test01_office,指明字符集为utf8。并在此数据库下执行下述操作
CREATE DATABASE test01_office
USE test01_office
#2. 创建表dept01 /* 字段 类型 id NAME */ INT(7) VARCHAR(25)
CREATE TABLE dept01 (id INT(7),`NAME` VARCHAR(25))
#3. 将表departments中的数据插入新表dept02中
CREATE TABLE dept02
AS
SELECT *
FROM atguigudb.departments
#4. 创建表emp01 /* 字段 类型 id INT(7) first_name VARCHAR (25) last_name VARCHAR(25) dept_id INT(7) */
CREATE TABLE emp01(id INT(7), first_name VARCHAR (25) ,last_name VARCHAR(25) ,dept_id INT(7))
#5. 将列last_name的长度增加到50
ALTER TABLE emp01
MODIFY last_name VARCHAR(50)
#6. 根据表employees创建emp02
CREATE TABLE emp02
AS
SELECT *
FROM atguigudb.employees
#7. 删除表emp01
DROP TABLE emp01
#8. 将表emp02重命名为emp01
RENAME TABLE emp02 TO emp01
#ALTER TABLE emp002 RENAME TO emp01
#9.在表dept02和emp01中添加新列test_column,并检查所作的操作
ALTER TABLE dept02
ADD COLUMN test_column VARCHAR(12);
ALTER TABLE emp01
ADD COLUMN test_column VARCHAR(12)
#10.直接删除表emp01中的列 department_id
desc emp01;
ALTER TABLE emp01
DROP COLUMN department_id
练习2
# 1、创建数据库 test02_market
# 2、创建数据表 customers
# 3、将 c_contact 字段移动到 c_birth 字段后面
# 4、将 c_name 字段数据类型改为 varchar(70)
# 5、将c_contact字段改名为c_phone
# 6、增加c_gender字段到c_name后面,数据类型为char(1)
# 7、将表名改为customers_info
# 8、删除字段c_city
解答
# 1、创建数据库 test02_market
CREATE DATABASE test02__market
USE test02__market
# 2、创建数据表 customers
CREATE TABLE customers(
c_num int,
c_name varchar(50),
c_contact varchar(50),
c_city varchar(50),
c_birth date)
# 3、将 c_contact 字段移动到 c_birth 字段后面
ALTER TABLE customers
CHANGE c_phone c_contact varchar(50) AFTER c_birth
DESC customers
#注意只有AFTER没有BEFORE
ADD SELECT c_contact1 FROM c_contact1BEFORE c_birth
# 4、将 c_name 字段数据类型改为 varchar(70)
ALTER TABLE customers
MODIFY c_name varchar(70)
DESC customers
# 5、将c_contact字段改名为c_phone
ALTER TABLE customers
CHANGE c_contact c_phone varchar(70)
DESC customers
# 6、增加c_gender字段到c_name后面,数据类型为char(1)
ALTER TABLE customers
ADD c_gender CHAR(1) AFTER c_name
# 7、将表名改为customers_info
RENAME TABLE customers TO customers_info
# 8、删除字段c_city
ALTER TABLE customers_info
DROP COLUMN c_city