活动地址:CSDN21天学习挑战赛
1、 感受
感觉在学校学的基本上都忘得差不多了,一方面是在公司中基本上用不到,仅仅是相关数据表的增删改查,多表或单表操作。另一方面是百度实在是太方便了,基本上大部分的业务需求sql优化都能检索出来。无意间参加这个活动,感觉和大佬之间那是鸿沟。所以下定决心好好再学一次。(弥补不足)
2、mysql基本操作
mysql基本操作增删改查都可以直接通过 菜鸟教程 学习(这是一个学习网站,别看成菜鸟驿站这里不收发快递)。可以直接百度菜鸟教程,也可以点链接 菜鸟教程mysql
3、对我来说查缺补漏
3.1 拷贝表和复制表结构
- 拷贝表
create table table_name as select * from Source_table where 1=1;
- 复制表结构
create table table_name as select * from Source_table where 1 <> 1; (也可以1!=1)
3.2 int类型
原来int那么多类型
tinyint 占一个字节
smallint 占2个字节
mediumint 占3个字节
int 占4个字节
bigInt占8个字节
下图是该类型无符号和有符号所表示的数据范围
在设置类型int(M)例如int(4)这个M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度;当存储的字符长度小于M值时,只有在设置了zerofill用0来填充,才能够看到效果。
比如存入数值是4 并且设置zerofill用0来填充:会显示成0004
如果存入数值是12345,则直接显示12345不会有任何变化
3.3 索引
索引种类:普通索引,唯一索引,主键索引,全文索引
- 普通索引
MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。
create table if not exists tb1 (
studentNo CHAR(10) not NULL primary key ,
studentName VARCHAR(10) NOT null ,
INDEX idx_studentName(studentName)
) ENGINE=InnoDB ;
- 唯一索引
索引列中的值必须是唯一的,但是允许为空值。
create table if not exists tb1 (
studentNo CHAR(10) not NULL primary key ,
studentName VARCHAR(10) NOT null ,
constraint uq_class unique(studentName), 先添加唯一约束
UNIQUE INDEX idx_studentName(studentName)
) ENGINE=InnoDB ;
- 主键索引
索引列中的值必须是唯一的,不允许有空值
主键索引只能加在主键上创建方式和普通索引一样但是所加字段必须是主键
create table if not exists tb1 (
studentNo CHAR(10) not NULL primary key ,
studentName VARCHAR(10) NOT null ,
INDEX idx_studentName(studentNo) 必须加在studentNo上
) ENGINE=InnoDB ;
- 全文索引
只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引。 MyISAM和InnoDB中都可以使用全文索引。 - 引用IT邦德的 6.5中使用create index 语句创建基于字段值前缀字符的索引:
比如在t_course上建立一个索引,要求按照课程名称courseName字段值的前三个字符建立降序索引。
--函数要再加个括号
alter table tb_course add index idx_courseName1((left(courseName,3)) desc);
DROP INDEX idx_courseName1 on tb_course;
如果有一定基础,想深究看看下边这个链接
索引链接
3.4 约束
- 约束种类
非空约束(not null)
唯一性约束(unique)
主键约束(primary key) PK
外键约束(foreign key) FK
检查约束(目前MySQL不支持、Oracle支持) - 非空约束用途,业务场景中某些字段需要为空判断
create table table_name(
id int not null
)
- 唯一性约束用途,可以为null 同时业务中绑定唯一用户昵称,邮箱等
create table table_name(
id int UNIQUE
)
或者
表级约束
create table table_name(
id int(12) not null,
UNIQUE(id)
)
表级约束,可以给多个字段联合约束
联合约束,表示两个或者以上的字段同时和另一条记录相等,则报错
create table table_name(
id int(12) not null,
name varchar(20) not null,
unique(id,name)
)
- 主键约束
主键约束就是作为主键必须唯一而且不为空
单一主键:给一个字段添加主键约束
create table table_name(
id int primary key, 在创建字段时候直接加入关键字primary key
name varchar(30)
)
或者
create table table_name(
id int(10),
name varchar(30) not null,
constraint t_id_pk primary key(id)
);
复合主键:给多个字段联合添加一个主键约束(只能用表级定义)
create table table_name(
id int(10),
name varchar(30) not null,
email varchar(128) unique,
primary key(id,name)
);
- 外键约束
外键约束主要用来维护两个表之间数据的一致性