mac如何在命令行中進(jìn)入默認(rèn)的MySQL數(shù)據(jù)庫
-
mysql.server start
開啟數(shù)據(jù)庫服務(wù)器咽笼,因?yàn)镸ySQL是客戶-服務(wù)的數(shù)據(jù)庫操作系統(tǒng)招刨。 -
mysql -u root
使用無密碼的root用戶名登陸夹供。
mac使用SequelPro連接本地MySQL
- host:127.0.0.1
- name:root
- port:3306(默認(rèn))
- 其他不用填
一:使用數(shù)據(jù)庫
一般來說灵份,我們會將關(guān)鍵字大寫,表名哮洽,列名小寫填渠。關(guān)鍵字也可以小寫。mysql語句不區(qū)分大小寫關(guān)鍵字鸟辅。
(一) 查看當(dāng)前MySQL當(dāng)中的所有數(shù)據(jù)庫
SHOW DATABASES;
(二)使用某一個數(shù)據(jù)庫前氛什,必須指明要使用的數(shù)據(jù)庫名字
USE databaseName;
查看當(dāng)前數(shù)據(jù)庫中的所有表
SHOW TABLES;
(三)查看當(dāng)前表中的所有列名
SHOW COLUMNS FROM tableName;
或者
DESCRIBE tableName;
二:檢索數(shù)據(jù)
(一)SELECT
- 單個列查詢
SELECT age FROM user;
- 多列查詢
SELECT name,age FROM user;
- 查詢所有列
SELECT * FROM user;
- 過濾相同的行。比如當(dāng)年齡為20的有五個人時匪凉,只會返回一個20
SELECT DISTINCT age FROM user;
- 限制結(jié)果枪眉。從第四行,開始檢索五行再层。因此如果僅僅是
LIMIT 4
就表示從第零行贸铜,檢索4行堡纬。
SELECT age FROM user LIMIT 3,5;
(二)排序檢索數(shù)據(jù)
- 單個列排序。也可以使用非檢索的列來排序蒿秦。
SELECT age FROM user ORDER BY age;
- 多個列排序烤镐。先按年齡排序,如果年齡相等棍鳖,再按照姓名排序炮叶。默認(rèn)是ASC升序排列。
SELECT age,name FROM user ORDER BY age,name;
- 多列排序渡处。先按年齡降序排列镜悉,如果年齡相等,就會再按姓名排序骂蓖。
SELECT age,name FROM user ORDER BY age DESC,name;
- 尋找年齡最大的人
SELECT age FROM user ORDER BY age DESC LIMIT 1;
注意上面的LIMIT需要再ORDER BY之后积瞒,不然就變成了查詢數(shù)據(jù)庫的限制,而不是查詢數(shù)據(jù)庫結(jié)果之后的限制了登下。
(三)過濾數(shù)據(jù)
1: WHERE關(guān)鍵字茫孔。會返回所有滿足條件的結(jié)果。ORDER BY應(yīng)該用在WHERE之后被芳。
SELECT age,name FROM user WHERE age=20;
- WHERE支持的操作符
操作符 | 說明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
BETWEEN | 在指定的兩個值之間 |
- 使用限定引號
SELECT age,name FROM user WHERE name <> 'android';
- 范圍值缰贝。在開始值和結(jié)束值之間還需要使用AND。
SELECT age,name FROM user WHERE age BETWEEN 18 AND 30;
- 檢查NULL
SELECT age,name FROM user WHERE name IS NULL;
上面的語句會返回名字為NULL的行畔濒。
- AND操作符,可以多個AND聯(lián)合使用
SELECT age,name,address FROM user WHERE address = 'beijing' AND age<=30;
上面這條語句表時返回地址是beijing剩晴,并且年齡小于等于30行。
- OR操作符侵状。AND優(yōu)先級高于OR的優(yōu)先級
SELECT age,name,address FROM user WHERE age=20 OR age=25;
返回年齡是20或者25的行赞弥。
- 使用圓括號
SELECT age,name,address FROM user WHERE (age=20 OR age = 25) AND address="beijing";
2:IN操作符
SELECT age,name,address FROM user WHERE age IN (20,25,18) ORDER BY name;
返回年齡在20,25趣兄,18這三個歲數(shù)的行绽左,并且按照名字排序。
3:NOT操作符
否定NOT后所跟的條件
SELECT age,name,address FROM user WHERE age NOT IN(50,40);
返回年齡不是50艇潭,40的所有行拼窥。
4:通配符過濾
LIKE指示后跟的搜索模式使用通配符而不是直接相等匹配。
SELECT age,name FROM user WHERE name LIKE 'xia%';
上面標(biāo)示返回所有name以xia開頭的行蹋凝。
%標(biāo)示任何字符出現(xiàn)任意次數(shù)鲁纠。xia%標(biāo)示,不管xia后面跟的是啥鳍寂,跟了多少個改含。
而%xia%,則表示只要包含著xia就會返回。%不會匹配NULL迄汛。如果這里使用了WHERE age LIKE '20'
那么并不會返回年齡是20的行捍壤。但是把LIKE換成REGEXP就可以刃唤。
SELECT age,name FROM user WHERE name LIKE 'x_a';
_下劃線只匹配一個字符。不能匹配0個或多個白群。
5:正則表達(dá)式
使用關(guān)鍵字REGEXP
SELECT age FROM user WHERE name REGEXP 'xia|nie'
返回匹配xia或者nie的行。
SELECT age FROM user WHERE name REGEXP '[xyz]ia'
返回匹配xia或者yia或者zia的行硬霍。其中’[xyz]xia‘也可以寫'[x-z]ia';
SELECT age FROM user WHERE name REGEXP '[^xyz]ia'
返回匹配除xia或者yia或者zia的所有的行翰舌。
用“\\”加在所有特殊符號之前進(jìn)行特殊符號匹配痊夭。之所以需要兩個是因?yàn)镸ySQL解釋一個,正則表達(dá)式解釋一個。
^用在集合中否定上忍,否則表示開始位置。
不使用數(shù)據(jù)庫測試正則表達(dá)式
SELECT 'hello' REGEXP '[0-9]'
(四)在SELECT中創(chuàng)建計算字段
- 拼接兩個列盯拱。MySql使用Concat()祥得,其他sql或許可以使用+或者用||來拼接。
SELECT Concat(name,'(',age,')') FROM user ;
上面就回以name(age)的方式輸出橄碾。實(shí)際上Concat是將name卵沉,(,age,)一共四個部分組合到一起的法牲。
SELECT Concat(RTrim(name),'(',age,')') FROM user ;
在上面的基礎(chǔ)上史汗,通過函數(shù)Trim(name)去掉了name中的左右兩邊空格。
SELECT Concat(RTrim(name),'(',age,')') AS title FROM user ;
將輸出的name(age)以title字段作為列名拒垃。
SELECT name,height*weight AS volume FROM user;
將height和weight相乘停撞,然后以別名volum作為字段輸出.
(五)使用函數(shù)
- Upper()
SELECT Upper(name) AS upName FROM user;
原有的name就會變成大寫,并以upName字段輸出悼瓮。
假如有字段birthday的存儲為2015-01-02 10:34:23那么我們僅僅知道她是2015-01-02那天生日戈毒,那么該怎么匹配呢?
SELECT name,birthday FROM user WHERE Date(birthday) = '2015-01-02';
因?yàn)镈ate()函數(shù)返回日期部分横堡,不返回時間埋市。
(六)匯總數(shù)據(jù)
SELECT AVG(age) AS avg_age FROM user where address= ‘beijing’;
返回beijing地區(qū)的年齡平均值。
SELECT AVG(DISTINCT age) AS avg_age FROM user where address= ‘beijing’;
返回beijing地區(qū)的不同年齡(當(dāng)有多個20時翅萤,只取一個用來計算)平均值恐疲。
- COUNT()兩種用法。一種是COUNT(*),總行數(shù)包括NULL行套么,一種是COUNT(address)培己,只對address非NULL的行數(shù)計數(shù)。
SELECT COUNT(*) AS num_count FROM user;
- SUM()不僅可以用來計算指定列值的和胚泌,還可以用來合計計算值省咨。
(七)分組數(shù)據(jù)
SELECT address,COUNT(*) AS count_address FROM user GROUP BY address;
返回按照地址分組的,每個地址的總行數(shù)玷室。
GROUP BY語句需要在WHERE語句之后零蓉,出現(xiàn)在ORDER BY語句之前笤受。
- 過濾分組
SELECT address,COUNT(*) AS count_address FROM user GROUP BY address HAVING COUNT(*)>=2;
返回按照地址分組的,每個地址至少有兩行的每個地址的總行數(shù)敌蜂。
- WHERE 與 HAVING的區(qū)別
where過濾實(shí)在分組之前箩兽,HAVING是在分組后過濾。where過濾掉行不在分組中章喉。
SELECT address,COUNT(*) AS count_address FROM user WHERE age >20 GROUP BY address HAVING COUNT(*)>=2;
首先去掉那些年齡小于21的行
然后按照地址分組
最后顯示分組中超過兩行的
(八) 子查詢
將第一次查詢的結(jié)果汗贫,作為第二次查詢的where條件。
將用戶表中的用戶id秸脱,作為訂單表中的用戶id進(jìn)行總數(shù)查詢計算落包,然后顯示。
(九) 聯(lián)結(jié)表
聯(lián)結(jié)是利用SQL的SELECT能執(zhí)行的最重要的操作摊唇。
1:簡單聯(lián)結(jié)/內(nèi)部聯(lián)結(jié)/等值聯(lián)結(jié)
假設(shè)供應(yīng)商表只有供應(yīng)商名稱和id咐蝇,產(chǎn)品表有產(chǎn)品信息及產(chǎn)品對應(yīng)的供應(yīng)商id。那么我們想要所有供應(yīng)商對應(yīng)的他的產(chǎn)品信息表如下:
SELECT vent_name,prod_name,prod_price FROM vent,product where vent.vent_id=product.vent_id ORDER BY vent_name;
上面的語句也可以轉(zhuǎn)換為
SELECT vernt_name,prod_name,prod_price FROM vent INNER JOIN product ON vent.vent_id=product.vent_id;
當(dāng)需要同時查閱多個表時巷查,既可以使用子查詢有序,也可以使用聯(lián)結(jié)查詢
字段別名是會返回到客戶端的,但是表別名則不會
2:自聯(lián)結(jié)
相同表中多次查詢可以使用自聯(lián)結(jié)岛请。我們在FROM中使用表別名笔呀。假設(shè)我們要在同一個產(chǎn)品表中,查看keyboard供應(yīng)商的其它產(chǎn)品髓需。因?yàn)檫@里要先根據(jù)keyboard查處供應(yīng)商许师,再根據(jù)供應(yīng)商來查產(chǎn)品表中的其它產(chǎn)品。
SELECT p1.prod_name FROM product AS p1,product AS p2 WHERE p1.vent_id=p2.vent_id AND p2.prod_name='keyboard' ;
3:自然聯(lián)結(jié)
4:外部聯(lián)結(jié)
對每個客戶下多少訂單進(jìn)行統(tǒng)計僚匆,同時還要包括哪些尚未下過訂單的客戶微渠。
SELECT custom.cust_id,order.order_num FROM custom LEFT OUTER JOIN order ON custom.cust_id=order.cust_id;
OUT JOIN ,必須使用關(guān)鍵字RIGHT 或LEFT關(guān)鍵字指定包括其所在行的表。左右是以O(shè)UT JOIN來劃分的咧擂。
(十)組合查詢
將多個SELECT語句的結(jié)果逞盆,合并為一個結(jié)果返回。多數(shù)情況下多個查詢語句組合和多個where查詢條件完成結(jié)果相同松申。我們可以直接用UNION
關(guān)鍵字將連兩個查詢語句聯(lián)合起來云芦。
SELECT name,age,address FROM user WHERE age=20 UNION SELECT name,age,address FROM user WHERE address="beijing";
使用UNION ALL
不會去掉多次查詢出現(xiàn)的相同行,否則自動去重贸桶。要想排序的話舅逸,ORDER BY語句出現(xiàn)在最后一條查詢語句后面。
(十一)全文本搜索
常用的引擎如MyISAM支持全文本搜索皇筛,但是InnoDB不支持琉历。
創(chuàng)建索引,可以在創(chuàng)建表時創(chuàng)建,也可以在之后修改旗笔。
INDEX,FULLTEXT,UNIQUE
SELECT describe FROM user WHERE Match(describe) Against ('love');
Match()可以指定多個列彪置。Against()指定匹配內(nèi)容。這里是在創(chuàng)建表帶時候蝇恶,就指定了FULLTEXT(describe)建立了索引拳魁。
三:插入數(shù)據(jù)
(一)依賴列的順序以及列的信息來插入行
這里假定第一列為自增量用戶id,第二列住址可以為NULL,第三列姓名撮弧,第四列年齡的猛。如果不指定列名,就要把所有列的值都給出想虎。因?yàn)榈谝涣惺亲栽龅模虼瞬荒苤付ㄖ怠?/p>
INSERT INTO user VALUES(NULL,NULL,'xiaguangcheng',25);
(二)安全的INSERT語句,可以不依賴列在表中的順序指定列名叛拷,但是值必須按照指定的列名順序給出舌厨。對于省略的列,要么在表定義中有默認(rèn)值忿薇,要么允許NULL裙椭。
INSERT INTO user(name,address,age) VALUES('xiaguangcheng','beijing',25);
(三)降低更新/刪除/添加的優(yōu)先級
因?yàn)楦滤饕臅r,會影響查詢語句署浩,所以可以降低其優(yōu)先級
INSERT LOW_PRIORITY INTO ...
(四)插入多行
插入多行揉燃,可以將兩條插入語句中間用分號隔開。也可以在列名和次序相同的情況下筋栋,使用多個VALUES(),(),();后面的括號來添加炊汤。
INSERT INTO user(name,address,age) VALUES('xiaguangcheng','beijing',25),('xiaxuele','china',20);
(五)將舊表數(shù)據(jù)導(dǎo)入新表
INSERT INTO user(name,address,age) SELECT name,address,age FROM user_old;
上面并沒有導(dǎo)入作為自增量的userid,因?yàn)橐U蟯serid是唯一的弊攘。所以導(dǎo)入新數(shù)據(jù)抢腐,mysql會自動增加。如果能夠確保舊表與新表的userid不會重復(fù)襟交,那么也可以導(dǎo)入迈倍。當(dāng)然SELECT查詢的列名和INSERT INTO插入的列名可以不一樣。
四:更新刪除數(shù)據(jù)
(一)更新指定行
UPDATE user SET address='henan' WHERE name='xiaguangcheng';
將用戶xiaguangcheng的地址更新為henan捣域。如果沒有WHERE就會更新所有列啼染。
UPDATE user SET address='hubei',age=20 WHERE name='xiaguangcheng';
更新多個列用逗號隔開。當(dāng)更新多個列時焕梅,如果某個更新出錯迹鹅,那么這一次操作的所有更新都會取消。如果在更新出錯時贞言,想要出錯之前的更新也生效徒欣,就使用IGNORE
UPDATE IGNORE user...
刪除某個列的值,可以將其設(shè)置為NULL蜗字,如果允許為NULL值的話打肝。
(二)刪除數(shù)據(jù)
- 刪除某行
DELETE FROM user WHERE name='xiaguangcheng';
刪除某列可以使用UPDATE脂新。如果沒有WHERE就會刪除所有行。而刪除所有行粗梭,還可以使用
TRUNCATE TABLE user
上面的語句實(shí)際上是刪除了原來的表争便,重新建了一個表。
五:創(chuàng)建和操作表
CREATE TABLE user (
user_id int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
address char(100) NULL,
age int NOT NULL DEFAULT 10,
PRIMARY KEY(user_id)
)ENGINE=InnoDB;
數(shù)據(jù)庫中的表需要手動刪除断医,因此不用擔(dān)心會覆蓋掉滞乙。下面的語句是先檢查是否有同名表,但不檢查結(jié)構(gòu)是否一樣鉴嗤。如果沒有再創(chuàng)建新表斩启,如果有就不創(chuàng)建。
CREATE TABLE IF NOT EXISTS user (
user_id int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
address char(100) NULL,
age int NOT NULL,
PRIMARY KEY(user_id)
)ENGINE=InnoDB;
- 主鍵即可以是單列醉锅,也可以是多列.不能為NULL值兔簇。
PRIMARY KEY(user_id,name)
每個表只能有一個AUTO_INCREMENT列。如果該列被手動插入了一個唯一值硬耍,那么后續(xù)的增量將開始使用該手工插入的值垄琐。
如何獲取自動增量的值
SELECT last_insert_id();
返回最后一個AUTO_INCREMENT值。
- 默認(rèn)值
age int NOT NULL DEFAULT 10
如果沒有指定经柴,就會默認(rèn)為10
- ENGINE 默認(rèn)引擎狸窘,如果不顯示指定,會有默認(rèn)值坯认。
InnoDB支持事務(wù)翻擒,不支持全文本搜索。
MyISAM支持全文本搜索牛哺,不支持事務(wù)韭寸。
- 更改表
ALTER TABLE user ADD height int NOT NULL DEFAULT 160;
給user表新增一個height字段。
ALTER TABLE user DROP COLUMN height;
刪除user表中的height字段荆隘。
ALTER常用來定義外鍵恩伺。不過這個語句在sqlite中并不好用。
ALTER TABLE student ADD CONSTRAINT student_id FOREIGN KEY (user_id) REFERENCES user(user_id);
上面的語句中椰拒,student_id是約束名稱晶渠,第一個出現(xiàn)的user_id是student表中的字段,第二個user_id是user表中的字段燃观。
所以在sqlite中定義外鍵褒脯,最好在創(chuàng)建表的時候就指定。而且需要在命令行中打開支持開關(guān)缆毁。
PRAGMA foreign_keys = ON;
創(chuàng)建:
CREATE TABLE album(
albumartist TEXT,
albumname TEXT,
albumcover BINARY,
PRIMARY KEY(albumartist, albumname)
);
CREATE TABLE song(
songid INTEGER,
songartist TEXT,
songalbum TEXT,
songname TEXT,
FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname)
);
復(fù)雜表結(jié)構(gòu)更改為了安全起見番川,一般步驟如下:
1:用希望的所有列創(chuàng)建一個新表
2:使用INSERT SELECT 語句復(fù)制內(nèi)容到新表
3:檢驗(yàn)包含所需數(shù)據(jù)的新表
4:重命名舊表
5:重命名新表
6:根據(jù)需要,重新創(chuàng)建觸發(fā)器,存儲過程颁督,索引践啄,外鍵。
- 刪除表
DROP TABLE user;
- 重命名表名
RENAME TABLE user TO new_user;
六:視圖
視圖能夠簡化復(fù)雜的聯(lián)結(jié)沉御。視圖是虛擬表屿讽。
- 創(chuàng)建視圖使用CREATE VIEW
- 查看創(chuàng)建視圖的語句SHOW CREATE VIEW viewname
- 刪除視圖DROP VIEW viewname
- 更新視圖可以先DROP再CREATE。也可以使用CREATE OR REPLACE VIEW
CREATE VIEW virtual_user AS SELECT name,age FROM user,student WHERE user.user_id=student.user_id;
檢索20歲還是學(xué)生的用戶
SELECT name,age FROM virtual_user WHERE age=20;
再比如要顯示name(age)
CREATE VIEW temp_user AS SELECT Concat(name,'(',age,')') as temp_title FROM user;
再這個temp_user視圖上吠裆,查詢
SELECT * FROM temp_user;
視圖更新收到分組伐谈,聯(lián)結(jié),子查詢试疙,并诵棵,聚集,DISTINCT等限制祝旷,主要用在檢索(select)上履澳,而不用于更新(update,insert,delete);
七:使用存儲過程
存儲過程:就是為以后的使用而保存的一條或者多條有步驟的MySQL語句的集合。簡單缓屠,安全,高性能护侮。
創(chuàng)建存儲過程
CREATE PROCEDURE xyz()
BEGIN
SELECT Avg(age) AS avg_age FROM user;
END;
如果是在命令行中執(zhí)行上面這段語句會出錯敌完,需要修改為
DELIMITER //
CREATE PROCEDURE xyz()
BEGIN
SELECT Avg(age) AS avg_age FROM user;
END //
DELIMITER ;
調(diào)用上面的存儲過程
CALL xyz();
刪除上面的存儲過程
DROP PROCEDURE xyz;
刪除的時候不需要括號。
上面這個例子是不使用參數(shù)的存儲過程羊初,還有使用參數(shù)的存儲過程滨溉,略復(fù)雜。
八:使用游標(biāo)
游標(biāo)(cursor)是一個存儲在MySQL服務(wù)器上的數(shù)據(jù)庫查詢, 它不是一條SELECT語句,而是被該語句檢索出來的結(jié)果集长赞。不像多數(shù)DBMS,MySQL游標(biāo)只能用于 存儲過程(和函數(shù))晦攒。
CREATE PROCEDURE xyz()
BEGIN
DECLARE abc CURSOR
FOR
SELECT name FROM user;
END;
DECLARE定義了一個abc的游標(biāo)。使用游標(biāo)需要
OPEN abc;
關(guān)閉游標(biāo)
CLOSE abc;
當(dāng)游標(biāo)打開之后可以使用FETCH語句分別訪問他的每一行得哆。
九:觸發(fā)器
當(dāng)某個表發(fā)生更改時自動處理脯颜。創(chuàng)建觸發(fā)器
- 唯一的觸發(fā)器名
- 觸發(fā)器關(guān)聯(lián)的表
- 響應(yīng)的活動(DELETE,INSERT,UPDATE)
- 何時執(zhí)行活動
CREATE TRIGGER newuser AFTER INSERT ON user FOR EACH ROW SELECT 'user add';
觸發(fā)器僅支持表,不支持視圖和臨時表贩据。每個表最多支持六個觸發(fā)器栋操,之前之后的插入,更新和刪除饱亮。所以六個矾芙。
刪除觸發(fā)器
DROP TRIGGER newuser;
例子
CREATE TRIGGER newuser AFTER INSERT ON user FOR EACH ROW SELECT NEW.user_id;
每次插入一個用戶,都會返回插入用戶的自增id近上。假設(shè)user_id是自增的剔宪。這里面的NEW虛擬表是系統(tǒng)維護(hù)的,不用操心。
例子
將刪除的行保存到一個存檔表中
CREATE TRIGGER deleteuser BEFORE DELETE ON user FOR EACH ROW
BEGIN
INSERT INTO archive_user(user_id,name,address,age) VALUES(OLD.user_id,OLD.name,OLD.address,OLD.age);
END;
其中archive_user是存檔表葱绒。OLD是系統(tǒng)維護(hù)的虛擬表感帅。
當(dāng)我們使用UPDATE觸發(fā)器時
- 可以使用OLD訪問更新之前的值,使用NEW訪問更新之后的值哈街。
CREATE TRIGGER updateuser BEFORE UPDATE ON user FOR EACH ROW SET NEW.name=Upper(NEW.name);
每次更新的時候留瞳,名字都是大寫。
十:事務(wù)管理
transaction 一組sql語句
rollback 撤銷指定sql語句
commit 將未存儲的sql語句結(jié)果寫入數(shù)據(jù)庫表
savepoint 事務(wù)中的臨時占位符骚秦,可以對它發(fā)布會退她倘。
開始事務(wù)
START TRANSACTION;
事務(wù)不能回退SELECT語句,也不能回退CREATE或者DROP操作作箍。
SELECT * FROM user;
START TRANSACTION;
DELETE FROM user;
SELECT * FROM user;
ROLLBACK;
SELECT * FROM user;
1:顯示user表非空
2:開啟事務(wù)
3:刪除user表所有行
4:顯示user表已經(jīng)為空
5:回退事務(wù)
6:顯示user表非空
事務(wù)要么被顯示提交關(guān)閉硬梁,要么被回退關(guān)閉。
START TRANSACTION;
DELETE FROM user WHERE user_id=100;
DELETE FROM student WHERE user_id=100;
COMMIT;
如果第二條delete沒有執(zhí)行成功胞得,那么第一條也會被自動撤銷荧止。否則兩條都執(zhí)行成功,就提交阶剑。
- 部分回退使用savepoint跃巡。
START TRANSACTION;
DELETE FROM user WHERE user_id=100;
SAVEPOINT delete1;
DELETE FROM student WHERE user_id=100;
SAVEPOINT delete2;
DELETE FROM student1 WHERE user_id=100;
ROLLBACK TO delete1;
當(dāng)三行都正確刪除之后,回退到指定點(diǎn)delete1;那么user表就回保存完好牧愁。
十一:全球化
SHOW CHARACTER SET;
顯示可用字符集素邪。
SHOW COLLATION;
顯示完整字符集。
SELECT * FROM user ORDER BY name COLLATE latin1_general_cs;
使用COLLATE指定一個備用的校對順序猪半。
十二:訪問控制
為不同的用戶兔朦,設(shè)置不同的操作權(quán)限。MySQL上的所有用戶被保存在一個名為mysql的數(shù)據(jù)庫中
use mysql;
SELECT user FROM user;
即可查看所有的用戶磨确。
- 創(chuàng)建一個用戶沽甥,這里給了密碼,也可以不設(shè)置密碼乏奥。
CREATE USER xia IDENTIFIED BY 'xiapassword';
- 重命名一個用戶
RENAME USER xia TO xiaguangcheng;
- 刪除一個用戶
DROP USER xiaguangcheng;
- 查看用戶權(quán)限
SHOW GRANTS FOR xiaguangcheng;
權(quán)限用用戶名和主機(jī)名結(jié)合定義摆舟。
- 更改權(quán)限
GRANT SELECT ON school.* TO xia;
給用戶xia在school數(shù)據(jù)庫中所有表的SELECT查詢權(quán)限。
- 撤銷權(quán)限
REVOKE SELECT,INSERT ON school.* FROM xia;
權(quán)限包括:
整個服務(wù)器中所有數(shù)據(jù)庫
整個數(shù)據(jù)庫中所有表
整個表
指定列
指定存儲過程
更改用戶密碼
SET PASSWORD FOR xia=Password('abc23rdf&4');
優(yōu)化
- 優(yōu)化查詢語句邓了,實(shí)驗(yàn)聯(lián)結(jié)盏檐,并,子查詢等驶悟。
- 使用EXPLAIN讓mysql解釋它如何執(zhí)行一跳查詢語句胡野。
- 一般來說,存儲過程要比一條一條執(zhí)行要快痕鳍。
- 盡量不要使用通配符*
- 在導(dǎo)入數(shù)據(jù)時硫豆,關(guān)閉自動體檢龙巨。導(dǎo)入數(shù)據(jù)后,再建立索引熊响。
- or條件太多旨别,可以用多條select語句用union連接。
- fulltext替換like
MySQL數(shù)據(jù)類型
附
adb root //確保當(dāng)前打開的模擬器是以root身份打開的洪碳。
cd /data/user/0/packageName/databases // 進(jìn)入databases目錄就可以ls递览,查看dbName了。
sqlite3 dbName.db //打開dbName.db數(shù)據(jù)庫瞳腌。
.table //可以列出打開的這個數(shù)據(jù)庫的所有表名绞铃。
pragma table_info(tableName) // 可以查看表結(jié)構(gòu)
.schema tableName //可以查看建表語句
select * from sqlite_master; //由于每個數(shù)據(jù)庫都有一個sqlite_master表用來保存建表信息。因此可以查看所有表的創(chuàng)建信息嫂侍。
.header on // 輸出時附帶列名
.timer on //輸出時附帶cpu執(zhí)行時間
.mode column // 左對齊輸出
.quit // 退出