約束:
目的:使得資料更完整,更準確。
實體完整性、域的完整性、引用完整性、使用者自定義完整性
一、約束的分類:
1.鍵約束
(1)主鍵約束:primary key
(2)唯一鍵約束:unique
(3)外來鍵約束:foreign key
2.非空約束: not null
3.預設值約束:default
4.自增約束:auto_increment
5.檢查約束(mysql暫時沒有)
二、使用約束
主鍵約束:
關鍵字:primary key
特點:增加主鍵約束的列的值必須唯一且非空。
作用:保證表中不會出現兩條無法區分的記錄。
要求:每一張表都必須有主鍵約束。
分類:單列主鍵約束,復合主鍵約束。
1.建立主鍵約束
(1)在建表時指定主鍵約束。
create table【資料庫名.】user(
欄位名1 資料型別 primary key,
欄位名2 資料型別,
欄位名3 資料型別,
欄位名4 資料型別);或
create table【資料庫名.】user(
欄位名1 資料型別,
欄位名2 資料型別,
欄位名3 資料型別,
欄位名4 資料型別,
primary key(id)
);(2)建表後增加主鍵
alert table dept add primary key(id);
2.刪除主鍵約束
alert table 表名稱 drop primary key;
3.復合主鍵:
(1)建表時
create table【資料庫名.】user(
欄位名1 資料型別,
欄位名2 資料型別,
欄位名3 資料型別,
欄位名4 資料型別,
primary key(字段列表1,字段列表2)
);復合主鍵不能在列後面加,需要單獨指定
(2)建表後:alter table 表名稱 add primary key(字段列表1,字段列表2);非空和預設值約束
建表時:not null 非空、default 『男』 預設值、unique唯一
建表後:alert table 表名 modify 字段()unique key not null;
去掉非空表結構:alert table 表名 modify 字段()
自增約束:
關鍵字:auto_increment
特點: 1.乙個表必須只有乙個自增列
2.必須是整型
3.必須是鍵列,例如:主鍵,唯一鍵
指定自增(和非空唯一一樣)
自增指定沒用。
外來鍵約束:
外來鍵約束不是必須的。資料量比較大的時候,不建議在資料庫層面設計外來鍵,因為這樣效率低。把資料約束放在**層面。
關鍵字:foreign key
特點: 1.需要兩張表,或者一張表虛擬成兩張表。
2.兩張表分為主表和從表,外來鍵的建立在從表上建立的。
3.被參考的表稱為主表,主表的被參考列必須是逐漸或唯一鍵。
4.乙個表可以有多個外來鍵。
如何指定外來鍵:
create table emp(
eid int not null ,
emane not null,
deptid int,
foreign key(deptid從表外來鍵列) references 主表名(did)
);先建主表,再建從表;先刪從表,再刪主表。
例如:2號部門被員工引用了,那麼2號部門不能被刪除,並且,2這個編號不能被修改。
foreign key(deptid從表外來鍵列) references 主表名(did主表被參考列)【on update cascade】修改級聯【on delete cascade】刪除級聯 (刪除乙個,全部刪除)
級聯置空:【on update set null】
建表後指定外來鍵:
alert table 從表名稱 add foreign key(從表字段) references 主表名(主表被參考的列名);
同一張表,自引用(和前面一樣)
如何刪除外來鍵:alert table 從表名稱 drop foreign key 外來鍵約束名;
如何檢視外來鍵約束名:select * from information_schema.table_constraints where table_name =『表名稱』;
運算子一、算數運算子:
加 +
減 -
乘 *
除 /(精確)或div(只保留整數部分)
模 %或mod(這兩個沒區別)
二、比較運算子:>
<
>=
<=
=不等於:!= 或 <>
安全等於:<=>用於判斷null
三、邏輯運算子與 && 或 and(沒有短路與和與的區別)
或 || 或 or
非 ! 或 not
四、區間範圍和集合運算子between *** and yyy
not between *** and yyy
in(值列表)
not in(值列表)
五、模糊查詢_:乙個字元
%:任意多個字元
查詢名字第二個字是「冰」
select * from emp where name like '_冰%';
六、關聯查詢
1、內連線 inner join
2、外連線
(1)左外連線 left join
(2)右外連線 right join
(3)全外連線 full join mysql不支援
必須有兩張或兩張以上表
關聯查詢的結果一共七種
1.a∩b
內連線2.a
3.a-a∩b
左連線4.b
5.b-a∩b
右連線6.a∪b
7.a∪b-a∩b
應該用全連線,現在用union
內連線(1)select 欄位名 from a表 inner join b表 on 關聯條件【where 其他篩選條件】
如果不寫關聯條件,會出現笛卡爾積的現象
關聯條件的個數=n-1,n 就是表的個數
(2)select 欄位名 from a表,b表 where 關聯條件
左連線(1)select 欄位名 from a表 left join b表 on 關聯條件【where 其他篩選條件】
右連線(1)select 欄位名 from a表 right join b表 on 關聯條件【where 其他篩選條件】
union 實現全連線效果
select 欄位名 from a表 left join b表 on 關聯條件【where 其他篩選條件】
union
select 欄位名 from a表 right join b表 on 關聯條件【where 其他篩選條件】
自連線:一張表當兩張錶用(取表別名)表別名不能加「」
mysql運算子,比較運算子
我也是菜鳥,也是新手,一起學習,一起進步,加油 首先 比較運算子,進行比較之後的 結果如果為真 返回1,結果為假 返回 0 一下為常用的,最基礎的一些沒有列出來 或 不等於 null 的安全等於 null safe between 存在於指定範圍 in存在於指定集合 is null 為 null i...
表單查詢 約束 運算子
1.dual表常用在沒有查詢目標的select語句塊中,它只包含一行資料 查詢當前日期 select sysdate from dual 在當前日期的基礎上加3天 select sysdate 3 from dual 2.約束,保證資料的完整性 約束分類 1.primary key 2.unique...
mysql 運算子轉義 mysql常用運算子
一 算數運算子 加法 減法 乘法 除法 返回餘數 二 比較運算子 等於 或 不等於 等於 這裡是安全的等於 例如 select null null 結果是1,如果是select null null 結果是null,有時候會報錯程式 between 存在於指定範圍 舉例 select 10 betwe...