1、创建和使用数据库(DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.)
1) 查看当前数据库
show databases;
2) 创建数据库
create database 数据库名称;
3)使用和切换数据库
use 数据库名称
4)删除数据库
drop database 数据库名称;
2、对表的操作
1)增
创建数据表
create table 数据表名(
列名 数据类型 [约束],
列名 数据类型 [约束],
。。。
);
约束
作用: 用来保证数据的完整性和安全性.
分类:
单表约束:
主键约束: primary key //auto_increment(自动增长)
唯一约束: unique
非空约束: not null
多表约束:
外键约束: foreign key
2)删
drop table 数据表名;
3)改
给表增加一列字段
alter table 表名 add 列名 数据类型 约束;
修改某列字段的约束和类型
alter table 表名 modify 列名 数据类型 约束;
修改某列字段的名字,约束,类型
alter table 表名 change 旧列名 新列名 数据类型 约束;
删除指定的列
alter table 表名 drop 列名;
修改表名
rename table 旧表名 to 新表名;
修改表的码表
alter table 表名 character set 指定的码表;
alter table 表名 charset 指定的码表;
约束
给已经创建的表增加约束
alter table 表名 add 约束 (列名)
给已经创建的表删除primary key约束
alter table 表名 drop 约束
4)查
查询所有的数据表
show tables;
查询指定数据表(表结构)
desc 数据表名;
3、SQL语句操作表数据(DML: 数据操作语言. 主要指的是操作数据, 增删改. //update, insert, delete)
1)添加
格式:
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
通过insert语句实现.
A: 创建表.
create table users(
uid int primary key auto_increment,
uname varchar(20),
age int
);
B: 通过SQL语句插入数据.
insert into users values(null,'王丽坤', 23), (null,'刘亦菲',31);
2)删
delete from 数据表名 where 条件; //删除表数据, 不会重置主键ID.
truncate table 数据表名; //删除表数据, 会重置主键ID.
3)改
update 数据表名 set 列名1=值,列名2=值,列名3=值 where 条件;
注意:如果您省略了 WHERE 子句,所有的记录都将被更新!
4)查(DQL: 数据查询语言. 主要指的是操作数据: 查询.)
select
[distinct] 列名1, 列名2 as '别名',列名3...
from 表名
where 分组前的条件筛选
group by 要分组的列
having 分组后的条件筛选
order by 要排序的列 [asc/desc]
limit 起始索引, 结束索引;
A. 最基本的查询:
select * from 数据表名; //全列名
select 列名1,列名2,列名3 from 数据表名; //指定列名
B. 带别名的查询: 也可以省略
关键字 as
C. 带条件的查询:
a. 条件运算符
>,<, >=, <=, =, !=(<>)
b. 区间(范围)运算符 这些值可以是数值、文本或者日期。 不在范围内的在bettween前加 not
between 值1 and 值2;
c. 逻辑运算符
and or not
d. 固定值的查询
in (值1,值2,值3)
e. 模糊查询
like 条件. (包含)
//一般会结合占位符使用.
//_占一个位置 %占多个位置
D. 如果表中有重复数据, 可以将其去重: distinct
select distinct 字段名称1,字段名称2... from 表名;
E. 排序操作: order by
格式:
SELECT * 字段列表 FROM 表名 ORDER BY 排序字段1 [排序方式],排序字段2 [排序方式];
排序方式:
desc(降序) 和 asc(升序), 默认为升序排序
如果是多个字段排序, 会先按照第一个字段进行排序,如果第一个字段有相同的, 然后在按照第二个字段排序
F. 日期计算
select year('1988-01-01'); //获取年份, 即: 打印结果是为 1988
G. is null和 is not null值
格式:
字段 is null //筛选这个字段为null的数据
字段 is not null //筛选这个字段不为null的数据
4、聚合函数
count(); //一般用于获取数据表的行数.
max(); //获取某一列的最大值.
min(); //获取每一列的最小值.
avg(); //获取某一列的平均值.
sum(): //获取某一列的和.
mid(): //提取字符 MID(column_name,start[起始位置,length])
5、SQL语言分类
DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.
//create, drop, alter
DML: 数据操作语言. 主要指的是操作数据, 增删改. //update, insert, delete
DCL: 数据控制语言. 主要指的是 创建用户, 设置权限, 设置安全级别. //create, grant
DQL: 数据查询语言. 主要指的是操作数据: 查询.
//select, from, where
6、数据库的备份和还原
1) 备份命令
格式:
mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
//由于mysqldump命令不是sql命令,需要在dos窗口下使用。
示例:
mysqldump -uroot -p123456 test01 >/root/test01.sql
//其中: test01是数据库的名字
2) 恢复命令
//注意: 恢复数据库,需要手动的先创建数据库:
格式:
create database test01; //创建数据库
mysql -u 用户名 -p 数据库名 < 磁盘SQL文件路径
示例:
mysql -uroot -p123456 test01 < /root/test01.sql
3) 注意:
在备份数据的时候,数据库不会被删除。可以手动删除数据库。同时在恢复数据的时候,
不会自动的给我们创建数据库,仅仅只会恢复数据库中的表和表中的数据。
4) 备份数据表. //备份数据表的时候, 只会备份结构(字段)和数据, 不会备份主键(约束).
备份表不存在:
create table 数据表名 select * from 要备份的数据表名;
备份表存在:
insert into 数据表名 select * from 要备份的数据表名;
7、多表查询
交叉查询: //理解, 没有什么特殊意义.
格式:
select * from 表A,表B; //查询结果是两张表的: 笛卡尔积.
//笛卡尔积指的是两张表(总条数)的乘积: 表A的总条数 * 表B的总条数
连接查询:
内连接查询: inner join
显示内连接:
select * from 表A inner join 表B on 条件;
//select * from 表A join 表B on 条件;
隐式内连接:
select * from 表A,表B where 条件;
外连接查询: outer join
左外连接查询:
select * from 表A left outer join 表B on 条件;
//select * from 表A left join 表B on 条件;
右外连接查询:
select * from 表A right outer join 表B on 条件;
//select * from 表A right join 表B on 条件;
子查询:
概述:
一个SQL语句的条件需要依赖另一个SQL语句的查询结果.
常用关键词的用法:
in: 只要满足其中一个就行.
//回忆:age=23 or age=24? 等价于 age in (23,24)
//in 表示条件应该是在多个列值中。
//in:使用在where后面,经常表示是一个列表中的数据,只要被查询的数据在这个列表中存在即可。
exists: //表示存在,当子查询的结果存在,就会显示主查询中的所有数据。
select * from A where exists(select A_ID from B);
union和union all的使用法 //要求拼接双方的表结构一致.
UNION语句:
用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
//select * from A union select * from B;
UNION ALL 语句:
用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
case when语句:
格式:
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
8、创建索引
创建索引
create index index_name on table_name (cloumn_name)
创建唯一索引
create unique index index_name on table_name (cloumn_name)
撤销索引
alter table table_name drop index index_name
drop index [index_name] on table_name
添加索引
alter table table_name add index index_name (cloumn_name)
9、数据类型
1)数值类型
2)日期类型
3)字符串类型
10、sql的分类
1、DDL语句 (数据库定义语言) 对数据库 表 列 进行操作
查看数据库:show database;
创建数据库 create database 数据库名;
create database 数据库名 character set 需要使用的编码;
查询创建数据库语句:show create database 数据库名;
删除数据库 drop database 需要删除的数据库名;
查看当前正在使用的数据库 select database();
使用数据库: use 数据库名
创建表: creat table 表名(字段名 类型(长度) [约束],字段名 类型(长度) [约束]..);
查看表: show tables;
查看创建表的语句: show creat table 表名;
查看表结构: desc 表名;
删除表: drop table 表名;
向表中添加字段: alter table 表名 add 字段名 类型 [约束];
修改 对字段进行修改 但不修改字段名: alter table 表名 modify 字段名 类型 [约束];
改变 对字段进行修改 可以修改字段名: alter table 表名 change 旧字段名 新字段名 类型 [约束];
删除表中的列: alter table 表名 字段;
修改表名: rename table 旧表名 to 新表名;
2、DML语句(数据库操作语言) 对数据库里的数据进行操作 增 删 改
insert into 表名(字段名,字段名..) values(值,值,..);
insert into 表名 values(值,值,..);
update 表名 set 字段=值,字段=值..where 条件 ;
delete from 表名 where 条件 ;
truncate delete区别:
delete 删除数据时 自动增长不会清除
truncate删除数据时 清除自动增长 重写计数
3、DCL语句(数据库控制语言) 用于设置用户权限和控制事务语句
4、DQL语句(数据库查询语言) select.......