Mysql相關(guān)設(shè)置有哪一些
發(fā)表時(shí)間:2023-07-19 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:8
[摘要]1》創(chuàng)建數(shù)據(jù)庫(kù): 語(yǔ)法:create database 數(shù)據(jù)庫(kù)名; 語(yǔ)法:show databases 查看已經(jīng)存在數(shù)據(jù)庫(kù) 舉例: Mysql->create database zy...
1》創(chuàng)建數(shù)據(jù)庫(kù):
語(yǔ)法:create database 數(shù)據(jù)庫(kù)名;
語(yǔ)法:show databases 查看已經(jīng)存在數(shù)據(jù)庫(kù)
舉例:
Mysql->create database zytest; 注意每一條要以;號(hào)結(jié)尾
Mysql->show databases;查詢是否創(chuàng)建成功
>use zytest;

2》刪除數(shù)據(jù)庫(kù):
語(yǔ)法:drop database 數(shù)據(jù)庫(kù)名字;<使用此命令,請(qǐng)注意>
舉例:
Mysql->drop database zytest; 刪除zytest
Mysql->show databases; 查詢是否刪除成功

3》存儲(chǔ)引擎介紹:
1>innoDB引擎
innoDB是mysql的一種存儲(chǔ)引擎,inodb給mysql的表提供了事務(wù)日志,回滾、奔潰、修復(fù)能力和多版本并發(fā)控制的事務(wù)安全。Mysql從3.23.34a開始包含 innoDB存儲(chǔ)引擎.
innoDB是第一個(gè)提供外鍵約束的表引擎,而且對(duì)innoDB對(duì)事務(wù)處理的能力。也是其它引擎無(wú)法與之抗衡的。,
innodb支持自動(dòng)增長(zhǎng)列使用auto_increment,自動(dòng)增長(zhǎng)列不值不能為空
innodb 存儲(chǔ)引擎中支持外鍵Z(foreign key),外鍵所在的表為子表,外鍵所依賴的表為父母,父表中的被子表外檢關(guān)聯(lián)的字段必須是主鍵,當(dāng)刪除、更新父表 的某條信息時(shí),子表也必須有相應(yīng)的改變,
innodb存儲(chǔ)引擎中,創(chuàng)建表的表結(jié)構(gòu)存儲(chǔ)在.frm文件中,數(shù)據(jù)和索引存儲(chǔ)在innodb_data_home_dir 和 innodb_data_file_path定義的表空間.
元數(shù)據(jù)文件所有的表的ibdata1如果不定義innodb_data_home_dir 參數(shù)。默認(rèn)就在datadir下面,InnoDB每個(gè)數(shù)據(jù)表的元數(shù)據(jù)(metadata)總是保 存在ibdata1 這個(gè)共享表空間里,因此該文件必不可少innodb_data_file_path = ibdata1:10M:autoextend
數(shù)據(jù)和索引文件集合在一起:*.ibd每個(gè)表都有單獨(dú)一個(gè)元數(shù)據(jù),
表定義文件:*.frm
所有的表總的元數(shù)據(jù)文件為ibdata1
Inoodb存儲(chǔ)引擎的
優(yōu)勢(shì):在于提供了良好的事務(wù)管理、崩潰、修復(fù)能力和并發(fā)控制,
缺點(diǎn):是其讀寫效率稍差,占用的數(shù)據(jù)空間相對(duì)比較大.
什么是事務(wù)??我們先來(lái)看看ACID原則
ACID是數(shù)據(jù)庫(kù)事務(wù)正常執(zhí)行的四個(gè)基本要素,分別指原子性、一致性、獨(dú)立性及持久性
原子性(Atomicity):事務(wù)的原子性是指一個(gè)事務(wù)要么全部執(zhí)行,要么不執(zhí)行.也就是說(shuō)一個(gè)事務(wù)不可能只執(zhí)行了一半就 停止了.比如你從取款機(jī)取錢, 這個(gè)事務(wù)可以分成兩個(gè)步驟:1劃卡,2出錢.不可能劃了卡,而錢卻沒(méi)出來(lái).這兩步必須同時(shí)完成.要么就不完成.
一致性(Consistency):事務(wù)的一致性是指事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性.例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨 之改變.
獨(dú)立性(Isolation):事務(wù)的獨(dú)立性也有稱作隔離性,是指兩個(gè)以上的事務(wù)不會(huì)出現(xiàn)交錯(cuò)執(zhí)行的狀態(tài).因?yàn)檫@樣可能會(huì)導(dǎo)致數(shù)據(jù)不一致.
持久性(Durability):事務(wù)的持久性是指事務(wù)執(zhí)行成功以后,該事務(wù)所對(duì)數(shù)據(jù)庫(kù)所作的更改便是持久的保存在數(shù)據(jù)庫(kù)之中,不會(huì)無(wú)緣無(wú)故的回滾.
2>MyISAM引擎
MyISAM存儲(chǔ)表分為3個(gè)文件,文件與表名相同,擴(kuò)展包括frm,MYD和MYI,
frm為擴(kuò)展名的文件存儲(chǔ)表的結(jié)構(gòu)
myd為擴(kuò)展名的文件存儲(chǔ)數(shù)據(jù)
myi為擴(kuò)展名的文件存儲(chǔ)索引
優(yōu)點(diǎn):占用空間小,。處理速度快,
缺點(diǎn):不支持事務(wù)日志的完整性和并發(fā)性 3>MEMORY 引擎 Mysql中的特殊引擎,所有的數(shù)據(jù)全部存放于內(nèi)存當(dāng)中,在企業(yè)生產(chǎn)環(huán)境當(dāng)中。幾乎是用不到。因?yàn)閿?shù)據(jù)存儲(chǔ)在內(nèi)存,如果內(nèi)存出現(xiàn)異常。將影響數(shù)據(jù)的完 整性。 優(yōu)點(diǎn):存儲(chǔ)速度快
缺點(diǎn):缺乏穩(wěn)定性和完整性
MyISAM:不支持外鍵,不支持事務(wù),索引和數(shù)據(jù)分開的,可以加載更多的索引,并且索引是壓縮的,相對(duì)內(nèi)存來(lái)說(shuō)使用效率就提高不少,,他使用一 種表格鎖定的機(jī)制,來(lái)優(yōu)化多個(gè)并發(fā)讀寫操作,MYISAM強(qiáng)調(diào)了快速讀取操作;
使用場(chǎng)合:在承載的大部分項(xiàng)目是讀多寫少的項(xiàng)目平臺(tái)中,而MyISAM的讀性能是比Innodb強(qiáng)不少的
Innodb: 支持外鍵,支持事務(wù)、回滾,但是索引和數(shù)據(jù)是緊密捆綁的,沒(méi)有使用壓縮從而會(huì)造成INNODB比MYISAM體積龐大不小。
使用場(chǎng)合:在承載的大部分項(xiàng)目執(zhí)行insert 和update的話,應(yīng)該選擇InnoDB.
鎖的介紹:mysql常見的三種鎖級(jí)別——表級(jí)鎖、頁(yè)面鎖、行級(jí)鎖;其中表級(jí)鎖有兩種模式——表共享讀鎖和表獨(dú)占寫鎖。
MyISAM:
表級(jí)鎖:對(duì)myisam表進(jìn)行讀操作的時(shí)候,它不會(huì)阻塞其他用戶對(duì)同一表的讀請(qǐng)求,但會(huì)阻塞對(duì)同一表>的寫操作;
對(duì)myisam表進(jìn)行寫操作的時(shí)候,它會(huì)阻塞其他用戶對(duì)同一表的讀、寫請(qǐng)求.
innodb:
提供行鎖(locking on row level),另外,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì) 鎖全表.
行級(jí)鎖的優(yōu)點(diǎn)如下:
1)當(dāng)很多連接分別進(jìn)行不同的查詢時(shí)減小LOCK狀態(tài)。
2)如果出現(xiàn)異常,可以減少數(shù)據(jù)的丟失。因?yàn)橐淮慰梢灾换貪L一行或者幾行少量的數(shù)據(jù)。
行級(jí)鎖的缺點(diǎn)如下:
1)比頁(yè)級(jí)鎖和表級(jí)鎖要占用更多的內(nèi)存。
2)進(jìn)行查詢時(shí)比頁(yè)級(jí)鎖和表級(jí)鎖需要的I/O要多,所以我們經(jīng)常把行級(jí)鎖用在寫操作而不是讀操作。
3)容易出現(xiàn)死鎖。
注意:inodb不能確定操作的行,這個(gè)時(shí)候就使用的意向鎖,也就是表鎖on row level);
4》察看存儲(chǔ)引擎:
存儲(chǔ)引擎是Mysql的特點(diǎn),Mysql可以選擇多種存儲(chǔ)引擎及不同的存儲(chǔ)方式,是否進(jìn)行事物處理等;
1> 查詢Mysql支持的引擎
Mysql->show engines;

Mysql->show engines\G;

2>查詢Mysql引擎詳細(xì)信息:
Mysql->show engine innodb status\G;
3>查詢Mysql默認(rèn)存儲(chǔ)引擎
Mysql-> show variables like 'storage_engine';
如果想修改存儲(chǔ)引擎,可以在 my.ini中進(jìn)行修改或者my.cnf中的Default-storage-engine=引擎類型;

5》如何選擇存儲(chǔ)引擎:
在企業(yè)生產(chǎn)環(huán)境中,選擇一個(gè)款合適的存儲(chǔ)引擎是一個(gè)很復(fù)雜的問(wèn)題。每一種存儲(chǔ)引擎都有各自的優(yōu)勢(shì),不能籠統(tǒng)的說(shuō),誰(shuí)比誰(shuí)好。通常用的比較多的 是innodb存儲(chǔ)引擎
以下是存儲(chǔ)引擎的對(duì)比:

==========================創(chuàng)建,修改,刪除表:
1》創(chuàng)建表的方法:
語(yǔ)法:create table 表名(
屬性名數(shù)據(jù)類型完整約束條件,
屬性名數(shù)據(jù)類型條完整約束件,
。。。。。。。。。
屬性名數(shù)據(jù)類型
);
舉例:
create table example0(
id int,
name varchar(20),
sexboolean);
2》表的完整性約束:
約束條件 說(shuō)明
(1)primary key 標(biāo)識(shí)該字段為表的主鍵,具備唯一性
(2)foreign key 標(biāo)識(shí)該字段為表的外鍵,與某表的主鍵聯(lián)系
(3)not null 標(biāo)識(shí)該屬于的值不能為空
(4)unique 標(biāo)識(shí)這個(gè)屬性值是唯一
(5)auto_increment 標(biāo)識(shí)該屬性值的自動(dòng)增加
(6)default 為該屬性值設(shè)置默認(rèn)值
1>設(shè)置表的主鍵:
主鍵是一個(gè)表的特殊字段,這個(gè)字段是唯一標(biāo)識(shí)表中的每條信息,主鍵和記錄的關(guān)系,跟人的身份證一樣。名字可以一樣,但是身份證號(hào)碼覺(jué)得不會(huì)一樣, 主鍵用來(lái)標(biāo)識(shí)每個(gè)記錄,每個(gè)記錄的主鍵值都不同,主鍵可以幫助Mysql以最快的速度查找到表中的某一條信息,主鍵必須滿足的條件那就是它的唯一性,表中的 任意兩條記錄的主鍵值,不能相同,否則就會(huì)出現(xiàn)主鍵值沖突,主鍵值不能為空,可以是單一的字段,也可以多個(gè)字段的組合。
舉例:
create table sxkj(
User_id int primary key,
user_name varchar(20),
user_sexchar(7));
2>設(shè)置多個(gè)字段做主鍵
舉例:
create table sxkj2(
user_id int ,
user_name float,
grade float,
primary key(user_id,user_name));
3>設(shè)置表的外鍵:
外鍵是表的一個(gè)特殊字段,如果aa是B表的一個(gè)屬性且依賴于A表的主鍵,那么A表被稱為父表。B表為被稱為子表,
舉例說(shuō)明:
user_id 是A 表的主鍵,aa 是B表的外鍵,那么user_id的值為zhangsan,如果這個(gè)zhangsan離職了,需要從A表中刪除,那么B表關(guān)于 zhangsan的信息也該得到相應(yīng)的刪除,這樣可以保證信息的完整性。
語(yǔ)法:
constraint外鍵別名 foreign key(外鍵字段1,外鍵字段2)
references 表名(關(guān)聯(lián)的主鍵字段1,主鍵字段2)
(1) yy1表存儲(chǔ)了zhangsan姓名和ID號(hào)
create table yy1(
user_id int primary key not null,
user_name varchar(20));

(2) yy2表存儲(chǔ)了ID號(hào)和zhangsan的年齡(old)
create table yy2(
user_id int primary key not null,
old int(5),
constraint y_fk foreign key(user_id)
references yy1(user_id)on delete cascade on update cascade);

(3)數(shù)據(jù)填充yy1和yy2表
insert into yy1 values('110','zhangsan');
insert into yy2 values('110','30');

(4)更新測(cè)試:
update yy1 set user_id='120' where user_name='zhangsan';
查詢驗(yàn)證
select * from yy2;

(5)刪除測(cè)試:
delete from yy1 where user_id='120';
查詢驗(yàn)證
select * from yy2;

4>設(shè)置表的非空值
語(yǔ)法:屬性名數(shù)據(jù)類型 NOT NULL
舉例:
create table C(
user_id int NOT NULL);
5> 設(shè)置表的唯一性約束
唯一性指的就是所有記錄中該字段。不能重復(fù)出現(xiàn)。
語(yǔ)法:屬性名數(shù)據(jù)類型 unique
舉例:
root@zytest 15:43>create table D(
->user_id int unique);
root@zytest 15:44>show create table D;
6>設(shè)置表的屬性值自動(dòng)增加
Auto_increment 是Mysql數(shù)據(jù)庫(kù)中特殊的約束條件,它的作用是向表中插入數(shù)據(jù)時(shí)自動(dòng)生成唯一的ID,一個(gè)表只能有一個(gè)字段使用 auto_increment 約束,必須是唯一的;
語(yǔ)法:屬性名數(shù)據(jù)類型 auto_increment,默認(rèn)該字段的值從1開始自增。
舉例:
create table F( user_id int primary key auto_increment);
root@zytest 15:56>insert into F values();插入一條空的信息
Query OK, 1 row affected, 1 warning (0.00 sec)
root@zytest 15:56>select * from F;值自動(dòng)從1開始自增
+---------+
user_id
+---------+
1
+---------+
1 row in set (0.01 sec)
7>、設(shè)置表的默認(rèn)值
在創(chuàng)建表時(shí),可以指定表中的字段的默認(rèn)值,如果插入一條新的紀(jì)錄時(shí),沒(méi)有給這個(gè)字段賦值,那么數(shù)據(jù)庫(kù)會(huì)自動(dòng)的給這個(gè)字段插入一個(gè)默認(rèn) 值,字段的默認(rèn)值用default來(lái)設(shè)置。
語(yǔ)法: 屬性名數(shù)據(jù)類型 default 默認(rèn)值
舉例:
root@zytest 16:05>create table G(
user_id int primary key auto_increment,
user_name varchar(20) default 'zero');
root@zytest 16:05>insert into G values('','');
插入數(shù)據(jù),應(yīng)為ID為自增,值為空,user_name設(shè)置了默認(rèn)值,所以也為空。
3》查看表結(jié)構(gòu)的方法:
DESCRIBE可以查看那表的基本定義,包括、字段名稱,字段的數(shù)據(jù)類型,是否為主鍵以及默認(rèn)值等。。
(1)語(yǔ)法:describe 表名;可以縮寫為desc
(2) show create table查詢表詳細(xì)的結(jié)構(gòu)語(yǔ)句,
1>修改表名
語(yǔ)法:alter table 舊表名 rename 新表名;
舉例;
root@zytest 16:11>alter table A rename zyA;
Query OK, 0 rows affected (0.02 sec)
2>修改表的數(shù)據(jù)類型
語(yǔ)法:alter table 表名 modify 屬性名 數(shù)據(jù)類型;
舉例;
root@zytest 16:15>alter table A modify user_name double;
Query OK, 0 rows affected (0.18 sec)
3>修改表的字段名稱
語(yǔ)法: alter table 表名 change 舊屬性名 新屬性名 新數(shù)據(jù)類型;
root@zytest 16:15>alter table A change user_name user_zyname float;
Query OK, 0 rows affected (0.10 sec)
4>修改增加字段
alter table 表名 ADD 屬性名1 數(shù)據(jù)類型 [完整性約束條件] [FIRST AFTER 屬性名2]
v 增加沒(méi)有約束條件的字段:
root@zytest 16:18>alter table A add phone varchar(20);
Query OK, 0 rows affected (0.13 sec)
v 增加有完整約束條件的字段
root@zytest 16:42>alter table A add age int(4) not null;
Query OK, 0 rows affected (0.13 sec)
v 在表的第一個(gè)位置增加字段默認(rèn)情況每次增加的字段。都在表的最后。
root@zytest 16:45>alter table tt add num int(8) primary key first;
Query OK, 1 row affected (0.12 sec)
Records: 1 Duplicates: 0 Warnings: 0
v 執(zhí)行在那個(gè)位置插入新的字段,在phone后面增加
root@zytest 16:46>alter table A add address varchar(30) not null after phone;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
總結(jié):
(1) 默認(rèn)ADD 增加字段是在最后面增加
(2) 如果想在表的最前端增加字段用first關(guān)鍵字
(3) 如果想在某一個(gè)字段后面增加的新的字段,使用after關(guān)鍵字
5>刪除一個(gè)字段
alter table 表名DROP 屬性名;
舉例: 刪除A 表的age字段
root@zytest 16:51>alter table A drop age;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
6>更改表的存儲(chǔ)引擎
alter table表名 engine=存儲(chǔ)引擎
alter table A engine=MyISAM;
7>刪除表的外鍵約束
alter table 表名drop foreign key 外鍵別名;
alter table yy2 drop foreign key y_fk;
4》刪除表的方法
1>刪除沒(méi)有被關(guān)聯(lián)的普通表
drop table 表名;
2>刪除被其它表關(guān)聯(lián)的父表
在數(shù)據(jù)庫(kù)中某些表之間建立了一些關(guān)聯(lián)關(guān)系。一些成為了父表,被其子表關(guān)聯(lián),要?jiǎng)h除這些父表,就不是那么簡(jiǎn)單了。刪除方法,先刪除所關(guān)聯(lián)的 子表的外鍵,在刪除主表。
以上就是Mysql相關(guān)操作有哪些的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。