mysql自動編號(主鍵自增):auto_increment
自動編號,必須與主鍵組合使用;預設情況,起始值為1,每次的增量為1
1.建立乙個主鍵自增的資料表tb2:create table tb2(id smallint unsigned auto_increment primary key,username varchar(20) not null);
2.檢視表的資料結構:show columns from tb2;
3.為部分字段賦值:insert tb2(username) values('tom');
insert tb2(username) values('john');
4.主鍵自增不用手動賦值
mysql主鍵約束:primary key
主鍵保證記錄的唯一性
主鍵自動為not null
每張資料表只能有乙個主鍵
在不設定主鍵自增的情況下,主鍵約束的字段可以賦值,但不可重複
mysql唯一約束:unique key
唯一約束可以保證記錄的唯一性
唯一約束的字段可以為 null
每張資料表可以存在多個唯一約束
建立id為主鍵自增,username為唯一約束的資料表:
create table tb3(id smallint unsigned auto_increment primary key,username varchar(20) not null unique key,age tinyint unsigned);
insert tb3(username,age) values('tom',22); --正確
insert tb3(username,age) values('tom',25); --錯誤
mysql預設約束:default
1.當插入資料時,如果沒有明確為字段賦值,則會自動賦予預設值
建立性別為預設約束的資料表:
mysql外來鍵約束:foreign key
1. 保持資料的一致性,完整性
2. 實現一對一 或 一對多 關係
3. 外來鍵約束的要求:
3.1 父表(子表參照的表)和子表(具有外來鍵列的表)必須使用相同的儲存引擎,並且禁止使用臨時表
3.2 資料表的儲存引擎只能為innodb
3.3 外來鍵列和參照列必須有相似的資料型別,其中數字的長度 或 是否有符號位 必須相同.而字元的長度可以不同.
3.4 外來鍵列和參照列必須建立索引,如果外來鍵列不存在索引,mysql將自動建立索引.參照列不存在索引,mysql不會建立索引.
4. 編寫資料表預設的儲存引擎:
mysql配置檔案:
default-storage-engine=innodb(預設的儲存引擎就是innodb)
5. 建立兩張資料表
5.1 父表:
create table provinces(id smallint unsignedauto_increment primary key,pname varchar(20) not null); --省份資料表
5.2 子表:
create table users(id smallint unsigned primary key auto_increment,username varchar(20) not null,pid bigint,foreign key (pid) references provinces (id));
--使用者資料表,外來鍵關聯省份表(報錯,不滿足 外來鍵約束的要求:數字的長度必須相同)
create table users(id smallint unsigned primary key auto_increment,username varchar(20) not null,pid smallint,foreign key (pid) references provinces (id));
--使用者資料表,外來鍵關聯省份表(報錯,不滿足 外來鍵約束的要求:是否有符號位必須相同)
create table users(id smallint unsigned primary key auto_increment,username varchar(20) not null,pid smallint unsigned,foreign key (pid) references provinces (id));
--使用者資料表,外來鍵關聯省份表(正確,滿足外來鍵約束的要求)
5.3 建立表是否存在索引:(主鍵在建立時,自動建立索引)
show indexes from provinces; --顯示索引
show indexes from provinces\g; --顯示索引,以列表形式呈現
6. 外來鍵約束的參照操作
6-1. cascade:從父表刪除或更新 且 自動刪除或更新子表中匹配的列
6-2. set null:從父表刪除或更新行,並設定子表中的外來鍵列為null.如果使用該選項,必須保證子表列沒有指定not null.
6-3. restrict:拒絕對父表的刪除或更新操作
create table user1(id smallint unsigned primary key auto_increment,username varchar(20) not null,pid smallint unsigned,foreign key (pid) references provinces (id) on update restrict on delete restrict);
delete from provinces where id=2;
#刪除父表失敗
6-4. no action:標準sql的關鍵字,在mysql中與restrict相同
mysql的表級約束和列級約束
1. 對乙個資料列建立的約束,稱為列級約束
2. 對多個資料列建立的約束,稱為表級約束
3. 列級約束既可以在列定義時宣告,也可以在列定義後宣告;表級約束只能在列定義後宣告。
注:not null,default 只有列級約束; primary key,unique key,foreign key 都可存在表級 或 列級 約束
Git入門與高階
什麼是git git 是 linux 發明者 linus 開發的 款新時代的版本控制系統,用於管理源 為什麼要管理源 為了防止源 丟失,本地 丟失 我的伺服器還有啊 大家同時開發專案相互不影響,需要發版本時可以將分別開發的 合併在一起 開發到一半,發現上線的版本有bug需要緊急修復 隨著功能越來越多...
mysql與php的連線 PHP 連線mysql
php 連線mysql mysqlhost localhost mysqluser root mysqlpass mysqldata mydata connect mysql connect mysqlhost,mysqluser,mysqlpass or die 錯誤 mysql error my...
mysql 高階特性的簡單入門
首先我們需要了解一下mysql的三大正規化 定義正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共...