MySQL數(shù)據(jù)庫(kù)常用約束條件
主鍵約束(primary key)
每個(gè)表中只能有一個(gè)主鍵;
主鍵值須非空不重復(fù);
可設(shè)置單字段主鍵,也可設(shè)置多字段聯(lián)合主鍵;
聯(lián)合主鍵中多個(gè)字段的取值完全相同時(shí),才違反主鍵約束
添加主鍵約束:列級(jí)添加主鍵約束:create table <表名> (<字段名1> <字段類型1> primary key,……<字段名n> <字段類型n>);
表級(jí)添加主鍵約束:create table <表名>(<字段名1> <字段類型1>,......<字段名n> <字段類型n>,[constraint 主鍵約束名] primary key(字段名1[,字段名2,...字段名n]));
唯一約束(unique)
指定字段的取值不能重復(fù),可以為空,但只能出現(xiàn)一個(gè)空值;
添加唯一約束:列級(jí)添加唯一約束:create table <表名> (<字段名1> <字段類型1> unique,……<字段名n> <字段類型n>);
表級(jí)添加唯一約束:create table <表名> (<字段名1> <字段類型1,……<字段名n> <字段類型n>,[constraint 唯一約束名] unique (字段名1[,字段名2...字段名n]));
自動(dòng)增長(zhǎng)列(auto_increment)
指定字段的取值自動(dòng)生成,默認(rèn)從1開(kāi)始,每增加一條記錄,該字段的取值會(huì)加1;
只適用于整數(shù)型,配合主鍵一起使用;
創(chuàng)建自動(dòng)增長(zhǎng)約束:create table <表名> (<字段名1> <字段類型1> primary key auto_increment,……<字段名n> <字段類型n>);
非空約束(not null)
字段的值不能為空;
創(chuàng)建非空約束:create table <表名> (<字段名1> <字段類型1> not null,……<字段名n> <字段類型n>);
默認(rèn)約束(default)
如果新插入一條記錄時(shí)沒(méi)有為該字段賦值,系統(tǒng)會(huì)自動(dòng)為這個(gè)字段賦值為默認(rèn)約束設(shè)定的值;
創(chuàng)建默認(rèn)約束:create table <表名> (<字段名1> <字段類型1> default value,……<字段名n> <字段類型n>);
外鍵約束(foreign key)
在一張表中執(zhí)行數(shù)據(jù)插入、更新、刪除等操作時(shí),DBMS都會(huì)跟另一張表進(jìn)行對(duì)照,避免不規(guī)范的操作,以確保數(shù)據(jù)存儲(chǔ)的完整性。
某一表中某字段的值依賴于另一張表中某字段的值;
主鍵所在的表為主表,外鍵所在的表為從表;
每一個(gè)外鍵值必須與另一個(gè)表中的主鍵值相對(duì)應(yīng);
創(chuàng)建外鍵約束:create table <表名> (<字段名1> <字段類型1>,……<字段名n> <字段類型n>,[constraint 外鍵約束名] foreign key(字段名) references <主表>(主鍵字段));
修改數(shù)據(jù)表
修改數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)
修改表名:alter table 原表名 rename 新表名;
修改字段名:alter table 表名 change 原字段名 新字段名 數(shù)據(jù)類型 [自增/非空/默認(rèn)] [字段位置];
修改字段類型:alter table 表名 modify 字段名 新數(shù)據(jù)類型 [自增/非空/默認(rèn)] [字段位置];
添加字段:alter table 表名 add 新字段名 數(shù)據(jù)類型;
修改字段的排列位置:
alter table 表名 modify 字段名 數(shù)據(jù)類型 first;
alter table 表名 modify 要排序的字段名 數(shù)據(jù)類型 after 參照字段;
刪除字段:alter table 表名 drop 字段名;
插入數(shù)據(jù)
字段名與字段值的數(shù)據(jù)類型、個(gè)數(shù)、順序必須一一對(duì)應(yīng)
指定字段名插入:
insert into 表名(字段名1[,字段名2,...]) values(字段值 1[,字段值 2,...]);
不指定字段名插入:
insert into 表名 values(字段值 1[,字段值 2,...]);
需要為表中每一個(gè)字段指定值,且值的順序須和數(shù)據(jù)表中字段順序相同
批量導(dǎo)入數(shù)據(jù):
(路徑中不能有中文,并且要將‘\’改為‘\\’或‘/’)
load data infile ‘文件路徑.csv’into table 表名[ fields terminated by ‘,' ignore 1 lines];
show variables like '%secure%';-- 查看安全路徑
更新數(shù)據(jù)
update 表名 set 字段名1=字段值1[, 字段名2=字段值2[,…]][ where 更新條件];
set sql_safe_updates=0; -- 設(shè)置數(shù)據(jù)庫(kù)安全權(quán)限,從而執(zhí)行批量操作
刪除數(shù)據(jù)
delete from 表名[ where 刪除條件];
truncate 表名;(與delete from 表名一樣,都是刪除表中全部數(shù)據(jù),保留表結(jié)構(gòu))
delete和truncate的區(qū)別:
delete可以添加where子句刪除表中部分?jǐn)?shù)據(jù),truncate只能刪除表中全部數(shù)據(jù)
delete刪除表中數(shù)據(jù)保留表結(jié)構(gòu),truncate直接把表刪除(drop table)然后再創(chuàng)建一張新表(create table),執(zhí)行速度比delete快。








暫無(wú)數(shù)據(jù)