創建數據表:create table 數據表名 1.創建表規範 create table( 列名 數據類型 是否為空 自動排序/預設值 主鍵/外鍵/唯一鍵, 列名 數據類型 是否為空 預設值 外鍵/唯一鍵 ) ENGINE=InnoDB default charset=utf8; 數據類型不用再說了 ...
創建數據表:create table 數據表名
1.創建表規範
create table(
列名 數據類型 是否為空 自動排序/預設值 主鍵/外鍵/唯一鍵,
列名 數據類型 是否為空 預設值 外鍵/唯一鍵
) ENGINE=InnoDB default charset=utf8;
強制創建資料庫:create database if not exists 資料庫名;
數據類型不用再說了
是否為空 not null/null
- not null:表示不能為空
- null:表示可以為空
預設值 default
default XX:表示此列的數據預設為XX
自動排序 auto_increment:表示根據列插入數據的先後順序自動排序
註意:自動排序和預設值不能同時設定在一個列上,並且自動排序必須是主鍵/唯一鍵其中一個
主鍵:primary key
一張表只能有一個主鍵,主鍵是唯一不重覆,並且不能為null,所以一般直接把自動排序列設置為主鍵
唯一鍵:unique key
唯一鍵,顧名思義,唯一不重覆,但可以為null,但一張表可以有多個唯一鍵
外鍵:foreign key
如果一張表中有一個非主鍵的欄位指向了別一張表中的主鍵,就將該欄位叫做外鍵。
一張表中可以有多個外鍵,用於將當前表以設定的該列聯繫其他數據表
1)創建外鍵
首先需要兩張表,先創建一個part部門表,此時的部門表暫且認定為主表
插入一些數據得:
再創建一個user員工表,此時的員工表設定為從表,在創建員工表時,把part_id作為foreign key,以此作為部門表的聯繫。
註意:外鍵設置都設置在從表上,子表(從表)的外鍵必須和父表(主表)的關聯主鍵類型一致,不然報錯
插入數據,如果插入的數據不在外鍵約束好的數據內,則會報錯:
這就是外鍵的功效。具體在什麼時候使用呢?就是在表與表之間有聯繫且不能有差異時,可以使用外鍵
2)刪除外鍵:先刪除外鍵名,再刪外鍵欄位
3)刪除帶有外鍵的數據表:先刪除從表,再刪除主表
4)外鍵約束操作:
cascade創建:當父表的id某欄位刪除時,子表也跟著刪除
mysql> create table users1( -> id smallint unsigned primary key auto_increment, -> username varchar(20) not null, -> pid smallint unsigned, -> foreign key (pid) references provinces(id) on delete cascade #依據provinces表的外鍵約束方式cascade
5)約束:
主鍵,唯一鍵,外鍵,預設值的功效都是約束的作用
ENGINE
就是資料庫引擎,mysql預設支持的數據引擎:INNODB,BERKLEY,ISAM,MYISAM,HEAP
最常用的就InnoDB和Myisam
- Myisam:支持全文索引,查詢數據時老快了
- Innodb:支持事物,原子性操作
原子性操作:設置和修改數據只有兩種結果,要嘛成功要嘛不成功,設置中途如果出錯,所有相關數據會回滾到之前未操作的狀態
default charset = utf8:創建表時設定此表的字元編碼為utf8
查看當期數據表的編碼等信息:show create table 表名;/show full columns from 表名;
2.範例
1)一般創建法
2)也可以設置好後在後面插入,並且主鍵可以設置複合鍵,處的id和name複合在一起同屬一個主鍵
註意:在創建表時最後一行不加逗號,不然報錯
插入數據:
註意:當設置有自動排序時,插入數據不需要再給定列名和數據,它會自動生成
3.刪除數據表:drop table 數據表名
4.查看數據
1)數據表信息:show columns from 數據表名;
2)查看表數據:select × from 表名;
如果數據很多,加上‘\G’表示以網格的形態呈現索引:
5.修改表:alter table 數據表名
1).添加
1)添加列: alter table 表名 add 列名 數據類型;
2)添加主鍵:alter table 表名 add primary key(列名);
3)添加外鍵:alter table 表名 add constraint 外鍵名稱(隨意,註意顧名思義) foreign key 從表(外鍵欄位) references 主表(主鍵欄位)
4)修改資料庫編碼:alter database 庫名 character set=utf8;
5)修改數據表編碼:alter table 表名 charset= utf8;
2).重設
1)重設預設值:alter table 表名 alter 欄位 set default 值;
2)重設列:
alter table 表名 modify column 列名 類型; -- 類型
alter table 表名 change 原列名 新列名 類型; -- 列名,類型
註意:當把數據類型由大類型改為小類型,有可能數據會丟失
3).刪除
1)刪除列:alter table 表名 drop 列名
2)刪除多列:aler table 表名 drop 列名,列名,列名
3)刪除外鍵:alter table 表名 modify 列名
4)刪除預設值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
5)刪除的同時新增一列:註意用逗號隔開就行
6)刪除主鍵:
註意:一個表只能有個一個主鍵,所以刪除主鍵時可以不用給列名。
修改列名時,如果列名是主鍵約束並且自動排列,直接修改會報錯:
原因在於mysql不能單獨定義兩個主鍵
正確步驟:
a.先刪除自增長(此時可以改名)
b.再刪除主鍵:
c.再重新設置列定義:
此時的unsigned表示無符號的意思,也就是非負數,只用於整型
6.更新數據:updata table 表名 set 列名 = 值
表數據操作
1.清空表數據:
- delete from 數據表名,逐條刪除(速度較慢)
- truncate table 數據表名,整體刪除(速度較快)
- DELETE FROM 數據表名 WHERE……,刪除某一列滿足條件的數據
2.對錶數據增刪改查:
1)增:
insert
into
表 (列名,列名...)
values
(值,值,值...)【插入單條數據】
insert
into
表 (列名,列名...)
values
(值,值,值...),(值,值,值...)【插入多條數據】
insert
into
表 (列名,列名...)
select
(列名,列名...)
from
表【把查詢到的其他表數據插入】
2)刪:
delete
from
表【刪除/清空數據】
delete
from
表
where
id=1
and
name
=
'欄位' 【刪除某一段符合條件的數據】
3)改:
update
表
set
列名與欄位關係(如name ='test')
where
列名與欄位關係(如id >4)
4)查:
select
*
from
表【查詢表的所有數據】
select
*
from
表
where
... 【查詢滿足條件的欄位數據】
select
列名
as
..
from
表 ... 【查詢滿足條件的表中所有數據】
5)其他:
a、條件 where
select
*
from
表
where
id > 1
and
name
!=
'alex'
and
num = 12;
select
*
from
表
where
id
between
5
and
16;
select
*
from
表
where
id
in
(11,22,33)
select
*
from
表
where
id
not
in
(11,22,33)
select
*
from
表
where
id
in
(
select
nid
from
表)
b、通配符
*
select
*
from
表
where
name
like
'ale%'
- ale開頭的所有(多個字元串)
select
*
from
表
where
name
like
'ale_'
- ale開頭的所有(一個字元)
c、限制 limit
limit參數是從0開始計數
select
*
from
表 limit 5; - 前5行
select
*
from
表 limit 4,5; - 從第4行開始的5行
select
*
from
表 limit 5 offset 4 - 從第4行開始的5行
d、排序 order by
asc 小到大
desc 大到小
select
*
from
表
order
by
列
asc
- 根據 “列” 從小到大排列
select
*
from
表
order
by
列
desc
- 根據 “列” 從大到小排列
select
*
from
表
order
by
列1
desc
,列2
asc
- 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序
e、分組
group by /having
使用having,必須保證分組條件為聚合函數或者這個欄位必須出現在當前select語句中
聚合函數:max,min,average,sum,count等永遠只有一個返回結果的函數
select
num
from
表
group
by
num
select
num,nid
from
表
group
by
num,nid
select
num,nid
from
表
where
nid > 10
group
by
num,nid
order
nid
desc
select
num,nid,
count
(*),
sum
(score),
max
(score),
min
(score)
from
表
group
by
num,nid
select
num
from
表
group
by
num
having
max
(id) > 10
特別的:
group
by
必須在
where
之後,
order
by
之前
f、連表
無對應關係則不顯示
select
A.num, A.
name
, B.
name
from
A,B
Where
A.nid = B.nid
無對應關係則不顯示
select
A.num, A.
name
, B.
name
from
A
inner
join
B
on
A.nid = B.nid
A表所有顯示,如果B中無對應關係,則值為
null
select
A.num, A.
name
, B.
name
from
A
left
join
B
on
A.nid = B.nid
B表所有顯示,如果B中無對應關係,則值為
null
select
A.num, A.
name
, B.
name
from
A
right
join
B
on
A.nid = B.nid
g、組合
組合,自動處理重合
select
nickname
from
A
union
select
name
from
B
組合,不處理重合
select
nickname
from
A
union
all
select
name
from
B
6.使用any,some,all,in,not in,exists,not exists關鍵詞操作
使用any參數:
7.mysql也支持比較運算符
參考自:http://www.cnblogs.com/wupeiqi/articles/5713315.html