Mysql-基礎(chǔ)語法
導(dǎo)語
本博文主要是簡(jiǎn)述選擇數(shù)據(jù)庫和對(duì)表內(nèi)容的增焕妙、刪拴事、改和查的一些基本語法
USE
語法:
-
USE databaseName;
打開名為databaseName的數(shù)據(jù)庫
SHOW
語法:
-
SHOW DATABASES;
返回可用庫的列表 -
SHOW TABLES;
返回當(dāng)前庫內(nèi)的可用表的列表 -
SHOW COLOMNS FROM tableName;
返回tableName表的行信息 -
SHOW CREATE TABLE;
查看數(shù)據(jù)表的創(chuàng)建語句
tips : Mysql支持用
DESCRIBE COLUMNS;
來代替SHOW COLOMNS FROM tableName;
沃斤。
更多SHOW用法可以用help SHOW
來查看
CREATE
語法:
CREATE TABLE `table`
(
id int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL DEFAULT 'hello',
phone char(20) NULL,
PRIMARY KEY (id)
FOREIGN KEY(phone) REFERENCES othertable(id)
)ENGINE=InnoDB;
創(chuàng)建了一個(gè)名為table的表,擁有三列:id
列是整形數(shù)據(jù)刃宵、非空衡瓶、自增,name
列字符型數(shù)據(jù)、非空牲证、默認(rèn)值為hello,phone
字符型數(shù)據(jù),可空哮针。
tips:
- 通常僅在表不存在是創(chuàng)建:
CREATE TABLE IF NOT EXISTS table(···)
- 在創(chuàng)建表時(shí)用:
PRIMARY KEY(id)
來創(chuàng)建主鍵,主鍵值必須唯一,主鍵也可以是多列聯(lián)合AUTO_INCREMENT
表示自增,通常和單列主鍵配合使用,一個(gè)表只能有一個(gè)自增列DEFAULT
來指定默認(rèn)值NULL
允許空值坦袍,插入行數(shù)據(jù)時(shí)允許不給出該列的值ENGINE=InnoDB
表示用InnoDB這個(gè)搜索引擎FOREIGN KEY(phone) REFERENCES othertable(id)
來創(chuàng)建外鍵phone指向另一個(gè)表的主鍵
ALTER
更新表結(jié)構(gòu)
語法:
-
ALTER TABLE table ADD address CHAR(100) NOT NULL;
給table表增加一列address
-
ALTER TABLE table DROP COLUMN phone;
刪除table表的phone
列
tips:
- 刪除表:
DROP TABLE table;
- 清空表:
TRUNCATE TABLE table
- 重命名表:
RENAME TABLE table TO table1;
INSERT
語法:
INSERT INTO table(col1,col2,···)VALUES(value1,value2,···);
tips:
- 如果表定義時(shí)對(duì)某行允許了空值或者設(shè)置了默認(rèn)值,那INSERT操作可以省略該行
- 因?yàn)?em>INSERT操作是很耗時(shí)的诚撵,所以有時(shí)加入LOW_PRIORIRY降低優(yōu)先級(jí):
INSERT LOW_PRIORITY INTO
- 插入多行數(shù)據(jù)時(shí)每組值用
()
:INSERT INTO table(col1,col2,···)VALUES(value1,value2,···),(value1,value2,···),(···);
UPDATE
語法:
-
UPDATE table SET name = 'abc';
更新table表所有行的name值為'abc' -
UPDATE table SET name = 'abc'[,col = 'xxx',···] WHERE id = 1;
若要更新某行時(shí)要加where限定,更新多列時(shí)键闺,每個(gè)鍵值對(duì)用,
隔開
DELETE
語法:
-
DELETE FROM table;
刪除table
表中所有數(shù)據(jù) -
DELETE FROM table where id = 1;
刪除指定的某行
tips: 可用
TRUNCATE TABLE table
來代替DELETE FROM table
寿烟,前者是直接刪除表本身,再創(chuàng)建同名表,比后者速度快。
SELECT
語法:
-
SELECT colName1[,colName2···] FROM tableName;
檢出出某行辛燥,多行用,
隔開筛武,所有行用*
表示
DISTINCT
表示只返回不同值
用法 : SHOW DITINCT id FROM ···;
,DISTINCT只能放在列名最前面
LIMIT
限制返回?cái)?shù)目
用法 :
-
SELECT * FROM table LIMIT 5;
返回前五行數(shù)據(jù) -
SELECT * FROM table LIMIT 3,4;
返回從第三行開始的四行數(shù)據(jù) -
SELECT * FROM table LIMIT 4 OFFSET 3;
等效于上面一句MYSQL
ORDER BY
關(guān)系型數(shù)據(jù)庫中,如果沒有明確排序順序,檢索出來的數(shù)據(jù)順序無意義
用法:
-
SELECT * FROM table ORDER BY id;
按id的升序排列,等同于ORDER BY id ASC
挎塌。降序用DESC代替ASC即可 -
SELECT * FROM table ORDER BY id,name DESC;
先按id升序排序,若id相同時(shí)按name的降序排序
tips:
- 通常字典排序是不區(qū)分大小寫的
- order by子句要在from子句之后,若是和limit聯(lián)用,要放limit之前徘六。與where聯(lián)用,放where之后榴都。
WHERE
根據(jù)where子句來對(duì)檢索進(jìn)行過濾
用法:
-
SELECT * FROM table WHERE id = 1;
此處的操作符有=待锈、!=、>嘴高、>=竿音、<、<=,匹配字符串的時(shí)候要加'' -
SELECT * FROM table WHERE id BETWEEN 1 AND 5;
可以用BETWEEN來限定范圍 -
SELECT * FROM table WHERE id IN (1,2,3,4,5);
可以用IN來限定范圍 -
SELECT * FROM table WHERE id IS NULL;
空值檢查,返回的是id為空的行,而非id為0的行
tips:
- 可以用AND或OR來連接多個(gè)where子句拴驮,形成高級(jí)where
- 若是有AND和OR組成的高級(jí)WHERE時(shí),會(huì)先優(yōu)先處理AND的語句的組合春瞬,所以為了避免組合錯(cuò)誤應(yīng)該使用()來明確組合,消除歧義。
- WHERE子句中用NOT來否定之后所跟的任何條件
LIKE
LIKE后面跟的搜索模式利用通配符匹配
%(匹配任何字符出現(xiàn)任意次)
用法:
-
SELECT * FROM table where name LIKE 'base%'
檢索以base開頭的name
-
SELECT * FROM table where name LIKE '%base%'
檢索含有base的name
-
SELECT * FROM table where name LIKE 'ba%se'
檢索以ba的開頭,以se結(jié)尾的name
套啤。%
表示任意字符,也包括0字符宽气。
_(匹配單字符)
用法:
SELECT * FROM table where name LIKE 'base_'
tips:
- 通配符的效率較低,要盡可能避免使用