表的建立
常見的資料型別
數值型:
整型 tinyint、smallint、mediumint、int/integer、bigint
特點:1.如果不設定無符號還是有符號,預設是有符號,如果想設定無符號,需要新增unsigned關鍵字
2.如果插入的數值超出了正型的範圍,會報out of range異常,並且插入臨界值
3.如果不設定長度,會有預設的長度
長度代表了顯示的最大寬度,如果不夠會用0在左邊填充,但必須搭配zerofill使用!
小數型浮點型:float(m,d) double(m,d) 定點型:decimal(m,d)
特點:1.m:位數(整數部位+小數部位) d:(小數部位) 如果超過範圍,則插入臨界值
2.m和d都可以省略 如果是decimal,則m預設是10,d預設是0 如果是float和double,則會根據插入的數值的精度來決定精度
3.定點型的精度較高,如果要求插入的數值精度要求高如貨幣運算等則考慮使用
字元型char varchar text blob(較大的二進位制) enum(用於儲存列舉) set(用於儲存集合)
特點寫法
m的意思
特點空間的耗費
效率char
char(m)
最大的字元數,可以省略,預設為1
固定長度的字元
比較耗費
高varchar
varchar(m)
最大的字元數,不可以省略
可變長度的字元
比較節省
低日期型
date 只儲存日期time 只儲存時間year 只儲存年
datetime 儲存日期+時間(不受時區影響)timestamp 儲存日期+時間(受時區影響)
常見約束
not null 非空default 預設值primary key 主鍵unique 唯一foreign key 外來鍵check
列級約束:六大約束語法上都支援,但外來鍵約束沒有效果
表級約束:除了非空,預設,其他都支援
主鍵約束和唯一約束區別:
唯一性是否允許為空
可以有多個null
是否允許組合
primary key
最多有1個
√,但不推薦
unique
可以有多個
√,但不推薦
外來鍵特點:
1.要求在從表設定外來鍵關係
2.從表的外來鍵列的型別和主表的關聯列的型別要求一致或相容,名稱無要求
3.主表的關聯列必須是乙個key(一般是主鍵或唯一)
4.插入資料時,先插入主表,後插入從表;刪除資料時,先刪除從表,後刪除主表
#可以通過下面兩種方式刪除主表的記錄
#方式一:級聯刪除
alter table stuinfo add constraint fk_stu_major foreign key(majorid) references major(id) on delete cascade;
#方式二:級聯置空
alter table stuinfo add constraint fk_stu_major foreign key(majorid) references major(id) on set null;
標識列:
標識列又稱自增長列
特點:1.標識列必須和主鍵搭配嗎?不一定,但要求是乙個key
2.乙個表可以有幾個標識列?至多乙個
3.標識列的型別只能是數值型
4.標識列可以通過
show variables like '%auto_increment%'; 檢視標識列的設定值
set auto_increment_increment=3; 設定步長 1 4 7 10
create table if not exists 表名(
列名 列的型別(長度) 約束,
列名 列的型別(長度) 約束,
列名 列的型別(長度) 約束,
列名 列的型別(長度) 約束
create table students(
id int primary key auto_increment, #主鍵 自增
stuname varchar(20) not null, #非空
*** char(1),
age int default 18, #預設
seat int unique, #唯一
majorid int,
foreign key(majorid) references major(id) #外來鍵
表的修改
#修改表名
alter table 表名 rename to 新錶名;
#新增新列
alter table 表名 add column 列名 型別;
#修改列名
alter table 表名 change column 舊列名 新列名 型別;
#修改列的型別或約束
alter table 表名 modify column 列名 型別;
#刪除列
alter table 表名 drop column 列名;
表的刪除
drop table [if exists] 表名;
表的複製
#僅僅複製表的結構
create table 新錶名 like **表;
#複製表的結構和資料
create table 新錶名 select * from **表;
#只複製部分資料
create table 新錶名 select id,name from **表 where id>5;
#僅僅複製某些字段
create table 新錶名 select id,name from **表 where 0;
修改表時新增約束
新增列級約束
alter table 表名 modify column 列名 型別 約束;
新增表級約束
alter table 表名 add 【constraint 約束別名】 約束型別(欄位名) 【外來鍵的引用】;
#新增非空約束
alter table students modify column stuname varchar(20) not null;
#新增預設約束
alter table students modify column age int default 18;
#新增主鍵
#1.列級約束
alter table students modify column id int primary key;
#2.表級約束
alter table students add primary key(id)
#新增唯一約束
#1.列級約束
alter table students modify column seat int unique;
#2.表級約束
alter table students add unique(seat)
#新增外來鍵約束
alter table students add constraint major_id foreign key(majorid) references major(id);
修改表時刪除約束
#刪除非空約束
alter table students modify column stuname varchar(20) null;
#刪除預設約束
alter table students modify column age int;
#刪除主鍵
alter table students drop primary key;
#刪除唯一
alter table students drop index seat;
#刪除外來鍵約束
alter table students drop foreign key 約束別名;
裝置管理 裝置管理概述
i o裝置是作業系統龐大複雜的主要原因之一,不同外部裝置之間,速度差異很大,控制介面複雜,資料表示各異,與其它功能聯絡緊密,特別是檔案系統。在這種情況下,難以針對裝置做統一的規劃與設計。對i o裝置的直接控制,是通過特定的裝置控制器進行的,主機只需要對控制器進行操作即可,無需理會具體裝置的引數細節。...
裸裝置管理
裸裝置 raw device,就是不被作業系統直接管理的裝置。這種裝置少了作業系統一層,i o效率更高。資料庫一般會用到。常與lvm聯用。建立裸裝置 mkdir raw mknod dev rawctl c 162 0 mknod dev raw raw1 c 162 1 mknod dev raw...
linux裝置管理
linux 的裝置管理 6.1 裝置管理概述 linux 裝置的分類 linux 使用套介面 socket 以檔案i o 方式提供了對網路資料的訪問。裝置驅動程式 三 裝置的識別 而多個scsi 硬碟及其各個分割槽分別賦予次裝置號1 2 3 root localhost ls dev sda l b...