1. 程式人生 > >MySQL Table操作和增刪改記錄

MySQL Table操作和增刪改記錄

DDL(Data Definition Language)資料庫定義語言:主要作用是對資料庫和表的管理,

查是屬於DQL(Data Query Language ,資料查詢語言)部分

增、改、刪屬於DML(Data Manipulation Language, 資料操縱語言)

一、表的管理:

1、建立表:
語法:
create table 表名(
    欄位名 資料型別【(資料的長度) 約束】,
    欄位名 資料型別【(資料的長度) 約束】,
    欄位名 資料型別【(資料的長度) 約束】,
    ......     #最後一個不需要逗號
);

MySQL資料庫中的常用資料型別:
數值型,字元型,日期時間型別

1)數值型

    

     

整數
1.設定無符號和有符號 unsigned
t1 int;    # 預設有符號
t2 int unsigned # 無符號
2. 插入的數值超出了範圍,會溢位報錯,真正進去的數值是臨界值
3. zerofill 零填充 
t1 int(6) zerofill ;
作用是實際值達不到定義長度時,前面用0補足

小數
1. 浮點型:float(M,D) double(M,D);
2. 定點型:decimal(M,D);
        M表示整數部分和小數部分合起來的總位數
        D表示小數點後保留位數


3. 不設定後面的M和D值,float和double會根據插入的實際值來確定精
度,decimal預設(10,0)表示總體10位數,小數位是0;
4. 如果要求小數點後的高精度需求的時候,建議用decimal

2)字元型

    

    blob型別,用來存放較大的二進位制檔案,比如圖片
    char(M)和varchar(M),裡邊的M值:表示能存到表格裡的最大字元數
    char和varchar的區別
       char給的空間是固定的,char效率高
       varchar根據實際情況給儲存的空間,varchar效率低

3)日期時間型別

    

    日期型的數值要用單引號包裹起來
    timestamp時間戳會受到時區的影響:set time_zone='+9:00'; #設定時區

create table student(
	no int(11) primary key AUTO_INCREMENT,(約束:非空主鍵 自增長)
	name varchar(20),
	age varchar(1) not null default 20
);

2、表的修改:
1)修改欄位名
     ALTER TABLE 表名 CHANGE 原列名 新列名 資料型別(長度);

2)修改欄位的資料型別或約束
     ALTER TABLE 表名 MODIFY 列名 新型別(長度);

3)新增新欄位
     ALTER TABLE 表名 ADD 列名 型別(長度);
或者同時新增多列
     ALTER TABLE 表名
     ADD(
    列名 型別(長度),
    ...
    列名 型別(長度)    # 最後一個不需要逗號
    );

4)刪除欄位
     ALTER TABLE 表名 DROP COLUMN 列名;

5)修改表名
     ALTER TABLE 表名 RENAME TO 新表名;

3、表的刪除
語法:
drop table if exists 表名; 


4、表的複製
1)僅複製表的結構
     create table 新建表名 like 要被複制的表名;

2)複製表的結構和資料
     create table 新建表名
     select * from 要被複制的表名;

3)只複製表結構和部分資料
     create table 新建表名
     select * from 要被複制的表名 where 條件;

4)只複製部分欄位,且不要資料
     create table 新建表名
     select 需要的列 from 要被複制的表名 where 0;

 

 

 

 

二、新增記錄

語法一:
insert into 表名(欄位1,欄位2,...) values (對應欄位1的值,對應欄位2點值,...) ;

注意:
1)insert記錄時候要保持插入的記錄值型別和表結構設計的型別一致,除了數字型別外,字串型varchar和日期型別datetime等都需要用單引號包裹起來
2)不可為空的欄位必須插入記錄值,可以為null的列在插入的時候可以不寫
3)欄位列表和values後面的值必須前後一一對應(內容一致,數量一致,資料型別一致)

語法二(瞭解):
insert into 表名
set 欄位名1=值,欄位名2=值,...;

比較兩種語法:
1)語法一可以次性插入多條記錄值,語法二不支援
insert into 
     表名(欄位1,欄位2,...) 
values 
     (對應欄位1的值,對應欄位2點值,...),
     (對應欄位1的值,對應欄位2點值,...),
     (...) ;

2)語法一可以支援子查詢,語法二不支援
insert into 
     表名(欄位1,欄位2,...) 
select 
     對應欄位1的值,對應欄位2點值,...
from 表名
where 條件 ;

 

三、修改記錄

1)修改單表記錄
語法:
update 表名 set 欄位名1=新的值, 欄位名2=新值 , ... where 條件 ;

2)修改多表記錄
語法:
update 表1 別名,表2 別名
set 欄位1=值 , ...
where 連線條件 and 篩選條件;

或者
update 表1 別名
[連線型別] join 表2 別名
on 連線條件
set 欄位1=值 , ...
where 篩選條件;

案例:修改沒有年齡記錄的同學的對應年齡的編號都為3

update students s
left join ages a
on s.age_id=a.id
set s.age_id=3
where a.age is null;

四、刪除記錄

1)單表的刪除
語法:
delete from 表名 where 要刪除的記錄篩選條件;

2)多表的刪除
語法:
delete 別名1,別名2
from 表1 別名1,表2 別名2
where 連線條件 and 篩選條件 ;

或者
delete 別名1,別名2
from 表1 別名1
[連線型別] join 表2 別名2
on 連線條件
where 篩選條件 ;

注意:如果只刪表1的就只寫別名1,如果兩個表的記錄都刪就別名1,別名2)

3)刪除整個表的全部記錄,保留表的結構
delete from 表名;
或者
truncate table 表名;

delete和truncate區別:
1)delete可以加where條件
2)truncate刪除沒有返回值,delete刪除有返回值
3)truncate刪除不能回滾,delete刪除可以回滾
4)假如要刪除的表上有自增長欄位,如果用delete刪除,再插入資料,自增長從斷點值開始,用truncate刪除,再插入資料,從1開始;
5)truncate效率高

案例:刪除李斯的年齡資訊

delete a from students s
inner join ages a
on s.age_id = a.id
where s.name='李斯';

知識點整理