MySQL指令
- 启动:
net start mysql
(管理员方式进命令行) - 登录:
-uroot -p123456
(或者p后回车输密码别人看不到) - 退出:
exit
关闭服务:net stop mysql
SQL通用语法
结构化查询语言
- 单行或多行书写,分号结尾
- 可用空格和缩进,不区分大小写(建议关键字大写)
- 三种注释
--
(空格–)#
mysql特有/* */
多行
SQL分类
目录结构:数据库–>表–>数据记录
- DDL:定义操作数据库、表
- DML:增删改表中的数据
- DQL:查询表中的数据
- DCL:授权
DDL语法
-
操作数据库(CRUD)
-
create:创建
- 创建数据库:
create database;
- 判断不存在,再创建:
create database if not exists 数据库名称;
- 创建数据库并指定字符集:
create database 数据库名称 character set 字符集名;
- 创建数据库:
-
retrieve:查询
- 查询所有数据库名称:
show databases;
- 查询某个数据库的创建语句(字符集):
show create database 数据库名称;
- 查询所有数据库名称:
-
update:修改
- 修改数据库的字符集:
alter database 数据库名 character set 字符集;
- 修改数据库的字符集:
-
delete:删除
- 删除数据库:
drop database 数据库名
- 判断数据库存在,再删除:
drop database if exists 数据库名
- 删除数据库:
-
使用数据库
-
查询当前正在使用的数据库名称:
select database();
-
使用数据库:
use 数据库名称;
tips:按上下键可以查找自己的输入记录
-
-
-
操作表
-
创建
- 语法
create table 表名( 列名1 数据类型1, 列名2 数据类型2, ··· 列名n 数据类型n -- 最后一列不加逗号 );
-
数据库类型
int
:整数类型double(m,n)
:小数,共m位保留n位date
:日期,只包含年月日,yyyy-MM-dd
datetime
:日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
timestamp
:时间戳,格式同上,若不给该字段赋值或赋null,将默认使用系统时间自动赋值varchar(n)
:字符串,最多n个字符
-
创建表
create table student( -> name varchar(10), -> number int, -> score double(12,2), -> insert_time timestamp, -> birthday date -> );
-
复制表:
create table 表名 like 被复制表名;
-
查询(先use该数据库)
- 查询某个数据库中所有表名称:
show tables;
- 查询表结构:
desc 表名;
- 查询某个数据库中所有表名称:
-
修改
-
修改表名:
alter table 表名 rename to 新表名;
-
修改表的字符集:
alter table 表名 character set 字符集名称;
-
添加一列:
alter table 表名 add 列名 数据类型;
-
修改列名及类型:
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
(仅更改数据类型) -
删除列:
alter table 表名 drop 列名;
-
-
删除
drop table 表名;
drop table if exists 表名;
-
DML语法
- 添加数据:
insert into 表名(列名1,列名2,...列名n) values(值1,...值n);
- 列名和值要一一对应,当要给所有列添加值时可不写列名
表名 values(值1,...值n);
- 除数字类型外,其他类型要使用引号(单双)括起来
- 列名和值要一一对应,当要给所有列添加值时可不写列名
- 删除数据:
delete from 表名 where 条件
- 若不加条件,则删除表中所有记录
- 删除所有记录,
truncate table 表名
,先删除表,再创一张相同的空表
- 修改数据:
update 表名 set 列名1 = 值1,列名2 = 值2,...where 条件;
- 查询数据:
- 排序查询:
order by 排序字段1 排序方式1,排序字段2 排序方式2...
- 排序方式:
ASC
升序(默认)、DESC
降序,当前面条件值一样时才会判断第二条件
- 排序方式:
- 聚合函数:将一列数据作为一个整体,进行纵向计算(排除null值或
ifnull
语句)count
(一般选择非空的列,主键),max
,min
,sum
,avg
- 分组查询:
group by 分组字段;
where
和having
判定条件:where
在分组前进行限定,不满足则不参与分组;having
在分组后进行限定,不满足则不会被查询出来,且其后可跟聚合函数判断
- 分页查询:
limit 本页开始的索引,每页查询的条数
(mysql方言)- 开始索引 = (当前页码 - 1)*每页显示条数
- 排序查询:
DQL语法
-
语法:
select 字段列表 from 表名 where group by having limit
-
基础查询:
-
多字段:
select 字段名1,字段名2...from 表名;
(查询所有字段可用*
代替字段列表)查询表中记录:
select * from 表名;
-
去重复:
distinct
修饰字段 -
计算列:使用四则运算对列之间进行计算,
ifnull(去空的列名,0)
-
起别名:
as
,亦可用空格代替
-
-
条件查询:
- 子句后跟where+条件
- 运算符:
and
、or
、between and
(区间)、in(集合)
、is(not)
(针对非数值)、=
(数值相等) - 模糊查询:
like
- 占位符:
_
:单个任意字符,%
:多个任意字符
- 占位符:
表的约束
-
非空约束:
not null
- 创建表时添加约束:
id int not null,
- 创建完后添加:
alter table stu modify id int not null;
- 删除约束:
alter table stu modify id int;
- 创建表时添加约束:
-
唯一约束:
unique
-
创建时或之后在字段后加
unique
,形式同上 -
删除:
alter table stu drop index id;
-
-
主键约束:
primary key
-
概述:非空且唯一,一张表只能有一个字段,表中记录的唯一标识
-
创建表时或之后添加:跟
primary key
-
删除主键:
alter table stu drop primary key;
-
自动增长:主键后再跟
auto increment
,若仅删除自增用modify
-
-
外键约束:
foreign key
- 概述:让表与表产生联系,从而保证数据准确性
- 添加外键:
constraint 外键名 foreign key (外键列名) references 主表名称(主表列名)
- 可在创建表时直接添加(记得给上条语句加逗号),或在创建表后再
alter
- 外键可为null但不能为不存在的值,null和null也不相等
- 可在创建表时直接添加(记得给上条语句加逗号),或在创建表后再
- 删除:
alter table 表名 drop foreign key 外键名;
- 级联:添加外键的语句后直接跟如下语句,谨慎使用
- 级联跟新:
on update cascade
- 级联删除:
on delete cascade
- 级联跟新: