淺談Android中介面卡的notifyDataSetChanged()為何有時不重新整理
資料庫:
本質上就是一個檔案系統,通過標準的sql語句對資料進行增刪改查(curd)操作
資料庫型別:
關係型資料庫:
存放實體與實體間關係的資料庫,本質上為二維表(mysql、oracle、sql server、DB2)
非關係型資料庫:
存放的是物件(redis、No-sql、Hbase、MongodDB)
各大資料庫:
sql的分類:
DDL:資料定義語言
操作物件:資料庫和表
關鍵詞:create alter drop
操作資料庫:
建立:create database 資料庫名稱
刪除:drop database 資料庫名稱
常用命令:show databases;
操作表:
建立表:create table 表名(欄位描述,欄位描述);
欄位描述:
欄位名稱 欄位型別 [約束]
例:
create table user{
id int primary key auto_increment
username varchar(20)
};
修改表:alter table 表名 ...
修改表名:alter table 舊錶名 rename to 新表名;
例:alter table user1 rename to user10
新增欄位:alter table 表名 add[column] 欄位描述;
例:alter table user add password varchar(20)
修改欄位名:alter table 表名 change 欄位名稱 新欄位名稱
例:alter table user change password pwd varchar(20)
修改欄位描述:alter table 表名 modify 欄位名稱 欄位型別 [約束]
例:alter table user modify pwd int;
刪除欄位:alter table 表名 drop 欄位名
例:alter table user drop pwd;
刪除表:drop table 表名;
常用命令:
切換或進入資料庫:use 資料庫名稱
檢視當前資料庫下所有表:show tables
檢視當前表結構:desc 表名
檢視建表語句:show create table 表名
DML:資料操作語言
操作物件:記錄(行)
關鍵詞:insert update delete
插入:
格式1:insert into 表名 values(欄位值1,欄位值2,...,欄位n)
注意:預設插入全部欄位
必須保證values後面的內容的型別和順序和表結構中一致
若欄位型別為數字,可以省略引號
例:insert into user values(1,'tom');
格式2:insert into 表名(欄位名1,欄位名2)values(欄位值1,欄位值2);
注意:插入指定欄位
必須保證values後面的型別和順序和表名後面的欄位的型別和順序保持一致
修改:update 表名 set 欄位名=欄位值,欄位名1=欄位值1...(where條件)
例:update user set username='yisen' where username ='Yisen';
刪除:delete from 表名 [where條件];
例:delete from user where id=1;
DQL:資料查詢語言(非官方)
關鍵詞:select
格式:select ... from 表名 where 條件 group by 分組欄位 having 條件 order by 排序欄位 ase|desc
初始化環境:
-- 建立商品表
create table products(
pid int primary key auto_increment,
pname varchar(20),
price double,
pnum int,
cno int,
pdate timestamp
);
insert into products values (null,'泰國大榴蓮',98,12,1,null);
insert into products values (null,'新疆大棗',38,123,1,null);
insert into products values (null,'新疆切糕',68,50,2,null);
insert into products values (null,'十三香',10,200,3,null);
insert into products values (null,'老乾媽',20,180,3,null);
insert into products values (null,'豌豆黃',20,120,2,null);
練習:
簡單查詢:
練習:
1.查詢所有的商品
select * from products;
2.查詢商品名和商品價格.
-- 檢視指定的欄位
-- 格式: select 欄位名1,欄位名2 from 表名
select pname,price from products;
3.查詢所有商品都有那些價格.
-- 去重操作 distinct
-- 格式: select distinct 欄位名,欄位名2 from 表名
select price from products;
select distinct price from products;
4.將所有商品的價格+10元進行顯示.(別名)
-- 可以在查詢的結果之上進行運算,不影響資料庫中的值
-- 給列起別名 格式: 欄位名 [as] 別名
select price+10 from products;
select price+10 新價格 from products;
select price+10 '新價格' from products;
select price+10 新 價 格 from products;-- 錯誤
select price+10 '新 價 格' from products;
select price+10 `新 價 格` from products;
條件查詢:
練習:
1.查詢商品名稱為十三香的商品所有資訊:
select * from products where pname = '十三香';
2.查詢商品價格>60元的所有的商品資訊:
select * from products where price>60;
3.查詢商品名稱中包含”新”的商品
-- 模糊匹配
-- 格式: 欄位名 like "匹配規則";
-- 匹配內容 %
"龍" 值為龍
"%龍" 值以"龍"結尾
"龍%" 值以"龍"開頭
"%龍%" 值包含"龍"
-- 匹配個數 "__" 佔兩個位置
select * from products where pname like "%新%";
4.查詢價格為38,68,98的商品
select * from products where price = 38 or price = 68 or price=98;
select * from products where price in(38,68,98);
where後的條件寫法:
* > ,<,=,>=,<=,<>,!=
* like 使用佔位符 _ 和 % _代表一個字元 %代表任意個字元.
* select * from product where pname like '%新%';
* in在某個範圍中獲得值.
* select * from product where pid in (2,5,8);
* between 較小值 and 較大值
select * from products where price between 50 and 70;
排序查詢:
1.查詢所有的商品,按價格進行排序.(asc-升序,desc-降序)
select * from products order by price desc;
2.查詢名稱有新的商品的資訊並且按價格降序排序.
select * from products where pname like '%新%' order by price desc;
聚合函式:
對一列進行計算 返回值是一個,忽略null值
* sum(),avg(),max(),min(),count();
1.獲得所有商品的價格的總和:
select sum(price) from products;
2.獲得商品表中價格的平均數:
select avg(price) from products;
-- round(值,保留小數位)
select round(avg(price),2) from products;
3.獲得商品表中有多少條記錄:
select count(*) from products;
分組:使用group by
1.根據cno欄位分組,分組後統計商品的個數.
select cno,count(*) from products group by cno;
2.根據cno分組,分組統計每組商品的總數量,並且總數量> 200;
select cno,sum(pnum) from products group by cno;
select cno,sum(pnum) from products group by cno having sum(pnum)>200;
注意:
where和having區別:
1.where 是對分組前的資料進行過濾 ;having 是對分組後的資料進行過濾
2.where 後面不能使用聚合函式,having可以
資料型別:
約束:
作用:為了保證資料的有效性和完整性
mysql常用的約束:主鍵約束(primary key) 唯一約束(unique) 非空約束(not null) 外來鍵約束(foreign key)
主鍵約束:被修飾過的欄位唯一非空
注意:一張表只能由一個主鍵,這個主鍵可以包含多個欄位
方式1:建表的同時新增約束 格式:欄位名稱 欄位型別 primary key
方式2:建表的同時在約束區域新增約束
所有欄位宣告完成後就是約束區域 格式:primary key(欄位1,欄位2)
方式3:建表後,通過修改表結構新增約束
唯一約束:
被修飾過的欄位唯一,對null不起作用
方式1:建表的同時新增約束 格式: 欄位名稱 欄位型別 unique
方式2:建表的同時在約束區域新增約束
所有的欄位聲名完成後就是約束區域:unique(欄位1,欄位2)
方式3:建表之後,通過修改表結構新增約束
非空約束:
特點:被修飾過的欄位非空
方式:
truncate 清空表:
格式:
truncate 表名;幹掉表,重新建立一張新表
和delete from 區別
delete屬於DML語句 truncate屬於DDL語句
delete逐條刪除 truncate幹掉表,重新建立一張空表
auto_increment 自增:
要求:1.被修飾的欄位累心支援自增。一般為int
2.被修飾的欄位必須是一個key 一般是primary key
DCL:資料控制語言
操作物件: 使用者 事務 許可權