Mysql-基础语法
导语
本博文主要是简述选择数据库和对表内容的增、删、改和查的一些基本语法
USE
语法:
-
USE databaseName;
打开名为databaseName的数据库
SHOW
语法:
-
SHOW DATABASES;
返回可用库的列表 -
SHOW TABLES;
返回当前库内的可用表的列表 -
SHOW COLOMNS FROM tableName;
返回tableName表的行信息 -
SHOW CREATE TABLE;
查看数据表的创建语句
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;
创建了一个名为table的表,拥有三列:id
列是整形数据、非空、自增,name
列字符型数据、非空、默认值为hello,phone
字符型数据,可空。
tips:
- 通常仅在表不存在是创建:
CREATE TABLE IF NOT EXISTS table(···)
- 在创建表时用:
PRIMARY KEY(id)
来创建主键,主键值必须唯一,主键也可以是多列联合AUTO_INCREMENT
表示自增,通常和单列主键配合使用,一个表只能有一个自增列DEFAULT
来指定默认值NULL
允许空值,插入行数据时允许不给出该列的值ENGINE=InnoDB
表示用InnoDB这个搜索引擎FOREIGN KEY(phone) REFERENCES othertable(id)
来创建外键phone指向另一个表的主键
ALTER
更新表结构
语法:
-
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:
- 如果表定义时对某行允许了空值或者设置了默认值,那INSERT操作可以省略该行
- 因为INSERT操作是很耗时的,所以有时加入LOW_PRIORIRY降低优先级:
INSERT LOW_PRIORITY INTO
- 插入多行数据时每组值用
()
: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;
若要更新某行时要加where限定,更新多列时,每个键值对用,
隔开
DELETE
语法:
-
DELETE FROM table;
删除table
表中所有数据 -
DELETE FROM table where id = 1;
删除指定的某行
tips: 可用
TRUNCATE TABLE table
来代替DELETE FROM table
,前者是直接删除表本身,再创建同名表,比后者速度快。
SELECT
语法:
-
SELECT colName1[,colName2···] FROM tableName;
检出出某行,多行用,
隔开,所有行用*
表示
DISTINCT
表示只返回不同值
用法 : SHOW DITINCT id FROM ···;
,DISTINCT只能放在列名最前面
LIMIT
限制返回数目
用法 :
-
SELECT * FROM table LIMIT 5;
返回前五行数据 -
SELECT * FROM table LIMIT 3,4;
返回从第三行开始的四行数据 -
SELECT * FROM table LIMIT 4 OFFSET 3;
等效于上面一句MYSQL
ORDER BY
关系型数据库中,如果没有明确排序顺序,检索出来的数据顺序无意义
用法:
-
SELECT * FROM table ORDER BY id;
按id的升序排列,等同于ORDER BY id ASC
。降序用DESC代替ASC即可 -
SELECT * FROM table ORDER BY id,name DESC;
先按id升序排序,若id相同时按name的降序排序
tips:
- 通常字典排序是不区分大小写的
- order by子句要在from子句之后,若是和limit联用,要放limit之前。与where联用,放where之后。
WHERE
根据where子句来对检索进行过滤
用法:
-
SELECT * FROM table WHERE id = 1;
此处的操作符有=、!=、>、>=、<、<=,匹配字符串的时候要加'' -
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来连接多个where子句,形成高级where
- 若是有AND和OR组成的高级WHERE时,会先优先处理AND的语句的组合,所以为了避免组合错误应该使用()来明确组合,消除歧义。
- WHERE子句中用NOT来否定之后所跟的任何条件
LIKE
LIKE后面跟的搜索模式利用通配符匹配
%(匹配任何字符出现任意次)
用法:
-
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结尾的name
。%
表示任意字符,也包括0字符。
_(匹配单字符)
用法:
SELECT * FROM table where name LIKE 'base_'
tips:
- 通配符的效率较低,要尽可能避免使用