Mysql學習筆記

MYSQL學習筆記:

1.MYSQL登陸:

mysql -h 127.0.0.1 -uroot -proot


mysql -h hostname|IP -P 端口 -u username -p密碼 DatabaseName -e "sql語句"




數據庫相關:

2.創建數據庫:CREATE DATABASE 庫名;

如:CTEATE DATABASE school;(大小寫均可)


3.查看數據庫:SHOW DATABASES;


4.刪除數據庫:DROP DATABASE 庫名;

如:DROP DATABASE school;


5.查看數據庫支持的存儲引擎:

SHOW ENGINES\G

SHOW VARIABLES LIKE 'have%';

SHOW VARIABLES LIKE 'storage_engine';





表相關:

6.創建表:CREATE TABLE 表名(屬性名 數據類型 【完整性約束條件】,

屬性名 數據類型 【完整性約束條件】,

屬性名 數據類型 【完整性約束條件】);


如:CREATE TABLE example0(id INT,name VARCHAR(20),sex BOOLEAN);


7.創建帶有單字段主鍵的表:屬性名 數據類型 PRIMARY KEY

如:CREATE TABLE example1(stu_id INT PRIMARY KEY,stu_name VARCHAR(20),stu_sex BOOLEAN);


8.多字段主鍵的表:PRIMARY KEY(屬性名1,屬性名2....屬性名n)

如:CREATE TABLE example2(stu_id INT,course_id INT,stu_name VARCHAR(20),stu_sex BOOLEAN,PRIMARY KEY(stu_id,course_id));



9.設置表的外鍵:CONSTRAINT 外鍵別名 FOREIGN KEY(屬性1.1,屬性1.2) REFERENCES 主表名(屬性2.1,屬性2.2)

如:CREATE TABLE example3(id INT PRIMARY KEY,stu_id INT,course_id INT,stu_name VARCHAR(20),stu_sex BOOLEAN,CONSTRAINT c_fk FOREIGN KEY(stu_id,course_id) REFERENCES example2(stu_id,course_id));


10.設置非空表:屬性名 數據類型 NOT NULL

如:CREATE TABLE example4(stu_id INT PRIMARY KEY,stu_name VARCHAR(20) NOT NULL,stu_sex BOOLEAN);


11.設置表的唯一性約束:屬性名 數據類型 UNIQUE

如:CREATE TABLE example5(stu_id INT PRIMARY KEY,stu_name VARCHAR(20) UNIQUE,stu_sex BOOLEAN);


12.設置表的屬性值字段自動增加:屬性名 數據類型 AUTO_INCREMENT

如:CREATE TABLE example6(stu_id INT PRIMARY KEY AUTO_INCREMENT,stu_name VARCHAR(20) UNIQUE,stu_sex BOOLEAN);


13.設置表的屬性的默認屬性:屬性名 數據類型 DEFAULT 默認值

如:CREATE TABLE example7(stu_id INT PRIMARY KEY AUTO_INCREMENT,stu_name VARCHAR(20) DEFAULT 'ZB',stu_sex BOOLEAN);


14.查看錶結構:DESCRIBE 表名;(DESC 表名;)

如:DESC example0;


15.查看詳細結構語句:SHOW CREATE TABLE 表名;

如:SHOW CREATE TABLE example1 \G


16.修改表:ALTER TABLE 舊錶名 RENAME 新表名;

如:ALTER TABLE example0 RENAME example110;


17.修改字段的數據類型:ALTER TABLE 表名 MODIFY 屬性名 數據類型;

如:ALTER TABLE example0 MODIFY name VARCHAR(30);


18.修改字段名:ALTER TABLE 表名 CHANGE 舊屬性名 新屬性名 新數據類型;

如:ALTER TABLE example0 CHANGE stu_name name VARCHAR(20);


19.增加字段:ALTER TABLE 表名 ADD 屬性名1 數據類型 [完整性約束條件] [FIRST| AFTER 屬性2];

如:ALTER TABLE user ADD phone VARCHAR(20);

ALTER TABLE user ADD num INT FIRST;

ALTER TABLE user ADD address CHAR(30) AFTER num;


20.刪除字段:ALTER TABLE 表名 DROP 屬性名;

如:ALTER TABLE user DROP num;


21.修改字段的排列位置: ALTER TABLE 表名 MODIFY 屬性名1 數據類型 FIRST|AFTER 屬性名2;

如:ALTER TABLE user MODIFY name VARCHAR(30) FIRST;

ALTER TABLE user MODIFY name VARCHAR(30) AFTER sex;

22.修改表的存儲引擎: ALTER TABLE 表名 ENGINE=存儲引擎名;

如:ALTER TABLE user ENGINE=MyISAM;


23.刪除表的外鍵約束:ALTER TABLE 表名 DROP FOREIGN KEY 外鍵別名;

如:ALTER TABLE example DROP FOREIGN KEY c_fk;


24.刪除沒有被動關聯的普通表:DROP TABLE 表名;

如:DROP TABLE example;



索引相關:

25.創建索引:CREATE TABLE 表名(屬性名 數據類型 [完整性約束],

屬性名 數據類型 [完整性約束],

......

屬性名 數據類型[完整性約束],

[UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [別名](屬性1[(長度)] [ASC|DESC]));

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名 (屬性名[(長度)] [ASC|DESC])

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名(屬性名[(長度)] [ASC|DESC])

如:CREATE TABLE index1(id INT,

name VARCHAR(20),

sex BOOLEAN,

INDEX(id));

CREATE TABLE index2(id INT UNIQUE,

name VARCHAR(20),

sex BOOLEAN,

UNIQUE INDEX index2_id(id));

CREATE INDEX index7_id ON example0(id);

ALTER TABLE example0 ADD INDEX index_id8(id(4));


26.刪除索引:DROP INDEX 索引名 ON 表名;

如:DROP INDEX index_id ON index2;




視圖相關:

27.創建視圖:CREATE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]

VIEW 視圖名[(屬性清單)]

AS SELECT 語句

[WITH [CASCADED|LOCAL] CHECK OPTION];

如:CREATE VIEW TEST AS SELECT * FROM INDEX1;

CREATE VIEW

worker_view1(name,department,sex,age,address)

AS SELECT name,department.d_name,sex,2009-birthday,address

FROM worker,department WHERE work.d_id=department.d_id

WITH LOCAL CHECK OPTION;

28.查看視圖:DESC 視圖名;

如:DESC work_views;


29.查看視圖的基本信息:SHOW TABLE STATUS LIKE '視圖名';

如:SHOW TABLE STATUS LIKE 'work_views';


30.修改視圖:CREATE OR REPLACE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]

VIEW 視圖名[(屬性清單)]

AS SELECT 語句

[WITH [CASCADED|LOCAL] CHECK OPTION];

ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]

VIEW 視圖名[(屬性清單)]

AS SELECT 語句

[WITH [CASCADED|LOCAL] CHECK OPTION];

如:CREATE OR REPLACE ALGORITHM=TEMPTABLE

VIEW depaartment_view1(department,function,location)

AS SELECT d_name,function,address FROM department;

ALTER ALGORITHM=TEMPTABLE

VIEW depaartment_view1(department,function,location)

AS SELECT d_name,function,address FROM department;


31.更新視圖:UNDATE 視圖名 SET 屬性名='屬性值';

UNDATE view1 SET name=‘科研部’;


32.刪除視圖:DROP IF EXISTS 視圖名;

如:DROP IF EXISTS view1;


查詢語句:SELECT 屬性列表 FROM 表名或者視圖列表 [WHERE 條件表達式1] [GROUP BY 屬性名1 [HAVING 條件表達式2]] [ORDER BY 屬性名2[ASC|DESC]];

如:SELECT num,name,age,sex,homeeaddr FROM employee;

查詢在一個自定義的範圍值:SELECT * FROM people WHERE age IN (25,26);

查詢在一個自定義的範圍值:SELECT * FROM people WHERE age BETWEEN 20 AND 25;

某字段模糊查詢:SELECT * FROM people WHERE age LIKE '2%';(%表示任意長度的字符串,_表示一個字符)

查詢某個字段是否爲空:SELECT * FROM people WHERE info IS NULL;

帶AND的多條件查詢:SELECT * FROM people WHERE age > 15 AND age <25;

帶OR的多條件查詢:SELECT * FROM people WHERE name LIKE '張%' OR age <25;(AND的運算級大於OR,就是說又AND和OR同時存在的時候先計算AND)

清除字段中相同的值:SELECT DISTINCT 屬性名 如:SELECT DISTINCT age FROM people;

對查詢結果按某個字段排序:SELECT * FROM people ORDER BY age;


GROUP BY 與GROUP_CONCAT()函數一起使用:SELECT sex,GROUP_CONCAT(name) FROM people GROUP BY sex;

SELECT sex,GROUP_CONCAT(name) FROM people GROUP BY sex WITH ROLLUP;


LIMIT限制查詢結果:LIMIT (初始位置,)記錄數

如:SELECT * FROM people LIMIT 1,2;


33.多個表間查詢,2個表的內連接查詢:SELECT num name,employee.d_id,age,sex,d_name,function FROM employee,department WHERE employee.d_id=department.d_id;


34.外連接查詢:SELECT 屬性列表 FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表名1.屬性名1=表名2.屬性名2;

如:SELECT num name,employee.d_id,age,sex,d_name,function FROM employee LEFT JOIN department ON employee.d_id=department.d_id;


35.子查詢:SELECT * FROM employee WHERE d_id IN (SELECT d_id FROM department);

SELECT d_id,d_name from department where d_id!=(select d_id from employee where age=24);

SELECT * FROM employee EXISTS (SELECT d_name FROM department where d_id=1003);

SELECT * FROM computer_stu WHERE score >=ANY(SELECT score FROM scholarship);

SELECT * FROM computer_stu WHERE score >=ALL(SELECT score FROM scholarship);(ANY是滿足條件之一即可,ALL所有條件,ANY說的是獲得獎學金的人,ALL說的是獲得1等獎學金的人)


36.合併查詢結果:SELECT 語句1 UNION|UNION ALL SELECT 語句2;


37爲表取別名:SELECT * FROM department d where d.id=1001;

38爲字段取別名:SELECT id AS department_id FROM department;


39.正則表達式匹配查詢:屬性名 REGEXP '匹配方式'

^字符串開始

$字符串結束

.任意一個字符

[(^)字符集合](不)匹配字符集合的任意字符

S1|S2|S3匹配s1,s2,s3的任意字符

如:select * from people where age REGEXP '^2';

select * from people where age REGEXP '5$';

39.插入數據:INSERT INTO 表名 VALUES(值1,值2...值n);

INSERT INTO 表名(屬性1,屬性2.。。屬性n) VALUES(值1,值2.。。值n);


INSERT INTO people VLAUES(1001,'zb1','nan','beijing'),

(1002,'zb2','nan','beijing'),

(1003,'zb3','nan','beijing');

40.將查詢的結果插入到表中:INSERT INTO people(num,name,sex,age,homeaddr) SELECT * FROM people_1 WHERE num=6;

41.更新數據:UPDATE 表名 SET 屬性名1=取值1,屬性名2=取值2 where 條件表達式;

如:UPDATE people SET name='zb',homeaddr='beijing' WHERE num=1;


42.刪除數據:DELETE FROM 表名 WHERE [條件表達式];

如:DELETE FROM people WHERE num=1;



用戶操作:

創建用戶:CREATE USER 'test1'@'localhost' IDENTIFIED BY 'PASSWD';

INSERT INTO mysql.user(Host,User,Password) VALUES('localhost','test2',PASSWORD('passwd'));

GRANT SELECT ON database.table(test.*) TO 'user'@'%' IDENTIFIED BY 'passwd';

刪除用戶:DROP USER 'test'@'localhost';

DELETE FROM mysql.user WHERE Host='hostname' AND User='Username';


root修改自己密碼:mysqladmin -uroot -proot password "new_password";

UPDATE mysql.user SET Password=PASSWORD("new_password") WHERE User='root' AND Host='hostname';(加載FLUSH PRIVILEGES)

登陸後用SET PASSWORD=PASSWORD("new_password");

root修改普通用戶密碼:SET PASSWORD FOR 'username'@'hostname'=PASSWORD("new_password");

UPDATE mysql.user SET Password=PASSWORD("new_password") WHERE User='user' AND Host='hostname';(FLUSH PRIVILEGES)

GRANT SELECT ON database.table(*.*) TO 'user'@'%' IDENTIFIED BY 'passwd';

root密碼丟失解決辦法:windows系統 停止mysql,然後mysqld --skip-grant-tables

linux系統 停止mysql,然後mysqld_safe --skip-grant-tables或者/etc/init.d/mysql start --mysqld --skip-grant-tables

權限處理:

授權: GRANT SELECT,UPDATE ON *.* TO 'test'@'localhost' IDENTIFIED BY 'test' WITH GRANT OPTION(被授權用戶可以授權給別的用戶);

回收權限:REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'test'@'localhost';(回收所有權限)

如:REVOKE UPDATE ON *.* FROM 'test'@'localhost';


數據庫備份:mysqldump -uroot -p test people >c:\a.sql

備份多個數據庫:mysqldump -uroot -p -databases dbname1 dbname2 >backupname.sql

備份所有數據庫:mysqldump -uroot -p --all-databases>backupname.sql


數據庫還原:mysql -uroot -proot test < c:\a.sql


相同版本間mysql遷移:mysqldump -h name1 -uroot -ppaswd1 --all-databases| mysql -h host2 -uroot -ppassword2


導出查詢的部分數據:SELECT 列名 FROM table WHERE 條件語句 INTO OUTFILE '目標文件';


SELECT * FORM test.student INTO OUTFILE 'C:\1.TXT'

FIELDS TERMINATED BY '\、' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '\>' TERMINATED BY '\r\n';


用mysqldump導出文本文件:mysqldump -uroot -pPassword -T 目標目錄 dbname table [option];

如:mysqldump -uroot -proot -T 'c:\1.txt' "--fields-terminated-by=," "--fields-optionally-enclosed-by=""


用mysql命令導出文本文件:mysql -uroot -pPassword -e "SELECT語句" dbname>c:/name.txt;


用LOAD DATA[LOCAL] INFILE file INTO TABLE table[OPTION];導入文本文件


LOAD DATA INFILE 'C:\student.txt' INTO TABLE student FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';


日誌文件:

二進制日誌:

啓動二進制日誌在my.ini中【mysqld】下添加,log-bin=目錄+日誌名(c:/date),重啓mysql服務

查看二進制日誌:mysqlbinlog 目錄+日誌文件(c:/date.000001)

刪除所有二進制日誌:RESET MASTER;

根據編號刪除小於該編號指定的二進制日誌:PURGE MASTER LOGS TO 'filename.number';

根據時間刪除二進制日誌:PURGE MASTER LOGS TO 'yyyy-mm-dd hh:MM:ss';


使用二進制日誌還原mysql數據:mysqlbinlog filename.number|mysql -uroot -p


停止和開啓二進制日誌的方法:SET SQL_LOG_BIN=0(停止,1爲開啓)


修改錯誤日誌的目錄:在my.ini中log-err=目錄+日誌名

刪除錯誤日誌:mysqladmin -uroot -p flush-logs


開啓通用查找日誌(記錄mysql的基礎操作):在my.ini中在[mysqld]下添加log=Dir/filename

刪除錯誤日誌:mysqladmin -uroot -p flush-logs


慢查詢日誌:用來記錄執行時間超時的查詢語句

開啓方式:在[mysqld]中添加:log-slow-queries=Dir/filename和long_query_time=n(設定的時間,不設置long_query_time默認是10s)



數據庫優化:

查看數據庫性能:SHOW STATUS LIKE 'value';(差用value字段:Connetions連接數,Uptime上線時間,Slow_queries慢查詢次數,Com_select查詢次數,Com_insert插入次數,Com_update更新次數,Com_delete刪除次數)


分析查詢語句:EXPLAIN(DESC) SELECT 語句;


加快插入速度禁用索引:ALTER TABLE 表名 DISABLE KEYS;

開啓索引:ALTER TABLE 表名 ENABLE KEYS;


禁用唯一性檢查:SET UNIQUE_CHECKS=0;

開啓唯一性檢查:SET UNIQUE_CHECKS=1;


分析表:ANALYZE TABLE 表名;

檢查表:CHECK TABLE 表名 [option];

優化表:OPTIMIZE TABLE 表名;









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章