赞
踩
目录
13.对比 truncate table 和 delete from
15.在删除时选择truncate table还是delete?
创建数据库、确认字段、创建数据表、插入数据
1. 数据库名、表名不得超过30个字符,变量名限制为29个
2.必须只能包含 A–Z, a–z, 0–9, _共63个字符
3.数据库名、表名、字段名等对象名中间不要包含空格
4.同一个MySQL中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
5.必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来
1.create database 数据库名
创建的数据库使用的是默认的字符集
2.create database 数据库 character set ‘字符集’
显示的指明了要创建的数据库的字符集
3.create database if not exists 数据库名 character set ‘utf8’(推荐使用这种)
如果要创建的数据库已经存在,则创建不成功,但不会报错。
CREATE DATABASE IF NOT EXISTS test01_office CHARACTER SET 'utf8';
1.查看当前连接的数据库:show databases
2.切换数据库:use 数据库名
3.查看当前数据库表:show tables
4.查看当前使用的数据库:select database() from dual
5.查看置顶数据库下的保存表:show tables from 数据库名
- SHOW DATABASES;
- USE mydata;
- SHOW TABLES;
- SELECT DATABASE() FROM DUAL;
- SHOW TABLES FROM mydata;
1.alter database 数据库名 character set
2.查看数据库字符集:show create database 数据库名
- ALTER DATABASE mydata CHARACTER SET 'utf8';
- SHOW CREATE DATABASE mydata;
1.drop database 数据库名
2.推荐:drop database if exists 数据库名
如果要删除的数据库存在,删除成功;如果不存在,不会报错
DROP DATABASE IF EXISTS mydata;
前提:需要用户具备创建表的权限
方式一:
1.create table if not exists 表名
2.使用varchar时需要指明长度,用以定义字符
3.查看表结构:desc 表名
4.如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集
- CREATE TABLE IF NOT EXISTS employees(
- empNum INT,
- lastName VARCHAR(50),
- firstName VARCHAR(50),
- mobile VARCHAR(25),
- `code` INT,
- jobTitle VARCHAR(50),
- birth DATE,
- note VARCHAR(255),
- sex VARCHAR(5)
- );
-
- DESC employees;
方式二:基于现有的表,同时导入数据
1.create table 表名 as 查询语句
2.查询语句中字段的别名,可以作为新创建的表的字段的名称
3.此时查询语句结构比较丰富,使用前面各种select
- CREATE TABLE IF NOT EXISTS dept02
- AS
- SELECT *
- FROM atguigudb.departments;
-
- DESC emp02;
1.添加一个字段:alter table 表名 add 字段名
此时:first/after 等可以指定位置
- ALTER TABLE emp02
- ADD salary2 DOUBLE(10,2) AFTER email;
2.修改一个字段:数据类型、长度:alter table 表名 modify 字段名 数据类型
- ALTER TABLE emp02
- MODIFY salary2 DOUBLE(20,4);
3.重命名一个字段:alter table 表名 change 字段名 修改名 数据类型
- ALTER TABLE emp02
- CHANGE salary2 my_salary DOUBLE(20,4);
4.删除一个字段:after table 表名 drop column 字段名
- ALTER TABLE emp01 DROP COLUMN department_id;
- DESC emp01;
1.rename table 表名 to 新表名——推荐
- RENAME TABLE emp02
- TO emp22;
2.alter table 表名 rename to 新表名
删除表结构+表数据,释放表空间:drop table if exists 表名
DROP DATABASE IF EXISTS mydata;
清空表,清空表中数据,但保留表结构:truncate table 表名;
TRUNCATE TABLE mydata;
1.commit:提交数据;一旦执行commit,数据就被永久的保存在了数据库中,无法回滚
2.rollback:回滚数据;一旦执行rollback,就可以实现数据的回滚,回滚到最近的一次commit之后
相同点:
都可以实现对表中所有的数据的删除,同时保留表结构
不同点:
truncate table:一旦执行此操作,表数据全部清除;数据不可以回滚
delete from:一旦执行此操作,表数据全部清除(不带where);数据可以实现回滚
1.DDL的操作一旦执行,就不可以回滚;指令SET autocommit= FALSE无效。(因为在执行完DDL之后一定会执行一次commit,而此操作commit操作不受SET autocommit= FALSE影响)
2.DML的操作默认情况,一旦执行,也是不可回滚。但是如果执行DML之前,执行了SET autocommit= FALSE,则执行的DML操作就可以实现回滚
使用delete:因为truncate table比delete速度快,且使用的系统和事务日志资源少,但Truncate无事务且不触发trigger,有可能造成事故,因此在开发中不建议使用此语句。
另外:truncate在功能上与不带where子句的delete语句相同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。