MySQL学习:
关于MySQL基本概念
数据库(DataBase)
简称DB:按照某一特定数据结构来组织,存储数据的仓库。
数据库管理系统(DataBase Management System)
简称DBMS,是为了建立,操作和维护数据库而设计的一个程序,介于用户和数据库之间。
SQL分类
- DDL(Data Definition Language-数据定义语句)
用来定义数据库的对象,如数据表、视图、索引等
如: create、alter、drop - DML (Data Manipulation Language-数据操纵语句)
在数据库表中更新,增加和删除记录
如 insert、delete、update— 增删改 - DCL (Data Control Language-数据控制语句)
指用于设置用户权限和控制事务语句
如grant,revoke,if…else,while,begin transaction - DQL(Data Query Language select-数据查询语句)
数据库的操作
创建数据库
create database 数据库名;
create database 数据库名 character set 字符集;
create database 数据库名 character set 字符集 collate 校对规则;
查看数据库
show databases; --查看所有的数据库
show create database 数据库名; --显示数据库创建
选择数据库
use 数据库名;
修改数据库
alter database 数据库名 character 字符集;
删除数据库
drop database 数据库名;
查看当前数据库
select database(); --查看当前使用的数据库
数据表的操作
在介绍数据表之前,说一下数据类型。
- 字符串类型
varchar、char - 大数据类型
blob、text - 数值型
tinyint、smallint、int、bigint、float、double - 逻辑型
bit - 日期型
date、time、datetime、timestamp
创建数据表
create table 表名
(
field1 datatype (auto_increment), --说明此列每增加一行时自动增量。
field2 datatype (unique), --定义唯一约束
field3 datatype (not null), --定义非空约束
field4 datetype (default 1), --指定默认值为1
primary key(field1) --指定为主键
)character set 字符集 collate 校对规则;
每个表只允许一个AUTO_INCREMENT列,而且它必须被索> 引。
可以使用last_insert_id()语句来获取最后一个AUTO_INCREMENT值。
查看数据表
show tables; --查看所有的数据表
show create table 数据表; --查看表的创建过程
desc 数据表; --查看数据表结构
修改数据表
--add:添加列
alter table 表名 add 列名 列类型 (列的约束) ;
--modify:修改列
alter table 表名 modify 变量名 数据类型;
--change:修改列名
alter table 表名 change 原名 新名 新数据类型;
--drop:删除列
alter table 表名 drop 列名;
--修改表名
alter table 原表名 to 新表名;
--修改表的字符集
alter table 表名 character set 字符集;
删除数据表
DROP TABLE 数据表名;
重命名数据表
RENAME TABLE 旧表名 TO 新表名;
-- 重命名多个表名
RENAME TABLE 旧表名1 TO 新表名1,
旧表名2 TO 新表名2,
旧表名3 TO 新表名3;
对数据表的数据操作
CRUD ————增删改查
增数据
- 一般写法
insert into 表名(列1,列2,列3...) values(值1,值2,值3...);
- 简单写法
insert into 表名 values(值1,值2,值3...);
注意:
省略的列必须满足以下两个条件:
1、该列定义为允许NULL值(无值或空值)。
2、在表定义中给出默认值。
- 批量插入
insert into 表名 values(值1,值2,值3...),(值4,值5,值6...),(值7,值8,值9...);
- 查看表中的所有数据
select * from 表名;
补充:
要提高整体性能,可以在 INSERT 和 INTO 之间添加关键字 LOW_PRIORITY,指示MySQL降低INSERT语句的优先级。
INSERT LOW_PRIORITY INTO
删数据
使用DELETE时要加WHERE关键字,否则会删除表中的所有行。
delete from 表名 [where 条件];
delete from 表名; --删除全部记录
delete from 表名 where [...] --删除满足条件的记录
truncate 表名; --删除全部数据
注:
delete 删除数据 和 truncate 删除数据 有什么区别?
delete:(DML)一条一条删除表中的数据
truncate:(DDL)先删除表再重建表
当数据较少时,delete比较高效。
当数据较多时,truncate比较高效。
同时也要注意:DELETE删除整行而不是整列,如果要删除整列要使用UPDATA语句。
改数据
如果更改数据的时候没加where条件,会改变表中的所有数据。
update 表名
set 列名1=值1,列名2=值2,...
where 条件;
- 如果要删除某一列的数据,可以直接把它设置为NULL。
UPDATE customers
SET cost_email = NULL
WHERE cust_id = 10005;
查数据
--查看表中所有的数据
select * from 表名;
--查看表中列n,m的数据
select 列名n,列名m from 表名;
--表别名
select 别名.列名1,别名.列名2 from 表名 as 别名;
--列表名
select 列名1 (as) 别名1,列名2 (as) 别名2 from 表名;
--去掉重复的值(distinct)
select distinct 列名 from 表名;
--运算查询
select *,(列名运算) (as 别名) from 表名;
--条件查询
select 列名 from 表名 where (条件);
-
like
_:表示一个字符。
%:表示多个字符。 -
in
在某个范围中获得值。
eg:select * from 表名 where 列n in (...);
-
order by
asc:(默认)升序
desc:降序
eg:select * from 表名 order by 列名 desc;
-
update
修改表中的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
-
聚合函数
sum() : 求和
avg() : 求平均值
count() : 统计数量
max()/min() : 最大/最小值
eg :
select sum() from 表名;
select 列 from 表名 having (聚合函数)
总的来说,就是:
子句 | 说明 | 是否必须使用 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组说明 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
LIMIT | 要检索的行数 | 否 |