一、表管理
1.建庫
語法:
create database if not exists 數據庫名;
命名規則:
僅可使用數字、字母、下劃線、不能純數字;區分字母大小寫;具有唯一性;不可使用MySQL命令或特殊字符。
相關命令:
show databases; #查看庫
use 庫名; #使用庫
select database(); #查看所在的庫
drop database if exists 庫名; #刪除庫
2.建表
建表語法:
create table 庫名.表名(表頭名1 數據類型,表頭名2 數據類型...);
相關命令:
show tables; #顯示已有的表
desc 庫名.表名; #查看表頭
select * from 庫名.表名; #查看表記錄
drop table 庫名.表名; #刪除表
3.修改表
語法格式:
alter table 庫.表 操作命令;
修改表名
alter table 庫名.表名 rename 庫名.新表名;
刪除表頭
alter table 庫名.表名 drop 表頭名;
添加表頭
alter table 庫名.表名 add 表頭名 數據類型; #默認添加在末尾
alter table 庫名.表名 add 表頭名 數據類型 first; #添加在首位
alter table 庫名.表名 add 表頭名 數據類型 after 表頭名; #添加在指定表頭名下方
修改表頭數據類型
alter table 庫名.表名 modify 表頭名 新數據類型;
修改表頭名
alter table 庫名.表名 change 表頭名 新表頭名 數據類型;
4.復制表
語法格式:
create table 庫名.表名 select 列名 from 庫名.表名 [where 條件]; #復制表結構及數據
create table 庫名.表名 like 庫名.表名; #僅復制表結構
二、數據類型
MySQL提供了豐富的數據類型,主要分為三大類:數值類型、枚舉類型、日期類型和字符串類型。
1.數值類型
整數類型:tinyint、smallint、mediumint、int、bigint。
示例:
create table users (id int ,age tinyint,views bigint
);
浮點數類型:float、double、decimal。
示例:
create table products(price decimal(6,2),weight float,ratio double
);
2.枚舉類型
enum類型,字段值僅能在范圍內選1個值;set類型,字段值能在范圍內選取1個或多個值。
示例:
create table 庫名.表名(字段名 enum(選項1,選項2,選項3...),字段名 set(選項1,選項2,選項3...)
);
3.日期時間類型
date僅日期、time僅時間、datetime日期時間、timestamp時間戳、year年份。
示例:
create table events (evnet_date date,start_time time,created_at timestamp,full_datetime datetime
);
4.字符串類型
char定長字符串、varchar變長字符串、tinytext短文本、text長文本內容、mediumtext中等長度文本、longtext超長文本。
示例:
create table articles (title varchar(50),content text,image mediumblob,hash char(32)
);
三、數據批量處理
1.數據導入
語法格式:
load data infile "/目錄名/文件名" info table 庫名.表名 fields terminated by "分隔符" lines terminated by "\n";
2.數據導出
select命令 into outfile "/目錄名/文件名" fields terminated by "分隔符" lines terminated by "\n";
四、表頭約束
表頭約束是數據庫管理系統中的關鍵機制,用于在列級別確保數據完整性和一致性,通過定義數據必須滿足的條件和規則來實現。
1.約束分類
not null:非空約束,確保該字段值不能為空。
default:默認值設置,當未指定該字段值時自動填充默認值。
unique:唯一約束,保證該字段值在整個表中具有唯一性,允許為空值。
primary key:主鍵約束,兼有唯一性和非空性,作為表的唯一標識。
foreign key:外鍵約束,用于建立表間關聯關系,確保從表字段值必須引用主表對應字段值。
2.基本約束
not null:不允許賦空值。
create table test.stu(name char(10) not null,class char(7) null
);
default:不給表頭賦值時,使用默認賦值。
create table test.stu(name char(10) not null,class char(10) null default "sql"
);
unique:表頭的值不允許重復
create table test.stu(name char(10) not null,class char(10) null default "sql",phone char(11),unique(phone)
);
3.高級約束
(1)主鍵(primary key)
主鍵字段必須滿足非空且唯一的要求。每個表只能定義一個主鍵,但可以由多個字段組成復合主鍵。復合主鍵需要同時創建和刪除,在系統中會顯示為PRI標志。通常建議將主鍵字段設置為自增屬性,并選擇能夠唯一標識表中記錄的字段作為主鍵。
主鍵創建語法格式:
#格式一
create table 庫.表(
表頭名 數據類型 primary key ,
表頭名 數據類型 ,
..... );
#格式二
create table 庫.表(
表頭名 數據類型 ,
.....
primary key(字段名)
);
刪除主鍵語法格式:
alter table 庫名.表名 drop primary key;
添加主鍵語法格式:
alter table 庫名.表名 add primary key(表頭名);
復合主鍵語法格式:
create table 庫.表(
表頭名 數據類型 ,
.....
primary key(字段名列表)
);
與auto_increment連用
create table 庫.表(
表頭名 數據類型 primary key auto_increment,
表頭名 數據類型 ,
..... );
(2)外鍵(foreign key)
表存儲引擎必須使用InnoDB,各列的數據類型需保持一致,被參照的列必須是索引類型之一(如主鍵primary key)。
創建外鍵語法格式:
create table 庫.表(
表頭列表 ,
foreign key(表頭名) #指定外鍵
references 庫.表(表頭名) #指定參考的表頭名
on update cascade #同步更新
on delete cascade #同步刪除
)engine=innodb;
刪除外鍵語法格式:
alter table 庫名.表名 drop FOREIGN KEY 外鍵名;
添加外鍵語法格式:
alter table db1.gz add foreign key(字段名) references 庫名.表名(字段名) on update cascade on delete cascade ;
五、MySQL索引
MySQL 索引是一種用于提升查詢效率的關鍵數據庫機制,其作用類似于書籍的目錄,能夠幫助數據庫快速檢索數據。在單個數據表中可以創建多個索引。索引可以應用于任何數據類型的字段,允許字段值重復或為NULL值。通常建議在WHERE子句查詢條件涉及的字段上創建索引,在MySQL中這些索引會被標記為MUL。
1.索引分類
普通索引:適用于任何數據類型的索引,無附加條件限制,僅用于提升查詢效率,允許重復值和NULL值。
唯一索引:通過unique參數創建的索引,要求索引值必須唯一,但允許存在NULL值。
全文索引:專為文本搜索設計的索引類型,支持自然語言搜索和布爾搜索功能。
單列索引:基于單個字段構建的索引結構。
多列索引:在表的多個列上創建的復合索引,查詢時可通過這些字段組合來提高檢索效率。
2.索引的優點
優化查詢性能,降低數據掃描量;提升連接效率,實現高效 JOIN 操作;確保數據完整性,維護唯一性約束。
3.索引缺點
- 需要額外存儲空間,增加了存儲開銷
- DML操作成本上升,導致寫入性能下降
- 需定期維護,維護成本隨之增加
- 索引選擇難度較大
4.普通索引
建表時創建索引:
create table 庫名.表名(
字段列表,
index(表頭名),
index(表頭名),
);
添加索引:
create index 索引名 on 庫名.表名(字段名);
刪除索引:
drop index 索引名 on 庫名.表名;
驗證查詢是否使用索引:
explain select 查詢語句;