「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

MYSQL基礎知識,常用方法總結,值得收藏,下面的一些知識,從易到難分別列出了MySQL中的一些問題,對於想學習MySQL數據庫的同學來說,將這些知識看一下還是很有用處的。


##################################################

MYSQL(存儲數據 數據共享):免費開源、齊全

用於win 和 linux

net START mysql;

mysql -uroot -p1234;

mysql -hlocalhost -uroot -p1234;

#查看數據庫的定義(一些信息)

SHOW CREATE DATABASE school;

#查看錶的定義(一些信息)

SHOW CREATE TABLE student;

/*

CREATE TABLE `student` (

`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '主鍵,學號',

`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密碼',

`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '學生姓名',

`sex` VARCHAR(2) NOT NULL DEFAULT '男',

`birthday` DATETIME DEFAULT NULL,

`address` VARCHAR(100) DEFAULT NULL,

`email` VARCHAR(50) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

*/

#desc顯示錶結構

DESC student;

#創建一個測試表

CREATE TABLE test(

coll INT(4) NOT NULL;

)

CREATE TABLE test(

coll INT(4) ZEROFILL NOT NULL;

)

CREATE TABLE test(

coll INT(4) NOT NULL DEFAULT 5 UNSIGNED;

)

#自增量從100開始 隻影響當前表

CREATE TABLE test(

id INT(4) PRIMARY KEY AUTO_INCREMENT,

`name` VARCHAR(20) NOT NULL

)AUTO_INCREMENT=100;

#影響所有自增量列的表 步長

SET @@auto_increment_increment=100;

#設置嚴格檢查模式

SET sql_mode='strict_trans_table';

數據表類型:

MYISAM、INNODB、HELP、bob、csv、MEMORY等

常見的MYISAM與INNODB類型:

MYISAMINNODB

事務處理01

數據行鎖定01

外鍵約束01

全文索引10

表空間大小較小較大,約兩倍

#查看mysql所支持的引擎類型(表類型)

SHOW ENGINES;

#查看默認引擎

SHOW VARIABLES LIKE 'storage_engine';

SHOW VARIABLES LIKE 'storage_engine%';

#設置表的引擎:

CREATE TABLE student(...)ENGINE=INNODB;

CREATE TABLE student(...)ENGINE=MYISAM;

#修改引擎:

#安裝時更改引擎

#在my.ini文件當中修改

#設置數據庫的字符集:

CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */

CREATE TABLE `student` (

`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '主鍵,學號',

`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密碼',

`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '學生姓名',

`sex` VARCHAR(2) NOT NULL DEFAULT '男',

`birthday` DATETIME DEFAULT NULL,

`address` VARCHAR(100) DEFAULT NULL,

`email` VARCHAR(50) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 #設置數據表的字符集:

CREATE TABLE a(

address CHAR(5) CHARACTER SET gbk #設置表中列的字符集:

)

##############################################################################

#重命名

ALTER TABLE student RENAME AS tableOne;

ALTER TABLE student RENAME TO tableOne;

#添加列

ALTER TABLE tableone ADD liveaddress VARCHAR(100) DEFAULT '深圳';

#修改表

ALTER TABLE tableone MODIFY liveaddress VARCHAR(500) DEFAULT '廣州';

ALTER TABLE tableone CHANGE address 地址 VARCHAR(500) DEFAULT '廣東';

#刪除字段

ALTER TABLE tableone DROP email;

#drop table

DROP TABLE IF EXISTS tableone;

#年級表

CREATE TABLE IF NOT EXISTS grade(

gradeid INT(10) PRIMARY KEY AUTO_INCREMENT,

gradename VARCHAR(50) NOT NULL

)

#學生表

CREATE TABLE IF NOT EXISTS student(

id INT(4) PRIMARY KEY,

NAME VARCHAR(20) NOT NULL DEFAULT '匿名',

sex TINYINT(1) DEFAULT 1,

gradeid INT(10),

phone VARCHAR(50) NOT NULL,

address VARCHAR(100),

brithday DATETIME,

email VARCHAR(50),

idcard VARCHAR(18) NOT NULL,

CONSTRAINT fk_gradeid FOREIGN KEY(gradeid) REFERENCES grade(gradeid)

)

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

#添加主鍵

ALTER TABLE grade ADD CONSTRAINT pk_grade PRIMARY KEY(gradeid);

#添加外鍵

ALTER TABLE student

ADD CONSTRAINT fk_gradeid FOREIGN KEY(gradeid) REFERENCES grade(gradeid)

#刪除外鍵

ALTER TABLE student DROP FOREIGN KEY fk_gradeid;

ALTER TABLE studnet DROP INDEX fk_gradeid;

#使用語句增加數據

INSERT INTO grade(gradename) VALUES('大一');

INSERT INTO grade VALUES(2,'大二');

INSERT INTO grade(gredename) VALUES('大三'),('大四');

INSERT INTO student(id,NAME,sex,gradeid,phone,address,brithday,email,idcard)

VALUES(1001,'李四',2,1,'130367350207',NULL,NOW(),NULL,'123456789012345678'),

(1001,'張三',DEFAULT,1,'130367350207',NULL,NOW(),NULL,'113456789012345678');

#使用語句修改數據

UPDATE student SET address='廣州' WHILE id=1001;

UPDATE student SET address='深圳',email='[email protected]' WHILE studnet=1001;

#修改多條數據

UPDATE student SET sex=1 WHILE id=1001 OR id=1002 OR id=1003;

UPDATE student SET sex=2 WHILE id>=1001 AND id<=1003;

UPDATE student SET sex=1 WHILE id BETWEEN 1001 AND 1003;

#使用函數

UPDATE student SET `name`=CONCAT("姓名:",`name`);

---刪除數據

DELETE FROM grade WHILE gredeid=4;

#全部刪除:自增當前值在原來基礎上增加編號

DELETE FROM test;

#自增量會重新開始編號(truncate),刪除的數據不能還原,不能用於刪除外鍵引用的表

TRUNCATE TABLE test;

#用delete刪除數據庫,重啟數據庫服務之後:

#對於innodb的表,自增列重新開始,它是放在內存當中的;

#對於myisam的表,自增列從原基礎上開始,它是放在文件裡面的

#查詢所有列信息

SELECT * FROM student;

#查詢指定列

SELECT studentno,studentname FROM student;

#取別名AS

SELECT studentmo AS 學號,studentname AS 姓名 FROM student;

SELECT student 學號,studentanme 姓名 FROM student;

SELECT studentno 學號,studentname 姓名 FROM student AS a;

SELECT studentno 學號,studentname 姓名 FROM student a;

#使用AS給查詢結果取名

SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

#查詢哪些同學參加了考試 去除重複行(distinct)

SELECT DISTINCT studentno FROM result;

#查詢步長

SELECT @@auto_increment_increment;

SELECT VERSION();

SELECT 100*3-1 AS 結果:;

#學員考試成績集體提分一分:

SELECT studentno,studentresult+1 AS '提分後:' FROM result;

#滿足條件的查詢(where)考試成績95-100

SELECT studentno,studentresult

FROM result

where studentresult>=95 AND studentresult<=100;

#模糊查詢

SELECT studentno,studentresult

FROM result

where studentresult BETWEEN 95 AND 100;

#精確查詢

SELECT studentno,studentresult

FROM result

where studentno=1000;

#或者寫成&&

SELECT studentno,studentresult

FROM result

where studentresult>=95 && studentresult<=100;

#比較運算符(模糊查詢)

#除了1000號同學,其他的成績

SELECT studentno,studentresult

FROM result

where studentno !=1000;

SELECT studentno,studentresult

FROM result

where NOT studentno=1000;

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

#模糊查詢 between and | like | in | null

#查詢姓李的同學的學號及姓名

#like:%(0-多個字符) _(一個字符)

SELECT studentno,studentresult

FROM result

where studentname LIKE '李%';

SELECT studentno,studentresult

FROM result

where studentname LIKE '李_';

#姓名中含有‘文’字的同學

SELECT studentno,studentresult

FROM result

where studentname LIKE '%文%';

#用轉義符 查% _:

SELECT studentno,studentresult

FROM student

where studentname LIKE '%\%%';

SELECT studentno,studentresult

FROM student

where studentname LIKE '%\_%';

#自己定義的符號作轉義符 (escape)

SELECT studentno,studentresult

FROM student

where studentname LIKE '%:%%' ESCAPE ':';

#模糊查詢: in | null

SELECT studentno,studentresult

FROM student

where studentno=1000 OR studentno=1002 OR studentno=1003;

SELECT studentno,studentresult

FROM student

where studentno IN(1000,1001,1002,1003);

SELECT studentno,studentresult

FROM student

where address IN('北京','蘇州','揚州');

#null

SELECT * FROM student

where borndate IS NULL;

SELECT studentname FROM student

where borndate IS NOT NULL;

#區別空字符串與null

SELECT studentname FROM student where address IS NULL;

SELECT studentname FROM student where address='';

SELECT studentname FROM student where address='' OR address IS NULL;

#連接查詢

#內連接 inner join

#外連接 outer join

#左外連接 left join

#右外連接 right join

#自連接

#等值連接 非等值連接

#查詢參加了考試的同學信息(學號、學生姓名、科目編號、分數)

#2.確定使用哪一種連接查詢?

---內連接(拿出來的是表裡面的交集)

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

INNER JOIN result r

ON r.StudentNo=s.StudentNo

---左連接(返回所有左表的記錄,右表NULL填充)

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

LEFT JOIN result r

ON r.StudentNo=s.StudentNo

---等值連接

SELECT s.studentno,studentname,subjectno,studentresult

FROM student s,result r

where r.StudentNo=s.StudentNo

---非等值連接(m*n行依次相乘)

#查缺考的同學

SELECT s.studentno,studentname,subjectno,studentresult

FROM student AS s

LEFT JOIN result r

ON r.StudentNo=s.StudentNo

where studentresult IS NULL;

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

#連接查詢(自連接)

CREATE TABLE IF NOT EXISTS category(

categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

pid INT(10) NOT NULL,

categoryname VARCHAR(50) NOT NULL,

PRIMARY KEY(categoryid)

)

INSERT INTO category

VALUES(2,1,"美術設計"),

(3,1,"軟件開發"),

(4,3,"數據庫基礎"),

(5,2,"ps基礎"),

(6,2,"色彩搭配"),

(7,3,"PHP基礎"),

(8,3,"Java基礎");

#編寫SQL語句,將欄目的父子關係呈現出來,(父欄目名稱、子欄目名稱)

#父欄目 子欄目

#美術設計 PS基礎

#美術設計 色彩搭配

#軟件開發 數據庫基礎

#軟件開發 PHP基礎

#軟件開發 Java開發

#(自連接)

SELECT a.categoryname AS '父欄目',b.categoryname AS '子欄目'

FROM category AS a,category AS b

WHILE a.categoryid=b.pid

#三表連接

#查詢參加過考試的同學信息(學號 姓名 科目名稱 成績)

SELECT s.studentno,studentname,subjectname,studentresult

FROM student s

INNER JOIN result r

ON s.StudentNo = r.StudentNo

INNER JOIN `subject` sub

ON r.SubjectNo = sub.subjectno

#查詢學員及所屬的年級(學號 學生姓名 年級名) 1 張三 大一

SELECT studentno AS 學號,studentname AS 學生姓名,gradename AS 年級名稱

FROM student

INNER JOIN grade

ON student.gradeid=grade.gredeid

#查詢科目及所屬的年級(科目名稱 年級名稱) java 大一

SELECT subjectname AS 科目名稱,gradename AS 年級名稱

FROM SUBJECT sub

INNER JOIN grade AS g

ON sub.gradeid=g.gradeid

#查詢《數據庫結構-1》的所有考試結果(學號 學生姓名 科目名稱 成績)

SELECT s.studentno,studentname,subjectname,studentresult

FROM student s

INNER JOIN result r

ON s.StudentNo = r.StudentNo

INNER JOIN `subject` sub

ON r.SubjectNo = sub.subjectno

WHERE subjectname='數據庫結構-1'

ORDER BY studentresult DESC,studentno DESC #默認 asc 升序

#常見錯誤:order by studentresult,studentno desc 正確是成績升序排列、學號降序排列

---分頁

#查詢《數據庫結構-1》的所有考試結果(學號 學生姓名 科目名稱 成績)

---每頁顯示5條記錄

SELECT s.studentno,studentname,subjectname,studentresult

FROM student s

INNER JOIN result r

ON s.StudentNo = r.StudentNo

INNER JOIN `subject` sub

ON r.SubjectNo = sub.subjectno

WHERE subjectname='數據庫結構-1'

ORDER BY studentresult DESC

LIMIT 0,5; ==LIMIT 5 OFFSET 0;

#limit 0,5; #第一頁 #從0開始 顯示5條

#limit 5,5; #第二頁 #第二頁=((2-1 * 5),5);

#limit (page-1)*pagesize,pagesize; (當前頁碼-1)*頁容量 頁容量

#查詢 《JAVA第一學年》課程成績前10名且分數大於80的學生信息(學號、姓名、課程名、分數)

SELECT s.studentno,studentname,subjectname,studentresult

FROM student s

INNER JOIN result r

ON s.StudentNo=r.StudentNo

INNER JOIN `subject` sub

ON r.SubjectNo=sub.SubjectNo

WHERE subjectname='JAVA第一學年' AND studentresult>80

ORDER BY studentresult DESC

LIMIT 0,10;

---子查詢 (如果得到的是一個數可以用等於 如果得到的是一個集合就用IN)

#查詢《數據庫結構-1》的所有考試結果(學號、科目編號、成績),並按成績降序排列

#方法一:使用連接查詢

SELECT studentno,r.subjectno,studentresult

FROM result r INNER JOIN `subject` sub

ON r.SubjectNo=sub.SubjectNo

WHERE subjectname='數據庫結構-1'

ORDER BY studentresult DESC;

#方法二:使用子查詢,子查詢執行順序:由裡到外

SELECT studentno,subjectno,studentresult

FROM result WHERE subjectno=(SELECT subjectno FROM `subject` WHERE subjectname='數據庫結構-1')

ORDER BY studentresult DESC;

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

---查詢課程為《高等數學-2》且分數不小於80分的學生的學號和姓名

#方法一:使用連接查詢

SELECT r.studentno,studentname

FROM student s

INNER JOIN result r

ON s.StudentNo=r.StudentNo

INNER JOIN `subject` sub

ON r.SubjectNo=sub.SubjectNo

WHERE subjectname='高等數學-2' AND studentresult>=80;

#方法二:使用連接查詢+子查詢

#分數不小於80分的學生的學號和姓名

SELECT r.studentno,studentname

FROM student s INNER JOIN result r

ON s.StudentNo=r.StudentNo

WHERE studentresult>=80

#在上面SQL基礎上,添加需求:查詢課程為《高等數學-2》

SELECT r.studentno,studentname

FROM student s INNER JOIN result r

ON s.StudentNo=r.StudentNo

WHERE studentresult>=80

AND subjectno =(SELECT subjectno FROM `subject` WHERE subjectname='高等數學-2')

#方法三:使用子查詢

SELECT studentno,studentname FROM student WHERE studentno IN(

SELECT studentno FROM result WHERE studentresult>=80 AND subjectno=(

SELECT subjectno FROM `subject` WHERE subjectname='高等數學-2'))

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

---查詢《C語言-1》的前5名學生的成績信息:學號、姓名、分數

SELECT r.studentno,studentname,studentresult

FROM student s

INNER JOIN result r

ON s.StudentNo=r.StudentNo

INNER JOIN `subject` sub

ON r.SubjectNo=sub.SubjectNo

WHERE subjectname='C語言-1'

ORDER BY studentresult DESC

LIMIT 0,5;

SELECT r.studentno,studentname,studentresult

FROM student s

INNER JOIN result r

ON s.StudentNo=r.StudentNo

WHERE subjectno=(SELECT subjectno FROM `subject` WHERE subjectname='C語言-1')

ORDER BY studentresult DESC

LIMIT 0,5;

---使用子查詢實現,查詢郭靖同學所在的年級名稱

SELECT gradename FROM grade WHERE gradeid =

(SELECT gradeid FROM student WHERE studentname='郭靖')

---數學函數

SELECT ABS(-8) AS 絕對值; #絕對值

SELECT CEILING(9.3); #大於等於我的最小的整數

SELECT FLOOR(9.3); #小於等於我的最大的整數

SELECT RAND(); #返回0-1之間的隨機數

SELECT RAND(50); #以某個數作為種子,返回重複隨機數

SELECT SIGN(0); #符號函數,正數1 負數-1 0返回0

SELECT SIGN(-333);

SELECT SIGN(332);

---字符串函數

SELECT CHAR_LENGTH('好好學習數據庫'); #返回字符串中包含的字符數

SELECT CONCAT('我','愛','你,課工場'); #合併字符串

SELECT INSERT('我愛你課工場',1,3,'很愛'); #替換字符串,從某個位置開始,替換某個長度

SELECT INSERT('我愛你課工場',10,3,'很愛'); #如果起始位置超過了字符串長度,則返回源字符串

SELECT LOWER('I LOVE YOU'); #變小寫

SELECT UPPER('i LOVE you'); #變大寫

SELECT LEFT('課工場歡迎你',3); #返回從左邊截取的字符串

SELECT RIGHT('課工場歡迎你',3);

SELECT REPLACE('課工場歡迎你,你好','你','你們'); #替換 把你替換成你們

SELECT SUBSTR('課工場歡迎你',1,3); #截取,從哪個位置開始截取,截取多長

SELECT REVERSE('課工場歡迎你'); #反轉

---日期和時間函數

#獲取當前日期

SELECT CURRENT_DATE();

SELECT CURDATE();

#獲取當前的日期和時間

SELECT NOW();

SELECT LOCALTIME();

SELECT SYSDATE();

#分別獲取日期中的某個部分

SELECT YEAR(NOW());

SELECT MONTH(NOW());

SELECT DAY(NOW());

SELECT HOUR(NOW());

SELECT MINUTE(NOW());

SELECT SECOND(NOW());

---系統信息函數

SELECT VERSION();

SELECT USER();

#查詢姓李的同學,改成歷

SELECT REPLACE(studentname,'李','歷') AS 新名字 FROM student

WHERE studentname LIKE '李%'

---聚合函數

SELECT COUNT(studentname) FROM student;

SELECT COUNT(*) FROM student;

SELECT COUNT(1) FROM student;

SELECT SUM(studentresult) AS 總和 FROM result;

SELECT AVG(studentresult) AS 平均分 FROM result;

SELECT MAX(studentresult) AS 最高分 FROM result;

SELECT MIN(studentresult) AS 最低分 FROM result;

SELECT * FROM result;

#查詢不同課程的平均分,最高分,最低分

#前提:根據不同課程進行分組

SELECT subjectno,AVG(studentresult) AS 平均分,MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分

FROM result

GROUP BY subjectno;

SELECT subjectname,AVG(studentresult) AS 平均分,MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分

FROM result r INNER JOIN `subject` sub

ON r.SubjectNo=sub.SubjectNo

GROUP BY r.subjectno

HAVING 平均分>80 #分完組才能用having篩選

ORDER BY 平均分 DESC

LIMIT 0,4;

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

---事務處理

就是將一組SQL語句放在同一批次內去執行,如果一個SQL有錯,則所有的SQL都取消執行

#事務的ACID原則:

原子性(Atomic):一組SQL語句是一起執行的,要不全部成功,要不全部失敗

一致性(Consist):確保數據庫正確改變狀態後,來成功提交事務。要不數據處於事務改變前的狀態,要不數據就處於改變後的狀態

隔離性(Isolated):數據庫中存在很多事務處理,每一個事務互不影響。事務獨立和透明的

持久性(Durable):如果事務提交成功,對於數據的影響是持久的。

SET autocommit=0; #關閉自動提交模式

SET autocommit=1; #開啟自動提交模式

#--使用事務模擬實現轉賬

CREATE TABLE account(

id INT(4) PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(32) NOT NULL,

cash DECIMAL(9,2) NOT NULL #decimal(9,2) 最大長度9位,小數點後面兩位

)

DELETE FROM account;

INSERT INTO account(`name`,cash)

VALUES('A',2000),('B',10000);

--go

SET autocommit = 0;

START TRANSACTION;

UPDATE account SET cash=cash-500 WHERE NAME='A';

UPDATE account SET cash=cash+500 WHERE NAME='B';

#commit;

ROLLBACK;

SET autocommit = 1;

SELECT * FROM account;

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

---數據庫索引

作用:

提高查詢速度 #數據庫有行和列,對列進行查詢,將列設置索引,算法就能直接查到

確保數據唯一性

加速表與表之間的連接,實現表於表之間的參照完整性

使用分組和排序進行檢時,可以顯著減少時間

全文檢索字段進行搜索優化

分類:

主鍵索引(PRIMARY KEY)

#唯一標識的一條記錄

#特點:最常見的索引類型 確保數據記錄的唯一性 確定特定數據記錄在數據庫中的位置

唯一索引(UNIQUE)

#作用:避免同一個表中的列值重複

#只能有一個主鍵索引(非空唯一),可有多個唯一索引(唯一可空)

常規索引(INDEX)

#作用:快速定位特定數據

#index/key 都可以設置常規索引

#太多常規索引會影響數據插入刪除和修改操作,應加在查找條件的字段

全文索引(FULLTEXT)

#作用:快速定位特定數據

#只能用於myisam類型的數據表

#只能用於char、varchar、text數據列類型

#適合大型數據集

CREATE TABLE test1(

id INT(4) PRIMARY KEY,

testno VARCHAR(10) UNIQUE,

c VARCHAR(50),

d VARCHAR(20),

e TEXT,

INDEX `index_c`(c,d),

FULLTEXT(e)

)ENGINE=MYISAM;

CREATE TABLE test2(

id INT(4),

testno VARCHAR(10),

c VARCHAR(50),

d VARCHAR(20),

e TEXT,

PRIMARY KEY(id),

UNIQUE KEY(testno),

INDEX `index_c`(c,d),

FULLTEXT(e)

)ENGINE=MYISAM;

#添加索引方式三:先創建表,創建表完畢後,修改表添加索引

CREATE TABLE test3(

id INT(4),

testno VARCHAR(10),

c VARCHAR(50),

d VARCHAR(20),

e TEXT

)ENGINE=MYISAM;

ALTER TABLE test3 ADD PRIMARY KEY(id);

ALTER TABLE test3 ADD UNIQUE KEY(testno);

ALTER TABLE test3 ADD INDEX(c,d);

ALTER TABLE test3 ADD FULLTEXT(e);

--執行的性能檢驗(EXPLAIN)

EXPLAIN SELECT * FROM student WHERE studentno='1000';

#修改表 加全文索引

ALTER TABLE student ENGINE=MYISAM;

ALTER TABLE student ADD FULLTEXT(studentname);

#上面加了主鍵索引在explain檢驗中就用了主鍵索引 這裡加了全文索引沒有用全文索引

EXPLAIN SELECT * FROM student WHERE studentname LIKE '李%';

---使用全文索引

EXPLAIN SELECT * FROM student WHERE MATCH(studentname) AGAINST('love');

---刪除索引

DROP INDEX testno ON test3;

ALTER TABLE test3 DROP INDEX c;

ALTER TABLE test3 DROP INDEX e;

ALTER TABLE test3 DROP PRIMARY KEY;

#顯示索引信息

SHOW INDEX FROM student;

---索引準則

不是越多越好

經常變動的數據不要加索引

小數據量的表不要加索引

索引一般加在查找條件的字段

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

---數據庫備份與恢復

/*!40101.....*/ 40101屬於版本號,屬於mysql可執行語句,僅mysql使用,提高數據庫可移植性

#備份整個庫

mysqldump -uroot -proot school>h:/文件路徑/school.sql

mysqldump -uroot -proot school student grade>h:/文件路徑/school.sql

mysqldump --HELP

mysqldump --HELP |more

mysqldump -uroot -proot --skip-ADD-DROP-TABLE school student grade>h:/文件路徑/school.sql

mysqldump -uroot -proot --skip-ADD-DROP-TABLE -c school student grade>h:/文件路徑/school.sql

---mysqldump常用選項 mysql --HELP

#--add-drop-table (導出的腳本會加上drop table if exists 語句)

#--add-locks (會在insert語句中捆綁lock table和unlock table語句)

#-t 或 --no-create-info (忽略不寫create table語句)

#-c 或 --complete-insert (每個insert語句列上加上字段名)

#-d 或 --no-data (不寫表的任何行信息。對於只想轉儲表結構很有用)

#--where "where-condition",-w "where-condition" (只轉儲給定的where條件選擇的記錄)

#--opt

等同於指定:--ADD-DROP-TABLES

--ADD-locking

--CREATE-OPTION

--DISABLE-KEYS--EXTENDED-INSERT

--LOCK-TABLES

--QUICK

--SET-CHARSET

「MySQL」關於MySQL的基礎知識,常用方法總結,值得收藏

--source命令恢復

mysql>USE test;

mysql>source h:/文件路徑/school.sql

mysql命令恢復

mysql -uroot -pkgc test

3.使用SQL命令方式來備份和恢復

#將school數據庫student表中的學號、姓名兩列備份出去

USE school;

#注意:備份出去的文件不可以提前存在

SELECT studentno,studentname INTO OUTFILE 'h:/chenxuan/student.sql' FROM student;

#將備份出去的數據恢復到test的stutab表中

USE test;

CREATE TABLE stutab(

id INT(4),

sname VARCHAR(20)

)

LOAD DATA INFILE 'h:/student.sql' INTO TABLE stutab(id,sname);

SELECT * FROM stutab; #執行查詢所恢復的這個表的數據


分享到:


相關文章: