mysql
基本操作
启动mysql服务
- /usr/local/MySQL/bin/mysql -u root -p
数据库语句中不区分大小写,不过关键字最好大写。
单行注释
- – 或#(–后加空格,#后不用加空格)
多行注释
- /注释/
语句分类
DDL(操作数据库、表)
-
操作数据库CRUD
-
C(Create):创建
- create database db(数据库名);
- 检测有无重复数据库若没有则创建:create database if not exists db(数据库名);
- 指定字符集创建:create database db(数据库名) character set gbk(字符集);
-
R(Retrieve):查询
- 查询所有数据库的名称:SHOW databases;
- 查看某个数据库的字符集:show create database db(数据库名称);【查询某个数据库创建语句】
-
U(Update):修改
- 修改数据库字符集:alter database db(数据库名称) character set utf8(字符集名称);
-
D(Delete):删除
- drop database db(数据库名称);
- 如果存在则删除:drop database if exists db(数据库名称);
-
使用数据库
- 查询当前正咋使用的数据库名称:select database();
- 使用数据库:use db(数据库名称);
-
-
操作表
-
C(Create):创建
- create table tab(表名)(
list1(列名) int(数据类型),
list2 int,
…
listn int
); - create table tab1(表名)like tab2(b表名);
- create table tab(表名)(
-
数据类型
-
int
- age int
-
double
- score double(5.2)[表示最大5位,小数点后保留2位]
-
date:日期,只包含年月日的日期,yyyy-MM-dd
-
datetime:日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
-
timestamp:时间错类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
- 如果不给这个字段赋值,或赋值为null,自动使用系统时间赋值。
-
varchar:字符串
- name varchar(20):姓名最大20个字符
-
-
R(Retrieve):查询
- 查询某个数据库中所有表的名称:show tables;
- 查询表结构:desc tab(表名);
-
U(Update):修改
-
修改表名
- alter table tab(表名) rename to tab2(新的表名);
-
修改表的字符集
- alter table tab(表名) character set utf8(字符集);
-
添加一列
- alter table tab(表名) add list(列名)int(数据类型);
-
修改列名称 类型
- alter table tab(表名) change list1(列名) list2 (列名) int(数据类型);
- 只改类型:alter table tab(表名) modify list(列名) int;
-
删除列
- alter table tab(表名) drop list(列名) ;
-
-
D(Delete):删除
- drop table if exists tab(表名);
-
DML(增删改表中的数据)
-
添加数据
- insert into tab(表名) (list1(列名),list2,list3,…listn) values (value1(值),value2,value3,…valuen)
- 如果表名后,不定义列名,则默认给所有列添加值:insert into tab(表名) values (value1(值),value2,value3,…valuen)
- 除了数字类型,其他类型需要使用引号(单双都可)引起来
-
删除数据
- delete from tab(表名)[where 条件]
- 如果不加条件,会将表中数据全部删除(有多少条就会执行多少次操作,效率较低)
- 删除表,然后创建一个一样的空表:truncate table tab(表名)(删除全表数据操作,效率更高)
-
修改数据
- update tab(表名) set list1(列名) = value1(值名),list2 = value2,…listn = valuen[where 条件];
- 如果不加条件,会将表中记录全部修改
DQL(查询表中的数据)
-
查询表中的记录
-
select field(字段列表) from tab(表名列表)where(条件列表) group by field(分组字段) having cond(分组之后的条件) order by sort (排序) limit page(分页)
-
select field(字段列表)
-
from tab(表名列表)
-
where(条件列表)
-
运算符
-
、<、<=、>=、=、<>
- <>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
-
BETWEEN…AND
- 在一个范围之内,如:between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
-
IN(集合)
- 集合表示多个值,使用逗号分隔
-
LIKE ‘张%’
- 占位符:_:单个任意字符
- 占位符:%:任意占位符
-
IS NULL
- 查询某一列为 NULL 的值,注:不能写=NULL
-
IS NOT NULL
- 查询某一列不为 NULL 的值,注:不能写!=NULL
-
-
逻辑运算符
-
and 或 &&
- 与,SQL 中建议使用前者,后者并不通用。
-
or 或 ||
- 或
-
not 或 !
- 非
-
-
-
group by field(分组字段)
-
having cond(分组之后的条件)
-
order by sort (排序)
-
limit page(分页)
-
-
如果不查询表中所有的列,尽量避免使用 SELECT *,因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络IO开销。
-
基础查询
-
多字段查询
- select field1(字段名),field2,…fieldn from tab(表名)
-
去除重复
- select distinct field1(字段名),field2,…fieldn from tab(表名)
-
计算列
- 一般可以使用四则运算计算一些列的值
- null参与的运算,结果均为null:ifnull(field(需要判断是否为null的字段名),value(如果该字段为null的替换值))
-
别名
- field(字段名或表达式)as name(别名)
- 也可省略as:field(字段名或表达式)name(别名)
-
DCL(授权)
- grant授予
- revoke收回