一、表
mysql短日期默认格式:%Y-%m-%d
mysql长日期默认格式:%Y-%m-%d %h:%i:%s
若题目给你的数据不是这个格式,那你就要先转格式再使用DML语句了
1.1、MySQL中的数据类型
- varchar(最长255)
- 可变长度的字符串
- 会根据实际的数据长度动态分配空间。
- 优点:节省空间
- 缺点:需要动态分配空间,速度慢。
- char(最长255)
- 定长字符串
- 不管实际的数据长度是多少,分配固定长度的空间去存储数据。
- 优点:不需要动态分配空间,速度快。
- 缺点:使用不当可能会导致空间的浪费。
- varchar和char我们应该怎么选择?
- 性别字段你选什么?因为性别是固定长度的字符串,所以选择char。
- 姓名字段你选什么?每一个人的名字长度不同,所以选择varchar。
- int(最长11)
- 数字中的整数型。
- bigint
- 数字中的长整型。
- float
- 单精度浮点型数据
- double
- 双精度浮点型数据
- date
- 短日期类型
- datetime
- 长日期类型
- date与datetime区别
- date是短日期:只包括年月日信息。
- datetime是长日期:包括年月日时分秒信息。
- clob
- 字符大对象
- 最多可以存储4G的字符串。
- 比如:存储一篇文章,存储一个说明。
- 超过255个字符的都要采用CLOB字符大对象来存储。
- Character Large Object:CLOB
- blob
- 二进制大对象
- Binary Large OBject
- 专门用来存储图片、声音、视频等流媒体数据。
- 往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
- 你需要使用IO流才行。
1.2、数据类型之间的转换
- str_to_date:将字符串varchar类型转换成date类型
insert into t_user values(1, 'zhangsan', str_to_date('01-10-1990','%d-%m-%Y'));
- date_format:将date类型转换成一定格式的varchar字符串类型
select id,name,date_format(birth, '%m/%d/%Y') as birth from t_user;
1.3、创建表
- 新建一个学生表:
create table t_student( no int, name varchar(32), sex char(1), age int(3), email varchar(255) );
- 复制粘贴已有表:
create table emp2 as select * from emp;
1.4、删除表
- 1、删除整个表(表消失)
drop table 表名;(DDL)
- 2、删除表的整个数据(表还在)
delete from 表名;(DML)
//删除暂时不需要的小表,数据可恢复
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!缺点:删除效率很低,大表不建议用
优点:支持回滚,后悔了可以再恢复数据!!!
truncate table 表名; (DDL)
优点:快速,适合明确不要的大表删除操作
缺点:不支持回滚(rollback)
//删除明确不要的大表,数据不能恢复
这种删除效率比较高,表被一次截断,物理删除。
1.5、对表进行约束
约束对应的英语单词:constraint
在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!
约束的作用就是为了保证:表中的数据有效!!
- 约束包括哪些
1、非空约束:not null
create table t_vip( id int, name varchar(255) not null // not null只有列级约束,没有表级约束! );
2、唯一性约束: unique
唯一性约束unique约束的字段不能重复,但是可以为NULL;
需要给多个字段联合起来添加某一个约束的时候,需要使用表级约束
在mysql当中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段!!
1| create table t_vip( id int, name varchar(255) unique, // 约束直接添加到列后面的,叫做列级约束 email varchar(255) ); ---------------------------------------- 2| create table t_vip( id int, name varchar(255), email varchar(255), unique(name,email) // 约束没有添加在列的后面,叫做表级约束 );
3、主键约束: primary key (简称PK)
主键值是每一行记录的唯一标识。
主键值是每一行记录的身份证号!!!
记住:任何一张表都应该有主键,没有主键,表无效!!
主键的特征:not null + unique(不为空值且不重复!!)
1| create table t_vip( id int primary key, //列级约束 name varchar(255) ); ---------------------- 2| create table t_vip( id int, name varchar(255), primary key(id) // 表级约束 );
表级约束主要是给多个字段联合起来添加约束
id和name联合起来做主键:复合主键!!!!
在实际开发中不建议使用:复合主键。建议使用单一主键!
因为主键值存在的意义就是这行记录的身份证号,只要意义达到即可,单一主键可以做到。
复合主键比较复杂,不建议使用!!!
列级约束的主键只能是一个!!!
复合主键只能出现在表级约束中!!!
create table t_vip( id int, name varchar(255), email varchar(255), primary key(id,name) );
自增主键
create table t_vip( id int primary key auto_increment, //auto_increment表示自增,从1开始,以1递增! //即插入数据时不需要写主键字段值,它会从1自增至末尾 name varchar(255) );
4、外键约束:foreign key(简称FK)
一张表引用另一张表时使用外键FK!!
为啥给cno字段添加外键约束??
答:当cno字段没有任何约束的时候,可能会导致数据无效。可能出现一个102,但是102班级不存在。
所以为了保证cno字段中的值都是100和101,需要给cno字段添加外键约束。
那么:cno字段就是外键字段。cno字段中的每一个值都是外键值。
- t_class是父表,t_student是子表
- 删除表的顺序?
- 先删子,再删父。
- 创建表的顺序?
- 先创建父,再创建子。
- 删除数据的顺序?
- 先删子,再删父。
- 插入数据的顺序?
- 先插入父,再插入子。
- 注意:
- 外键引用的不一定是主键,但至少具有unique约束
- 外键值可以为null
5、检查约束:check(mysql不支持,oracle支持)
不做要求
1.6、增、删、改
- 1、对数据(DML)
- 插入数据insert 增
1| insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3); 2| insert into 表名 values(值1,值2,值3);
- 默认添加数据的顺序以表创建时字段的顺序加入
//即数量要对应。数据类型要对应- 一次可以插入多条记录:
语法:insert into t_user(字段名1,字段名2) values(),(),(),();insert into t_user(id,name,birth,create_time) values (1,'zs','1980-10-11',now()), (2,'lisi','1981-10-11',now()), (3,'wangwu','1982-10-11',now());
- 删除数据delete 删
delete from 表名 where 条件;
- 没有条件,整张表的数据会全部删除!!
- 修改数据update 改
update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;
- 注意:没有条件限制会导致所有数据全部更新!!
- 2、对表结构(DDL)
- 增加字段 增
alter table t_student add contact_tel varchar(40)
- 删除字段 删
alter table t_student drop contact_tel;
- 修改字段 改
alter table t_student modify student_name varchar(100) ;