表的创建(建表)
1.建表的语法格式:(建表属于DDL语句,DDL包括: create drop alter )
create table 表名 (
字段名1 数据类型 ,
字段名2 数据类型,
字段名3 数据类型
);
表名:建议以t_ 或者 tb1_开始,可读性强。见名如意。
字段名:见名如意。
表名和字段名都属于标识符。
2.关于mysql中的数据类型?
varchar(最长255): 可变长度字符串。(比较智能,节省空间,根据实际的数据长度动态分配空间)
优点:节省空间
缺点:需要动态分配空间,速度慢。
char(最长255) :定长字符串(不管实际的数据长度是多少。 分配固定长度的空间去存储数据,使用不当的时候可能会导致空间的浪费)
优点:不需要动态分配空间,速度快。
缺点:使用不当可能会导致空间的浪费。
varchar 和 char我们应该怎么选择?
性别字段? 因为性别是固定长度的字符串,所以选择char;
姓名字段? 每个人的姓名长度不同,所以选择varchar。
int (最长11):数字中的整数型 。等同于java的int。
bigint:数字中的长整型。等同于Java中的long。
float: 单精度浮点数数据
double : 双精度浮点数数据
data : 短日期类型
datatime:长日期类型
clob(Character Large Object):字符大对象。最多可以存储4G的字符串。比如:存储一篇文章,存储一个说明,超过255个字符的都要采取clob字符大对象来存储。
blob(Binary Large Object) :二进制大对象。 专门用来存储图片,声音,视频等;流媒体数据。往blob类型的字段上插数据的时候,例如差一个图片,视频等,你需要使用IO流才行。
3.删除表
drop table 表名;//当这张表不存在的时候会报错!!
drop table if exists 表名;//如果存在就删除
4.插入数据insert(DML)
insert into 表名(字段名1,字段名2,字段名3…)
values (值1,值2,值3),(第二条记录),(第三题条记录);
字段名和值要一一对应,数量要对应。数据类型也要一一对应。
insert 语句但凡执行成功了,必然会多一条记录。没有给其他字段定值的话,默认值是NULL。insert 语句中的字段名可以省略。
insert 加入日期
格式化数字:format(数字,‘格式’)
str_to_date:将字符串varchar类型转换成date类型
date_format:将date类型转换成具有一定格式的varchar类型。
str_to_date函数可以将字符串转换成日期类型date类型数据。
str_to_date(‘字符串日期’,日期格式)
MySQL 的日期格式:%Y 年 %m 月 %d 日 %h 时 %i 分 %s 秒
date_format函数可以将日期类型转换成特定格式的字符串。通常使用在查询日期方面,设置展示的日期格式。
date_format(日期类型数据,’日期格式‘)
5.date和datetime俩个类型的区别?
date是短日期:只包括年月日信息。
datetime是长日期:包括年月日时分秒信息。
mysql短日期默认格式:%Y-%m-%d
mysql长日期默认格式:%Y-%m-%d %h:%i:%s
mysql获取系统当前时间:now() 函数,并且获取时间带有:时分秒信息!!!是datetime类型的。
6.修改update(DML)
语法格式:
update 表名
set 字段名1 = 值1 ,字段名2 = 值2 ,字段名3 = 值3…
where 条件;
没有条件会导致数据全部更新。
7.删除数据 delete (DML)
语法格式: delete from 表名 where 条件;
注意:没有条件,整张表的数据会被删除!
8.快速创建一张表?
create table emp2 as select * from emp;
原理:将一个查询结果当作一张表新建! 这个可以完成表的快速复制!表建出来,同时表中的数据也存在了!!
9.将查询结果插入到一张表中?insert相关!
insert into dept_bak select * from dept;
10.快速删除表中的数据?
delete from dept_bak;//这种删除数据的方式比较慢。
delete语句删除数据原理?
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!这种删除的缺点是:删除效率比较低。优点是:支持回滚,后悔了 ,后悔了可以再恢复数据!!
rollback;
select * from dept_bak;
truncate 语句删除数据原理:这种删除效率比较高,表被一次截断,物理删除。缺点:不支持回滚。优点:快速。
用法:truncate table dept_bak;(这种操作属于DDL操作)
非常大的表的时候。删除的时候选择使用delete,也许需要执行1个小时才能删除完,效率较低。可以选择使用truncate删除表中的数据。只需要不到1秒钟的时间就删除结束,效率较高。但是在使用truncate之前,必须仔细询问客户是否真的要删除,并警告删除之后不可恢复。
truncate 是删除表中的数据,表还在!
删除表操作?drop table 表名;//这不是删除表中的数据,是把表删除。
约束
1.什么是约束?
约束(constraint):在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表数据的完整性,有效性!!
2.约束包括那些?
非空约束:not null,唯一性约束:unique,主键约束:primary key ,外键约束:foreign key,检查约束:check(mysql 不支持,Oracle支持)
3.非空约束:not null 约束的字段不能为null。
在MySQL中如何执行脚本文件? mysql> source 路径
4.唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为null。
5.俩个字段联合起来具有唯一性
unique(字段1名,字段2名)
6.unique 和not null 联合
create table 表名 (
字段名1 数据类型 not null unique,
字段名2 数据类型,
字段名3 数据类型
);
在mysql当中,如果一个字段同时被not null 和unique 约束的话,该字段自动变成主键字段。(注意:Oracle中不一样!)
7.主键约束(primary key)
主键约束相关术语?
主键约束就是一种约束。该字段上添加了主键约束,这样的字段叫做主键字段。主键字段中每一个值都叫主键值。
什么是主键?
主键值是每一行记录的唯一标识。
create table 表名 (
字段名1 数据类型 primary key,//列级约束
字段名2 数据类型,
字段名3 数据类型,
//primary key (字段1)表级约束
);
表级约束主要是给多个字段联合起来添加约束,id和name联合起来作主键:复合主键。
create table t_vip (
id int ,
name varchar(255),
email varchar(255),
primary key(id,name)
);
一张表主键约束只能有一个!主键一般都是定长的,不建议varchar来做主键。
主键值可使用 auto_increment表示自增,从1开始以1递增。
create table t_vip (
id int primary key auto_increment ,
name varchar(255),
email varchar(255),
primary key(id,name)
);
8.外键约束(foreign key )
外键约束,一种约束。外键字段,该字段添加上了外键约束。外键值,外键字段当中的每一个值。
删除表的顺序:先删子,再删父;
创建表的顺序:先创建父,在创建子;
删除数据的顺序:先删子表,再删父表;
插入数据的顺序:先插入父,再插入子。
子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?答:不一定是主键,但至少具有unique约束。外键可以为null。
foreign key (外键) references 外表名(外键在外表中的名)
存储引擎
1.什么是存储引擎?有什么用?
存储引擎是MySQL中特有的一个术语,其他数据库没有。(oracle中有,但是不叫这个名字)实际上存储引擎是一个表存储/组织数据的方式。不同的存储引擎,表存储数据的方式不同。
2.怎么给表添加/指定 ”存储引擎 “呢?
show create table 表名; 展示当时建表的语句
可以在建表的时候给表指定存储引擎。
在建表的时候可以在最后小括号“)”的右边使用:
ENGINE来指定存储引擎。CHARSET来指定这张表的字符编码方式。
MySQL 默认的存储引擎是:InnoDB
MySQL 默认的字符编码方式是:utf_8
engine = innoDB default charset = utf_8;
3.怎么查看mysql支持哪些存储引擎?
show engines \G
mysql 支持九大存储引擎,当前版本不同情况不同。