Mysql数据库笔记(4)

表的创建(建表)

建表的语法格式:(建表属于DDL语句,DDL包括:oreate drop alter)

create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);

表名:建议以t_或者tbl_开始,可读性强。
字段名:见名之意

关于mysql中的数据类型

很多数据类型,我们只需要掌握一些常见的数据类型即可。

	varchar(最长255)
		可变长度的字符串
		比较只能,节省空间
		会根据实际的数据长度动态分配空间
		
		优点:节省空间
		缺点:需要动态分配空间,速度慢。
		
	char:(最长255)
		定长字符串
		不管实际的数据行的长度是多少
		分配固定长度的空间去存储数据
		使用不恰当的时候,可能会导致空间的浪费
		
		优点:不需要动态分配空间,速度快
		缺点:使用不当可能会导致空间的浪费
		
	varchar和char我们应该怎么选择
		性别字段选什么?因为性别是固定长度的字符串,所以选择char
		姓名字段选什么?每个人的名字长度不同,所以选择varchar
		
	int(最长11)
		数字中的整数型。等同于java的int
		
	bigint
		数字中的长整型。等同于java的long
		
	float
		单精度浮点型数据
		
	double
		双精度浮点型数据
		
	date
		短日期类型
		
	datetime
		长日期类型
		
	clob
		字符串大对象
		最多可以存储4G字符串
		比如:存储一篇文章,存储一个说明
		超过255个字符的都要采用CLOB字符大对象来存储
		character largr OBject:CLOB
		
	blob
		二进制大对象
		Binary large OBject
		专门用来存储图片、声音、视频等流媒体数据
		往BLOB类型的字段上插入数据的时候,例如插入一个图片,视频等,
		你需要使用IO流才行

创建一个学生表

	学号、姓名、年龄、性别、邮箱地址
	create table t_student(
	no int,
	name varchar(32),
	sex char(1),
	age int(3),
	email varchar(255)
	);
	
	删除表:drop 表+表名
		drop table t_student; //当这张表不存在的时候用这个语句会报错
		
		如果这张表存在的话,删除
		drop table if exists t_student;  //即使已经删除也不会报错

插入数据insert(DML)

语法格式:
	insert into 表名(字段1,字段2,字段3...)values(值1,值2,值3);
	注意:字段名和值要一一对应,什么是一一对应
		  数量要对应,数据类型要对应
		  
insert into t_student(no,name,sex,age,email)values(1,'zhangsan','m',20,'zhangsan@123.com');
insert into 
t_student(email,name,sex,age,no) values('lisi@123.com','lisi','f',20,2);
insert into 
t_student(no) values(3);

注意:insert语句但凡是执行成功了,那么必然会对一条记录
没有给其他字段指定值的话,默认值是null. 

drop table if exists t_student;
create table t_student(
	no int,
	name varchar(32),
	sex char(1) default 'm',指定值m
	age int(3),
	email varchar(255)
	);	

Field   Type       Null   Key   Default   Extra 
-------+--------------+------+-----+---------+-------+
nol     int(11)    YES           NULL   
nanei   varchar(32)YEs           NULL
sexl    char (1)   YEs           m
age     int (3)    YES           NULL
iemail  varchar(255)YEs          NULL
------------------------------------------

insert into t_student(no) values(1);
select * from t_student;

no   name    sex   age   email
 —----+------+------+------+-------
1    NULL     m    NULL   NULL

insert语句中的“字段名”可以省略吗?可以
	insert into t_student values(2);  //错误的

//注意:前面的字段名胜利的说,等于都写上了,所以值都要写上。
insert into t_student values(2,'lisi','f',20,'lisi@123.com');

insert插入日期

数字格式化:format
	select ename,sal from emp;
	
格式化数字:format(数字,‘格式’)

select ename,format(sal,'$999,999')as sal from emp;	



str_to_date:将字符串varchar类型转换成date类型
date_format:将date类型转换成具有一定格式的varchar字符串类型。

create table t_user(
id int,
name varchar(32),
birth char(10)  //生日可以使用字符串
);

create table t_user(
id int,
name varchar(32),
birth date  //生日可以使用date日期类型
);  
desc t_user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(32) | YES  |     | NULL    |       |
| birth | char(10)    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

插入数据:

insert into t_user(id,name,birth) values(1,'zhangsan','01-10-1990'); //1990年10月1日
出问题l:原因是类型不匹配,数据库birth是tate类型,这里给了一个字符串varchar.

可以使用str_to_date函数进行类型转换
str_to_date函数可以将字符串转换成日期类型date?
语法格式:
	str_to_date('字符串日期','日期类型')
	
mysql的日期格式:
	%Y  年
	%m  月
	%d  日
	%h  时
	%i  分
	%s  秒
	
insert into t_user(id,name,birth) values(1,'zhangsan',str_to_date('01-10-1990'));
	
str_to_date函数可以把字符串varchar转换成日期date类型数据,
通常使用在插入insert方面,因为插入的时候需要一个日期类型的数据
需要通过该函数将字符串转换成date.

好消息?
如果你提供的日期字符串是这个格式,str_to_date函数就不需要了
	%Y-%m-%d
insert into t_user(id,name,birth) values(2,'lisi','1990-10-01');


查询的时候可以以某个特定的日期格式展示吗?
date format
这个函教可以将日期类型转换成特定格式的字符串。

select id,name,date_format(birth,'%m/%d/%Y') as birth from t_user;

+------+----------+------------+
| id   | name     | birth      |
+------+----------+------------+
|    1 | zhangsan | 00/00/0000 |
|    2 | lisi     | 10/01/1990 |
|    2 | lisi     | 10/01/1990 |
+------+----------+------------+

date_fornat的数怎么用?
date format(日期类型数据,·日期格式)
这个函数通常使用在查询日期方面。设置展示的日期格式.

select id,name,birth from t_user;

+------+----------+------------+
| id   | name     | birth      |
+------+----------+------------+
|    1 | zhangsan | 0000-00-00 |
|    2 | lisi     | 1990-10-01 |
|    2 | lisi     | 1990-10-01 |
+------+----------+------------+
以上的sQL语句实际上是进行了默认的日期格式化,
自动将薮据库中的date类型转换成varchar类型。
并且采用的格式是mysql默认的日期格式:'%Y-%m-ad'
select id,name,date_format(birth ,'%Y/%m/%d') as birth from t_user;
+------+----------+------------+
| id   | name     | birth      |
+------+----------+------------+
|    1 | zhangsan | 0000/00/00 |
|    2 | lisi     | 1990/10/01 |
|    2 | lisi     | 1990/10/01 |
+------+----------+------------+

date和datetime两个类型的区别?

date是短日期:只包括年月日信息-
datetime是长日期:包括年月日时分秒信息。

drop table if exists t_user;
create table t_user (
id int,
name varchar(32),
birth date,
create_time datetime
);

id是整数
name是字符串birth是短日期
create_time是这条记录的创建时间:长日期类型

mysgl短日期默认格式:号Y一名m-%d
mysql长日期默认格式:%Y-%m-%d sh: %i :名s
insert into t_user(id,name,birth,create_time)values(1,'zhangsan','1990-10-01','2020-03-18 15:49:50');

mysql> select * from t_user;
+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 |
+------+----------+------------+---------------------+

在mysql当中怎么获取系统当前时间?
now()函数,并且获取的时间带有:时分秒信息!!!!是datetime类型的。
insert into t_user(id,name,birth,create_time)values(2,'lisi','1991-10-01',now());

mysql> select * from t_user;
+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 |
|    2 | lisi     | 1991-10-01 | 2021-11-28 14:04:01 |
+------+----------+------------+---------------------+

修改update (DML)

语法格式:
update表名set字段名1=值1,字段名2=值2,字段名3-值3... where 条件;注意:没有条件限制会导致所有教据全部更新-
update t_user set name = 'jack' , birth = '2000-10-11' where id = 2;  //将id2改为jack

+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 |
|    2 | jack     | 2000-10-11 | 2021-11-28 14:04:01 |
+------+----------+------------+---------------------+

update t_user set name ='jack',birth = '2000-10-11',create_time=now() where id = 2;

mysql> select * from t_user;
+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 |
|    2 | jack     | 2000-10-11 | 2021-11-28 14:07:21 |
+------+----------+------------+---------------------+

删除数据 delete (DML)

语法格式?
	delete from表名where条件;
注意:没有条件,整张表的数据会全部删除!

delete from t_user where id=2;  //删除id=2的数据
mysql> select * from t_user;  
+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 |
+------+----------+------------+---------------------+
insert into t_user(id) values(2); 插入数据id类型为2
+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 |
|    2 | NULL     | NULL       | NULL                |
+------+----------+------------+---------------------+

delete from t_user;  //删除所有


insert(增) delete(删) update(改) select(查)

insert语句可以一次插入多条记录吗?可以的!

mysql> desc t_user;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | int(11)     | YES  |     | NULL    |       |
| name        | varchar(32) | YES  |     | NULL    |       |
| birth       | date        | YES  |     | NULL    |       |
| create_time | datetime    | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
插入多条数据:
	insert into t_user(id,name,birth,create_time)values
	(1,'yinzhe','1997-11-18',now()),
	(2,'zhenchen','1998-10-06',now()),
	(3,'yzc','2013-06-27',now())
	;
语法:insert into t_user(字段1,字段2,字段3) values(),(),();
mysql> select * from t_user;
+------+----------+------------+---------------------+
| id   | name     | birth      | create_time         |
+------+----------+------------+---------------------+
|    1 | yinzhe   | 1997-11-18 | 2021-11-28 16:02:06 |
|    2 | zhenchen | 1998-10-06 | 2021-11-28 16:02:06 |
|    3 | yzc      | 2013-06-27 | 2021-11-28 16:02:06 |
+------+----------+------------+---------------------+

快速创建表?

mysql> create table emp2 as select * from emp ;
原理:
将一个查询结果当做一张表新建!!!!!这个可以完成表的快速复制!! !!
表创建出来,同时表中的薮据也存在了!!!

快速删除表中的数据?

//删除dept bak表中的薮据
delete from dept _bak;门/这种删除数据的方式比较慢。

myscl> select * from dept_bak ;
Empty set (o.0o sec)

delete语句删除数据的原理?
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!这种删除缺点是:删除效率比较低-
这种删除优点是:支持回滚,后悔了可以再恢复数据!!!

roollback回滚,删除后可恢复

truncate语句删除数据的原理?
	这种删除效率比较高,表被一次截断,物理删除。
	这种删除缺点:不支持回滚。
	这种删除优点:快速。
用法: truncate table dept bak;(这种操作属于DDL操作。)

大表非常大,上亿条记录????

删除的时候,使用delete,也许需要执行1个小时才能删除完!效率较低。
可以选择使用truncate删除表中的数据。只需要不到1秒钟的时间就删除结束。效率较高.
但是使用truncate之前,必须仔细询问客户是否真的要删除,并警告删除之后不可恢复!

truncate是删除表中的数据,表还在。

删除表操作
	drop table 表名;//这不是删除表中的数据,是把表删除



对表结构的增删改?

什么是对表结构的修改?
添加一个字段,删除一个字段,修改一个字段!! !

对表结构的修改需要使用:alter属于DDL语句
DDL包括: create drop alter

第一:在实际的开发中,需求一旦确定之后,表一旦设计好之后,很少的进行表结构的修改。因为开发进行中的时候,修改表结构,成本比较高。
修改表的结构,对应的java代码就需要进行大量的修改。成本是比较高的。
这个责任应该由设计人员来承担!

第二:由于修改表结构的操作很少,所以我们不需要掌握,如果有一天真的要修改表结构,你可以使用工具!! !!

修改表结构的操作是不需要写到java程序中的。实际上也不是java程序员的范畴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值