题前废话:
存储数据是处理数据的第一步,有了数据才有处理数据一说。
流程:创建数据库--确认字段--创建数据表--插入数据
从系统架构的角度来看,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语句相同