大家好,我是jacky,很高兴跟大家继续分享MySQL数据分析实战课程,前面我们学习了库层面增删改查的SQL语句,这次课jacky将给大家介绍表层面的增删改查,
(一)本课时的学习逻辑
表层面的增删改查,重点在增,也就是怎样创建表,为什么呢?我们想数据库的三个层级是什么,库层级,表层级和数据层级,是不是?表层级在中间,我们说表一定是存储在某个库中,表中的数据不用说一定存储在表里是吧;所以表层级是起到承上启下的作用,也就是我们在创建表时,不是简单就创建一个表就完事了,表是不是存储数据的,我们往表里放数据的时候的时候,是不是总得有个规则,如果没有规则,是不是就浪费表得空间和效率了;下面我们那商场陈列货品打个比方
一个比方:商场陈列货品
我们都去过超市或者商场吧,只要是超市或者商场都是把商品分门别类得陈列是不是,化妆品在一个区域,男装在一个区域,女装在一个区域是吧,并且商场得装修一定是规整的,我们看着很整齐很舒服是吧;那商场为什么要把同类型的商品放在一个区域呢,是不是为了提高顾客的购买效率,比如说我要去商场买这个迪奥的化妆品,我们去化妆区是不是就能找到了,如果商品不是按区域划分的,是不是我们得满商场去找这个迪奥,这样购物是不是很没效率是不是很差;再说,商场装修是不是每个品牌一定是排列整齐得才能保证固定得商场面积下放下更多得专柜是吧;
同样道理,我们把MySQL中的表比作商场,商场里的商品就是表中的数据,是吧;我们是不是也要给放在表中的数据归类,不同数据类型的数据是不是要有不同的约束和规则,才能提高我们查询数据的效率是吧;我们也要想商场规划专柜一样,用一套规则,规范我们的数据存放,来提高我们表的空间使用,是吧;
前面说了这么多,就为了说明一个道理:对于表层级的增删改查,重点在于增,也就是怎样创建表,因为在创建表的时候我们要对表进行设计,就跟商场规划专柜是一个道理,也就是设计这个表,我们在创建这个表时,要搭建这个表的表结构,那么搭建表结构要设定什么呢?设定将要存放在表中数据的字段属性,表的类型及存储位置,创建表的默认字符集,创建表索引;一口气说了这么多名词,大家不要着急,只要逻辑捋清了,这些都很简单,jacky会一一给大家讲解;
(二)增删改查概述
--增(创建表)
create table 表名(
列名 类型 是否可以为空,
列名 类型 是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
--删(删除表)
drop table demo;
--改(修改表名)
rename table 旧表名 to 新表名;
--查(查表之前先选库)
show tables;
--查补充:查看表的定义
DESCRIBE 表名;
或
DESC 表名;
create table user(
id int,
name varchar(30),
pwd varchar(30)
);
- 我们说表操作的增删改查,重点在于增,就是因为我们在创建表时,大家有没有想过,为什么id后面要加int,为什么name和pwd后面要加varchar,varchar后面为什么要加30,不是加别的,上面这些都是新增表之前的设计阶段,这些很简单,当我们学会了之后,以后上来创建表的时候,这些都是习惯性动作,我们上来就是int,接着varchar,30,40,我们随便给一个就完事了,但是varchar给1000行不行,它总是有上限的,是不是,你数字越大,当然空间浪费率就越高,数字越小也不能写成1,只能写一个字符,这样也不合适,写的差不多就行了,我们说表的设计或者说搭建一共就这么几块,咱们把表设计就能搞定了,好下面我们一个一个说,先说表的数据类型,也叫表字段类型;
(二)表设计之基本数据类型
2.1 三大类型
数值
int类型
- 哪些用整型,我们不要学多了,学的太复杂了,都没办法学下去了,比如说年龄,比如说id,咱们不用想,这肯定是整型,比如说性别男和女那肯定是字符串,比如说密码,不可能是纯数字是吧,可能会有其他的字母,那肯定也是字符串,字段的类型,我们说有Excel基础是不是理解起来都很简单,
float类型
字符串
日期
create table 表名(
列名 类型 是否可以为空,
列名 类型 是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
create table 表名(… …)为创建表的基本结构,某些资料讲创建表的时候也就到此为止了;
DEFAULT CHARSET=utf8 对表层级又设置了字符集,jakcy在前面创建库层级时,是不是也设置了字符集,这里大家注意在库中创建表也要对应的设置字符集;
ENGINE = InnoDB InnoDB是数据库引擎,那数据库
1.查看表
SHOW tables;
- jacky提示:在使用SHOW tables 之前,必须先选择数据库,否则将会报错
如何查看表的定义?
DESCRIBE 表名;
或
DESC 表名;
2.创建表
create table 表名(
列名 类型 是否可以为空,
列名 类型 是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
创建表的几种情况,DEFAULT CHARSET=utf8 对表级别又设置了相应的编码;ENGINE=InnoDB ,数据库引擎用的InnoDB,这也是用的比较多的,企业环境下用的比较多是因为它有一个最最重要的功能,就是支持事务;那什么是事务,什么是原子性操作,这也是我们面试的时候,被问的比较多的问题,这个我们在后面会详细来讲,这里大家只要知道InnoDB被企业广泛应用,是因为用它支持事务就可以了;
(1)是否可以为空,null表示空,非字符串
not null 不可空
null 可空
(2)默认值,创建列时可以指定默认值,当插入数据时如果没有主动设置,则自动添加默认值;
create table demo1(nid int not null defalut1,num int null)
- defalut 1 就是默认值等于1,不输入值的时候,默认值等于1;
(3)自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)
create table demo1(
nid int not null auto_increment primary key,
num int null)
在创建表的时候,我们的SQL语句里加上auto_increment primary key,就是表示列自增
create table demo1(
nid int not null auto_increment,
num int null,
index(nid))
jacky强调:
1) 对于自增列,必须是索引(含主键)
2) 对于自增可以设置步长和起始值
“`