mysql表和数据库的创建和修改

365 阅读4分钟
题前废话:

存储数据是处理数据的第一步,有了数据才有处理数据一说。

流程:创建数据库--确认字段--创建数据表--插入数据

从系统架构的角度来看,mysql数据库系统从大到小依次是数据库服务器 ,数据库 , 数据表 , 数据表的行与列

数据库的创建:

方式一: CREATE DATABASE 数据库名 or CREATE DATABASE 数据库名 CHARACTER SET 字符集

方式二:CREATE DATABASE IF NOT EXIST 数据库名

这里建议使用方式二,因为在创建数据库的时候,可能由于数据库的量很大导致我们创建的数据库已经存在,这时使用方式一就会报错,而方式二无论创建的数据库存在与否都不会报错。在创建数据库的时候我们可以指明数据库使用的字符集,如果不指明则默认为utf8【mysql8.0】。

修改数据库:
#更改数据库的字符集
ALTER DATABASE 数据库名 CHARACTER SET '字符集';

#删除数据库
DROP DATABASE 数据库名

#推荐使用的删库方法
DROP IF EXISTS 数据库名
创建表:
#创建表
	-- 需要用户具备创建表的权限
        示例代码:
	CREATE TABLE myemp1(
	id INT,
	emp_name VARCHAR(15),
	hire_date DATE
	);
	#如果在创建表的时候没有指明使用的字符集,则默认使用该表所在数据库的字符集
	
	#查看表数据
	SELECT * FROM emp;
	
	#创建表的另外一种方式--基于现有的表,同时还可以导入数据【本质为将查询到的结果做成一张表】
	#如果在创建表的时候使用了别名,那么别名会作为新表的字段名出现
	示例代码:
	CREATE TABLE myemp2 
	AS
	SELECT ename , empno 
	FROM emp;
	
	DESC myemp2;
	DESC emp;
修改表:
-- 修改表--ALTER TABLE 
	#添加一个字段
	DESC myemp2;
	
	ALTER TABLE myemp2 
	ADD salary DOUBLE(10,2)
	-- 字段添加的位置也可以控制
	
	ALTER TABLE myemp2 
	ADD email VARCHAR(45) AFTER ename;
	
	#修改一个字段:数据类型,长度,默认值[一般情况下不会去修改数据类型]
	ALTER TABLE myemp2 
	MODIFY ename VARCHAR(30);-- 使用defult 默认值 可以指定一个字段的默认值,当该字段没有被显示赋值的时候就会使用默认值

	

	#重命名一个字段-- 在修改名字的同时也可以修改长度
	ALTER TABLE myemp2 
	CHANGE salary monthly_salary DOUBLE(10,2);
	DESC myemp2;
	#删除一个字段
	ALTER TABLE myemp2
	DROP COLUMN email;
	
 #重命名表
 RENAME TABLE emp1 
 TO myemp1;
 DESC myemp1
 
 
 #另一种重命名的方式
 
 ALTER TABLE myemp1
 RENAME TO myemp2
 
 DESC myemp2
 
 
 #删除表--不光将表的结构删除了,同时表中的数据也被删除了,释放表的空间
 DROP TABLE myemp2 
 
 -- 与前面删除数据库类似,建议加上if	EXISTS 防止报错
 
 DROP TABLE if EXISTS myemp2
 
 #清空表,表示清空表中的所有数据,但是表的结构保留
 
 TRUNCATE TABLE myemp2;
 SELECT * FROM myemp2 
 
DCL commit rollback

commit 提交数据 , 一旦执行commit ,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。

ROLLBACK 回滚数据。一旦执行rollback,则可以实现数据的回滚。回滚到最近的一次commit之后

对比truncate table 和 DELETE FROM

相同点:都可以实现对表中所有数据的删除,同时保留表结构

不同点: TRUNCATE 一旦执行此操作,表中的数据全部清除。同时数据是不可以回滚的

#delete FROM :执行此操作可以删除表中的全部数据(不带where),同时也可以实现回滚

DDL 和 DML 的说明

DDL的操作一旦执行就不可以回滚:指令SET autocommit = false 对DDL失效 (因为在执行完DDL操作之后,一定会执行一次commit,而此commit不受SET autocommit = false的影响 )
DML 的操作默认情况下,一旦执行是不可以回滚的 但是如果在执行DML之前执行了SET autocommit = false 则执行的DML操作就可以回滚

TRUNCATE TABLE 比delete速度快 ,且使用的系统和事务日志资源少,但是truncate 无事务且不触发trigger,有可能 造成事故,故不建议在开发代码中使用此语句

说明:truncate TABLE 在功能上与不带where的子句的delete语句相同