一.安裝mysql
徹底刪除mysql并且重裝的方法
刪除
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove
sudo apt autoreclean
重裝
sudo apt-get install mysql-server mysql-client
二.啟動(dòng)mysql
sudo service mysql start ##啟動(dòng)mysql服務(wù)器治唤;
mysql -u root -p ##root用戶鏈接服務(wù)器练湿,并輸入密碼;
mysql> SELECT VERSION(), CURRENT_DATE; ##查詢版本號(hào)和當(dāng)前日期;
mysql大小寫是等價(jià)的荷科,一般關(guān)鍵字大寫;
mysql>SELECT SIN(PI()/4, (4+1)*5);
兩個(gè)簡單的計(jì)算;
三.創(chuàng)建數(shù)據(jù)庫并插入數(shù)據(jù)
mysql> CREATE DATABASE mysql_shiyan; ##創(chuàng)建一個(gè)數(shù)據(jù)庫
mysql> show databases; ##顯示有哪些數(shù)據(jù)庫
mysql> use mysql_shiyan; ##連接剛剛創(chuàng)建的數(shù)據(jù)庫讶凉,成功后顯示database changed
mysql>show tables; ##查看數(shù)據(jù)庫中的表
mysql>CREATE TABLE employee(id int(10), name char(20), phone int(12));
創(chuàng)建一個(gè)表employee ,里面包含三列
mysql> CREATE TABLE department
-> (
-> dpt_name CHAR(20),
-> dpt_phone INT(12)
-> );
再創(chuàng)建一個(gè)department的table
數(shù)據(jù)類型 大小(字節(jié)) 用途 格式
INT 4 整數(shù)
FLOAT 4 單精度浮點(diǎn)數(shù)
DOUBLE 4 雙精度浮點(diǎn)數(shù)
ENUM 單選,比如性別 ENUM('a','b','c')
SET 多選 SET('1','2','3')
DATE 3 日期 YYYY-MM-DD
TIME 3 時(shí)間點(diǎn)或持續(xù)時(shí)間 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定長字符串
VARCHAR 0~255 變長字符串
TEXT 0~65535 長文本數(shù)據(jù)
mysql> SELECT * FROM employee; ##查看employee中的所有數(shù)據(jù)
mysql>INSERT INTO employee(id,name,phone) VALUES(01,’Tom’,110110110);
在employee中插入一個(gè)數(shù)據(jù)山孔;
插入SQL代碼:source懂讯,如:
Mysql>source /home/shiyanlou/Desktop/MySQL-04-01.sql
mysql>exit; ##退出mysql,吃飯去了
四.約束
cd Desktop
git clone http://git.shiyanlou.com/shiyanlou/SQL3
sudo service mysql start
mysql -u root -p
w23256010
1.主鍵
主鍵 (PRIMARY KEY)是用于約束表中的一行台颠,作為這一行的標(biāo)識(shí)符褐望,在一張表中通過主鍵就能準(zhǔn)確定位到一行,因此主鍵十分重要。行中的主鍵不能有重復(fù)且不能為空瘫里。
2.默認(rèn)值約束
3.唯一約束
4.非空約束
5.外鍵約束
五.SELECT語句
首先生成三張表格department,employee,和project;
1.基本語句:
SELECT 列名 FROM 表名 WHERE 限制條件实蔽;
SELECT name,age FROM employee WHERE age>25;
SELECT name,age,phone FROM employee WHERE name='Mary';
2.AND且 OR或
SELECT name,age FROM employee WHERE age<25 OR age>30;
SELECT name,age FROM employee WHERE age>25 AND age<30;
3.IN 和 NOT IN
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
4.通配符
其中 _ 代表一個(gè)未指定字符,% 代表不定個(gè)未指定字符
SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
5.對結(jié)果排序
默認(rèn)情況下谨读,ORDER BY的結(jié)果是升序排列盐须,而使用關(guān)鍵詞ASC和DESC可指定升序或降序排序。 比如漆腌,我們按salary降序排列贼邓,SQL語句為:
SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
7.內(nèi)置函數(shù)和計(jì)算
函數(shù)名: COUNT SUM AVG MAX MIN
作用: 計(jì)數(shù) 求和 求平均值 最大值 最小值
SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee; ##AS的作用是重命名
8.子查詢
設(shè)計(jì)多個(gè)表才能獲得所需信息;
如想要知道Tom所在部門做了幾個(gè)工程
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project
WHERE of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');
9.連接查詢JOIN
把多個(gè)表當(dāng)成一個(gè)表來使用
SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;
定價(jià)于
SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id;
六.?dāng)?shù)據(jù)庫的刪除和修改
刪除一個(gè)database
mysql> DROP DATABASE ‘database name’;
修改表名
RENAME TABLE former_name TO new_name;
ALTER TABLE former_name TO new_name;
ALTER TABLE former_name TO new_name;
刪除table
DROP TABLE table_name;
對表的修改
1.增加一列
ALTER TABLE table name ADD COLUMN column_name data_type restrict;
ALTER TABLE table name ADD column_name data_type restrict;
規(guī)定列的位置
ALTER TABLE employee ADD weight INT(4) DEFAULT 120 AFTER age;
把weight加入age的后面闷尿;
或者在最后加上FIRST加在最前面塑径;
2.刪除一列
ALTER TABLE 表名字 DROP COLUMN 列名字;
ALTER TABLE 表名字 DROP 列名字;
3.重命名一列
ALTER TABLE 表名字 CHANGE 原列名 新列名 數(shù)據(jù)類型 約束;
后面的數(shù)據(jù)類型不能省略,否則重命名失敗
4.改變數(shù)據(jù)類型
ALTER TABLE 表名字 MODIFY 列名字 新數(shù)據(jù)類型;
對表的內(nèi)容修改
1.修改表中的某個(gè)值
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 條件;
例如把’Tom’的age改為21填具,salary改為3000;
SELECT * FROM employee WHERE name=’Tom’;
UPDATE employee SET age=21,salary=3000 WHERE name=’Tom’;
2.刪除一行記錄
DELETE FROM 表名字 WHERE 條件;
六.索引及其他基本操作
1.索引
索引是一種與表有關(guān)的結(jié)構(gòu)统舀,它的作用相當(dāng)于書的目錄,可以根據(jù)目錄中的頁碼快速找到所需的內(nèi)容劳景。
當(dāng)表中有大量記錄時(shí)誉简,若要對表進(jìn)行查詢,沒有索引的情況是全表搜索:將所有記錄一一取出盟广,和查詢條件進(jìn)行一一對比闷串,然后返回滿足條件的記錄。這樣做會(huì)消耗大量數(shù)據(jù)庫系統(tǒng)時(shí)間筋量,并造成大量磁盤 I/O 操作烹吵。
而如果在表中已建立索引,在索引中找到符合查詢條件的索引值桨武,通過索引值就可以快速找到表中的數(shù)據(jù)肋拔,可以大大加快查詢速度。
對某個(gè)列添加索引:
ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);
2.視圖
視圖是從一個(gè)或多個(gè)表中導(dǎo)出來的表呀酸,是一種虛擬存在的表凉蜂。
CREATE VIEW 視圖名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
打印視圖:
SELECT * FROM v_emp;
3.導(dǎo)入導(dǎo)出
LOAD DATA INFILE ‘文件路徑’ INTO TABLE 表名字;
報(bào)錯(cuò):The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
是因?yàn)閙ysql沒有修改本地文件的權(quán)限,除非修改權(quán)限;
輸入mysql>show variables like '%secure%'; ##這個(gè)語句屌爆了
找到了secure_file_priv在/var/lib/mysql-files/
于是把load的文件放在這個(gè)路徑下就行了.
sudo cp 想要移動(dòng)的文件或路徑 移動(dòng)后的路徑
-b 同名,備分原來的文件 -f 強(qiáng)制覆蓋同名文件 -r 按遞歸方式保留原目錄結(jié)構(gòu)復(fù)制文件
導(dǎo)出也一樣要在secure_file_priv路徑下,語句是:
Mysql>SELECT 哪幾列 INTO OUTFILE ‘文件路徑’ FROM 表名字;
4.備份
mysqldump -u root -p 數(shù)據(jù)庫名>備份文件名; #備份整個(gè)數(shù)據(jù)庫
mysqldump -u root -p 數(shù)據(jù)庫名 表名字>備份文件名; #備份整個(gè)表
5.恢復(fù)
source 就是一條恢復(fù)語句
七.MySQL服務(wù)安裝及命令使用
Linux必須安裝MySQL-server和MySQL-client,想要更高級(jí)還要MySQL-Max RPM