mysql基礎知識語法匯總整理(一)


 mysql基礎知識語法匯總整理(二)

 

連接數據庫操作

/*連接mysql*/
mysql -h 地址 -P 端口 -u 用戶名 -p 密碼
例如: mysql -h 127.0.0.1 -P 3306 -u root -p ****

/*退出mysql*/
exit;

 

數據庫操作

#數據庫操作
/*關鍵字:create 創建數據庫(增)*/
create database 數據庫名 [數據庫選項];
例如: create database test default charset utf8 collate utf8_bin;
/*數據庫選項:字符集和校對規則*/
字符集:一般默認utf8;
校對規則常見: ⑴ci結尾的:不分區大小寫 ⑵cs結尾的:區分大小寫 ⑶bin結尾的:二進制編碼進行比較

/*關鍵字:show 查看當前有哪些數據庫(查)*/
show databases;

/*查看數據庫的創建語句*/
show create database 數據庫名;

/*關鍵字:alter 修改數據庫的選項信息(改)*/
alter database 數據庫名 [新的數據庫選項];
例如: alter database test default charset gbk;

/*關鍵字:drop  刪除數據庫(刪)*/
drop database 數據庫名;

/*關鍵字:use 進入指定的數據庫*/
use 數據庫名;

 

表的操作

#表的操作
/*關鍵字:create 創建數據表(增)*/
create table 表名(
字段1  字段1類型 [字段選項],
字段2  字段2類型 [字段選項],
字段n  字段n類型 [字段選項]
)表選項信息;

例如: create table test(
  id int(10) unsigned not null auto_increment comment 'id',
  content varchar(100) not null default '' comment '內容',
  time int(10) not null default 0 comment '時間',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='測試表';

語法解析(下文MySQL列屬性單獨解析):
如果不想字段為NULL可以設置字段的屬性為NOT NUL,在操作數據庫時如果輸入該字段的數據為NULL,就會報錯.
AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1.
PRIMARY KEY關鍵字用於定義列為主鍵.可以使用多列來定義主鍵,列間以逗號分隔.
ENGINE 設置存儲引擎,CHARSET 設置編碼, comment 備注信息.

/*關鍵字:show 查詢當前數據庫下有哪些數據表(查)*/
show tables;

/*關鍵字:like 模糊查詢*/
通配符:_可以代表任意的單個字符,%可以代表任意的字符
show tables like '模糊查詢表名%';

/*查看表的創建語句*/
show create table 表名;

/*查看表的結構*/
desc 表名;

/*關鍵字:drop  刪除數據表(刪)*/
drop table [if exists] 表名
例如: drop table if exists test;

/*關鍵字:alter 修改表名(改)*/
alter table 舊表名 rename to 新表名;
/*修改列定義*/
/*關鍵字:add 增加一列*/
alter table 表名 add 新列名 字段類型 [字段選項];
例如: alter table test add name char(10) not null default '' comment '名字';

/*關鍵字:drop 刪除一列*/
alter table 表名 drop 字段名;
例如: alter table test drop content;
/*關鍵字:modify 修改字段類型*/
alter table 表名 modify 字段名 新的字段類型 [新的字段選項];
例如: alter table test modify name varchar(100) not null default 'admin' comment '修改后名字';

/*關鍵字:first 修改字段排序,把某個字段放在最前面*/
alter table 表名 modify 字段名 字段類型 [字段選項] first;
例如: alter table test modify name varchar(100) not null default 'admin' comment '最前面' first;

/*關鍵字:after 修改字段排序,字段名1放在字段名2的后面*/
alter table 表名 modify 字段名1 字段類型 [字段選項] after 字段名2;
例如: alter table test modify name varchar(100) not null default 'admin' comment 'time字段后面' after time;

/*關鍵字:change 重命名字段*/
alter table 表名 change 原字段名 新字段名 新的字段類型 [新的字段選項];
例如: alter table test change name username varchar(50) not null default '' comment '用戶名字';

/*修改表選項*/ 
alter table 表名 表選項信息;
例如: alter table test engine Myisam default charset gbk; --修改存儲引擎和修改表的字符集

 

數據操作

#數據操作
/*關鍵字:insert 插入數據(增)*/
insert into 表名(字段列表) values(值列表);
例如: create table user(
  id int(10) unsigned not null auto_increment comment 'id',
  name char(10) not null default '' comment '名字',
  age int(3) not null default 0 comment '年齡',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='用戶表';
--插入數據
insert into user(id,name,age) values(1,'admin_a',50);
insert into user(name) values('admin_b');
/*關鍵字:select 查詢數據(查)*/
select *[字段列表] from 表名[查詢條件];
例如: select * from user;--查全部字段用*代替

select name from user where age>0;--查name字段,age大於0

/*關鍵字:delete 刪除數據(刪)*/
delete from 表名[刪除條件];
例如: delete from user where age<1;--刪除age小於1數據

/*關鍵字:update 修改數據(改)*/
update 表名 set 字段1=新值1,字段n=新值n [修改條件];
例如: update user set age=100 where name='admin_a';

 

MySQL數據類型
#MySQL數據類型
/*MySQL三大數據類型:數值型、字符串型和日期時間型*/

/*數值型*/

/*字符串型*/

/*日期時間型*/

 

MySQL列屬性
#MySQL列屬性
/*null、not null、default、primary key、auto_increment、comment*/
MySQL真正約束字段的是數據類型,但是數據類型的約束太單一,需要有一些額外的約束,來更加保證數據的合法性.
MySQL常用列屬性有:nullnot nulldefaultprimary key、auto_increment、comment.

/*空屬性: null和not null*/
空屬性: null(空,默認) 和 not null(不為空). mysql數據庫默認字段都是為null的,實際開發過程中盡可能保證所有的數據都不應該為null,空數據沒有意義.
例如: create table test(
    a int not null,
    b int
);
insert into test (a,b) values(10,null);
insert into test (a,b) values(null,10);--報錯

/*默認值: default*/
default: 自定義默認值屬性,通常配合not null一起使用.
例如: create table test1(
    a int not null default 200,
    b int
);
insert into test1(b) values(20);--或 insert into test1(a,b) values(default,20);

/*主鍵|唯一索引*/
Mysql中提供了多種索引? (下文索引更多解析)
1.主鍵索引:primary key
2.唯一索引:unique key
3.全文索引:fulltext index
4.普通索引:keyindex

主鍵:primary key  一張表中只能有一個字段可以使用對應的主鍵,用來唯一的約束該字段里面的數據,不能重復和不能為null.
設置主鍵有兩種方式:
(1)在定義一個字段的時候直接在后面進行設置primary key
例如: create table test2(
  id int(10) unsigned not null primary key,
  name char(20) not null default ''
);

(2)定義完字段后再定義主鍵
例如: create table test3(
  id int(10) unsigned not null,
  name char(20) not null default '',
  primary key (id)
);

唯一鍵:unique key 解決表中多個字段需要唯一性約束的問題.
例如:create table test4(
  id int(10) unsigned not null,
  name char(20) not null default '',
  goods varchar(100) not null default '',
  primary key (id),
  unique key (name,goods)
);

/*自動增長: auto_increment*/
自增長屬性:每次插入記錄的時候,自動的為某個字段的值加1(基於上一個記錄). 通常跟主鍵搭配.
自增長規則:(1)任何一個字段要做自增長前提必須是一個索引  (2)自增長字段必須是整型數字
例如: create table test5(
  id int(10) unsigned not null auto_increment,
  name char(20) not null default '',
  primary key (id)
);

/*列描述 comment*/
列描述(注釋):comment 與其他的注釋符不同之處在於,這里的注釋內容屬於列定義的一部分.
例如:create table user(
  id int(10) unsigned not null auto_increment comment 'id',
  name char(20) not null default '' comment '名字',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='用戶表';

 

索引

#索引
/*索引的概述和優缺點和種類*/
什么是索引?
索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表里所有記錄的引用指針.
類比理解:數據庫中的索引相當於書籍目錄一樣,能加快數據庫的查詢速度.
沒有索引的情況,數據庫會遍歷全部數據后選擇符合條件的選項.
創建相應的索引,數據庫會直接在索引中查找符合條件的選項.

索引的性質分類:
索引分為聚集索引和非聚集索引兩種,聚集索引是索引中鍵值的邏輯順序決定了表中相應行的物理順序,而非聚集索引是不一樣;
聚集索引能提高多行檢索的速度,而非聚集索引對於單行的檢索很快.

索引的優點:
(1)加快數據檢索速度 (創建索引主要原因)
(2)創建唯一性索引,保證數據庫表中每一行數據的唯一性
(3)加速表和表之間的連接
(4)使用分組和排序子句對數據檢索時,減少檢索時間
(5)使用索引在查詢的過程中,使用優化隱藏器,提高系統的性能

索引的缺點:
(1)創建索引和維護索引要耗費時間,時間隨着數據量的增加而增加
(2)索引需要占用物理空間和數據空間
(3)表中的數據操作插入、刪除、修改, 維護數據速度下降

索引種類
(1)普通索引: 僅加速查詢
(2)唯一索引: 加速查詢 + 列值唯一(可以有null)
(3)主鍵索引: 加速查詢 + 列值唯一(不可以有null)+ 表中只有一個
(4)組合索引: 多列值組成一個索引,專門用於組合搜索,其效率大於索引合並
(5)全文索引: 對文本的內容進行分詞,進行搜索 (注意:目前僅有MyISAM引擎支持)
/*創建表時直接指定索引*/
--創建主鍵索引
例如:create table student(
  id int(10) unsigned not null auto_increment comment 'id主鍵索引',
  name char(20) not null default '' comment '名字',
  class varchar(50) not null default '' comment '班級',
  seat_number smallint(5) not null default 0 comment '座位編號',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='學生表';

/*創建索引*/
create [unique唯一索引][clustered聚集索引] index <索引名>
on <表名>(<列名稱>[<排序>],<列名稱>[<排序>]…);

語法解析:其中unique和clustered為可選項. 注意:基本表上最多僅僅能建立一個聚集索引.
"列名稱":規定需要索引的列. "排序":可選asc(升序)和desc(降序)缺省值為asc.
--創建唯一索引(unique key 簡寫 unique)
例如:create unique index number on student(seat_number desc);

--創建普通索引
例如:create index name_class on student(name asc,class desc);

/*刪除索引*/
drop index <索引名> on 表名;
例如:drop index number on student;

 

外鍵

/*外鍵約束: foreign key */
外鍵約束: foreign key 被約束的表叫做副表,外鍵設置在副表上面,外鍵引用主鍵字段所在的表叫做主表. (作用:約束兩張表的數據)
外鍵定義語法: constraint 外鍵約束名稱 foreign key(外鍵字段) references 主表名稱(引用字段)
外鍵數據操作:
1.當有外鍵約束之后,添加數據的時候,先添加主表數據,再添加副表數據
2.當有了外鍵約束,修改數據的時候,先改副表的數據,在修改主表的數據
3.當有了外鍵約束,刪除數據的時候,也是先刪除副表的數據,再刪除主表的數據
外鍵注意事項:
1.外鍵約束只有InnoDB存儲引擎才支持.
2.實際項目中往往會用到外鍵的設計思想,但往往不會真正的從語法上進行外鍵約束. 因為外鍵約束的級聯操作可能會帶來一些現實的邏輯問題. 另外使用外鍵會較低mysql的效率.

 

儲存引擎

/*儲存引擎: engine*/
常見的引擎:Myisam InnoDB BDB Memory Archive 等

不同的引擎在保存表的結構和數據時采用不同的方式?
MyISAM表文件含義:.frm表定義,.MYD表數據,.MYI表索引
InnoDB表文件含義:.frm表定義,表數據空間文件(存放表的數據和索引)和日志文件
注意:項目中一般用InnoDB引擎.
MySQL中innodb與myisam的區別
(1):InnoDB支持事物,MyISAM不支持事物
(2):InnoDB支持行級鎖,MyISAM支持表級鎖
(3):InnoDB支持快照數據(MVCC),MyISAM不支持
(4):InnoDB支持外鍵,MyISAM不支持
(5):InnoDB不支持全文索引,MyISAM支持

innodb使用的是行級鎖:只有在增刪改查時匹配的條件字段帶有索引時,innodb才會使用行級鎖.(行級鎖:要為匹配條件字段加索引)
innodb使用的是表級鎖:如果增刪改查時匹配的條件字段不帶有索引時,innodb使用的將是表級鎖.(表級鎖:數據庫全表查詢,需要將整張表加鎖,保證查詢匹配的正確性)
觸發讀鎖:就是用select命令時觸發讀鎖.
觸發寫鎖:就是在你使用update,delete,insert時觸發寫鎖,並且使用rollback或commit后解除本次鎖定
更好的區分:讀寫鎖和表級鎖行級鎖. 將讀寫鎖叫做權限鎖(決定了加鎖后用戶有哪些操作權限),將表級鎖行級鎖叫做對象鎖(決定將鎖加在某一行還是整張表)

MVCC多版本並發控制,也可稱之為一致性非鎖定讀;它通過行的多版本控制方式來讀取當前執行時間數據庫中的行數據. 實質上使用的是快照數據.
為什么要使用MVCC?
消除鎖的開銷. (如果要保證數據的一致性,最簡單的方式就是對操作數據進行加鎖,但是加鎖不可避免的會有鎖開銷. 所以使用MVCC能避免進行加鎖的方式並提高並發.)

 

三范式

/*數據庫三范式*/
--建表規范
- 每個表保存一個實體信息
- 每個具有一個ID字段作為主鍵
- ID主鍵 + 原子表

--第一范式
字段不能再分,確保每列保持原子性.

--第二范式
滿足第一范式的基礎上,不能有部分依賴.
消除符合組合主鍵(A,B)就可以避免部分依賴. 增加單列關鍵字.

--第三范式
滿足第二范式的基礎上,不能有傳遞依賴.
某個字段依賴於主鍵,而有其他字段依賴於該字段. 這就是傳遞依賴.
將一個實體信息的數據放在一個表內實現

 

mysql基礎知識語法匯總整理(二)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM