@作者 Stone的博客 www.1314sl.com
----- 字段属性:
主键:primary key 主键 唯一约束;不能重复
在创建表的时候,在后面加 primary key 关键字
-- 追加主键
alter table 表名 modify 字段名 primary key
alter table 表名 add primary key(字段名);
--更新&删除主键
alter table 表名 drop primary key;
--主键分类
id int primary key comment '逻辑主键'
------ 自动增长
不给值或者给NULL的时候,会自动被系统+1操作
--自增长通常跟主键搭配
auto_increment
1.任何一个字段要做自增长前提是本身是一个索引(Key 拦有值)
2.必须是int型
3.一张表只能有一个自增长
default NUll 不给值 都会触动自增长
----列属性(修改自增长)
向下修改不生效
向上修改生效
alter table 表名 auto_increment = 值;
查看字增长变量
show variables like 'auto_increment%';
-- 修改自增长步长
set auto_increment_increment=5;--一次自增5
-- 删除自增长
字段的一个属性,可以通过 modify 进行修改(没有 auto_increment)
Alter table 表名 modify 字段 类型;
alter table 表 modify id int;
--查看 desc 表名
-- 列属性(唯一键)
unique key --唯一键
数据不能重复,可以有多个唯一,允许为空。
本质与主键差不多。
-- 增加唯一键
1.在创建表的时候,字段之后跟 unique / unique key;
2.在所有的字段之后。unique key(字段,字段);
not null unique key --PRI 表中又没有主键
3.在创建表之后增加唯一
alter table 表名 add unique key (字段);
--- 删除唯一键
先删除后新增
alter table 表名 drop unique key -- 错误的
alter table 表名 dropindex 索引名字;
--------索引
几乎所有的索引都是建立在字段之上
根据某种算法,将已有得数据(未来可能新增的数据)
--索引的意义
1.提示查询数据的效率
2.约束数据的有效性(唯一性等)
Mysql中提供了多种索引
主键:primary key
唯一: unique key
全文: fulltext index
普通: index
全文索引,最大的问题是如何确定关键字
英文很容易:单词与单词之间有空格
中文很难:没有空格,中文可以各种随意组合(分词:sphinx)
---------------- 关系
一对一
一对多(多对一)
多对多
sqlserver 主表 外表
---- 范式:减少数据冗余
1NF - 6NF
------- 1NF
第一范式:在设计表存储数据的时候,如果表中设计的字段存储的数据,在取出来使用之前
还血药额外的处理,不满足第一范式。
数据不需要再次拆封
-- 2NF
/*
不允许出现部分依赖
在输出舍得的过程中,如果有复合主键
且表中又字段并不是由整个主键来确定,
而是依赖主键中的某个字段,存在字段依赖的部分问题
称之为:部分依赖
*/
-- 3NF
不能出现传递依赖
--逆规范化
磁盘利用率与效率的对抗
就是增大空间,提高效率
-------------数据高级操作---------------------
数据操作:增删改查
新增:
insert into 表名【字段名】 values (值列表);
在数据插入的时候,假设主键对应的值已经存在,插入一定会失败!
-- 主键冲突
更新操作
insert into 表名【字段名】values(值列表) on dupllcate key update 字段=值;
替换
replace into 表名【字段名】values(值列表;
-------蠕虫复制
复制创建表(表结构)
create table 新表名 like 旧表名;
蠕虫复制:先查出数据,然后将查出的数据新增一遍
insert into 表名【字段列表】 select 字段列表 * from 数据表名(旧表)
-- 蠕虫复制 成倍增长
insert into 自己 select * from 自己;
意义:
1.从已有表拷贝数据到新表中
2.可以迅速的让表中的数据膨胀到一定的数量级。测试表的压力已经效率
---- 高级 更新数据
基本语法
update 表名 set 字段=值 |where 条件|
高级更新
update 表名 set 字段 =值 |where 条件| limit 更新数量|
-- 把表中的 a 变成 c
update 表 set 字段='c' where 字段='a' limit 3;
!!!GBK 不区分大小写。
---- 高级 删除数据 可以 通过 limit 来限制数量
delete from 表名【where 条件】【limit 数量】;
删除数据以后,自增长
思路:数据的删除是不会该表表结构,只能删除表后重建。
TRUNCATE 表名 -删除后,重置自增长
------- 高级 数据查询(select 选项)
基本语法:
select 字段列表 * from 表名 where 条件|
完整语法:
select 字段列表 * from 数据源 where 条件 group by
having order by limit;
All:默认的,保留所有的结果
Distinct : 去重,将重复的去掉
-- 字段别名
字段名 [as] 别名;
不写 as 也行
--- 数据源
/* 从一张表中取出一条记录,去另外一张表中匹配所有的记录
而且保留 记录数和字段数
这种结果为:笛卡尔积(交叉连接)
没什么用,尽量不用
*/
子查询:
select * from (select * from 表名);
-- 高级 where 子句
where 子句的目标用来判断数据,筛选数据
where 返回结果 0 或者 1 0 带表false 1带表true ;
运算符:
> 大于
< 小于
>= 大于等于
<= 小于等于
!= <> 不等于
= 等于
模糊查询里用到的:
like
between and
in / not in
逻辑运算符:
&&(and) 并
||(or) 或者
!(not) 非
rand 取得一个0和1之间的随机数
floor 向下取整!
1.
select * from 表 where id=1 || id=3 || id=5;
||
||
select * from 表 where id in(1,3,5);
2.
select * from 表 where height>=170 and heihgt<=180;
||
||
select * from 表 where height between 170 and 180;
--------------- Group by 分组----------------
聚合函数:
COUNT() :统计分组后的记录数,每一组有多少条记录
Max() :统计每组中最大的值
Min() :统计最小值
AVG() :统计平均值
SUM() : 统计和
select 聚合函数,字段名 from 表名 group by 字段名
多字段排序:
--order by 放在语句最后
select * from 表名 border by 字段名(desc/asc),
group_concat(字段)
回溯统计:with rollup
-- Having 子句
Having 字句 进行条件判断
having 能做 where 能做的几乎所有事情 但是where却不能
select 字段名 from 表名 group by 字段 having 条件
--- order by
select * from 表名 order by 字段 desc/asc;
-- limit 子句
limit 有两种使用方式。
只用来限制长度
------
length:每页显示的数量
Offset:offset-(页码-1)*每页显示数量
@作者 Stone的博客 www.1314sl.com
oneNate笔记@作者 Stone的博客 www.1314sl.com
网友评论