@作者 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