一、安装和启动
官网下载:
MySQL :: Download MySQL Installerhttps://dev.mysql.com/downloads/windows/installer/8.0.html图形化启动:开始|控制面板|管理工具|服务
安装步骤参考:超详细最新版MySQL 8.0安装及配置教程(亲测有效!!!)_mysql8.0安装教程_HNUJSY的博客-CSDN博客
命令行启动:
查看服务命令: net start
关闭服务命令: net stop MySQL80
启动服务命令: net start MySQL80
控制台登录:
mysql -h 127.0.0.1 -uroot -p(password)
二、SQL语句:
SQL语句分类:
2.1 数据查询语言(Data Query Language, DQL)是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句(关键字:select)
2.2 数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT(插入等同增)、UPDATE(更新,等同修改)、DELETE(删除)三种指令为核心,分别代表插入、更新与删除。主要操作表中的数据。
2.3 数据定义语言 (Data Definition Language, DDL) 是SQL语言集中,负责数据结构定义与数据库对象定义的语言,由creat、alter 与 drop 三个语法所组成. DDL 主要操作的是 表的结构 不是表中的数据;凡是带有 create(增)、alter (改)、drop (删) 关键字的语句都是 DDL。
2.4 数据控制语言 (Data Control Language) 在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。对数据的权限进行控制的语言.例如:
请求授权—— grant
撤销授权 —— revoke
2.5 这里的TCL可不是王牌电视,事务处理语言(Transaction Control Language),它的语句能确保被DML语句影响的表的所有行及时得以更新。是一种事务控制语言。主要包括:
事务提交 —— commit
事务回滚 —— rollback
数据库的分类:①关系型数据库(把数据按照 表 的形式来进行组织(类似于Excle这种形式的).
关系型数据库能够对数据进行更严格的校验,带来更好的数据的完整性):Mysql、Sql server 、Oracle 、SqLite;②非关系型数据库(把数据按照 文档 的形式来进行组织,文档和文档之间的差别可以较大.更灵活的组织数据,效率更高,更容易在分布式环境下使用.):Redis 、 HBase 、MongoDB。
表:任何表的都有行和列,数据库中 行(row): 被称为数据/ 记录,列 (column): 被称为字段。
三、数据库操作
1)查看数据库
show databases;
2)创建数据库
create database [数据库名];
//mysql> create database cpp100;
//Query OK, 1 row affected (0.00 sec)
//mysql有一个专门的表记录了新创建数据库的信息,每次新建数据库就相当于在这个表里插入了一条记录
不一定非得使用create database这样的语句来进行指定字符集(每次都得指定,比较麻烦)
一劳永逸的办法,是直接修改mysql的配置文件,把字符集就固定设成utf-8就可以了
①找到Mysql的配置文件(my.ini)右键“属性”修改目标
②
3)选中/使用数据库
use [ 数据库名 ]
要想对数据库进行更具体的操作 (建表、查询、…)就需要先确定是针对那个数据库进行的
4)删除数据库
drop database [数据库名];
//数据库删除后,内部看不到对应的数据库,里边的表和数据全部被删除.
四、常用数据类型
1.数值类型
分为整形和浮点型。
和C/C++对应关
数据类型 | 对应C/C++类型 |
BIT[(M)] | char[] |
TINYINT | signed char |
SMALLINT | short int |
INT | int |
BIGINT | long long int |
FLOAT(M, D) | float |
DOUBLE(M, D) | double |
DECIMAL(M, D) | char[] |
NUMERIC(M, D) | char[] |
注意:
1)bit 就表示一个二进制的数据,在方括号里我们可以指定该数据占多少个bit 位,M()就来指定有多少位,如果不指定的话,默认就为 1.
2)float (M,D)的含义:float (3,1)—— 有效数字是 3 位,小数点后保留一位.
2.字符串类型
3.日期类型
DATA:用来存储没有时间的日期(YYYY-MM-DD)
DATATIME:8字节,范围1000-9999年,不会进行时区的检索和转换(YYYY-MM-DD HH:MM:SS)
TIMESTAMP:4字节,范围从1970-2038,自动检索当前时区进行转换(同DATATIME)。
五、表的操作
需要操作数据库中的表时,需要先使用该数据库(use database;)
1.查看表结构
desc 表名;
2.创建表
create table table_name(
field1 datatype,
field2 datatype,
field3 datatype
);
(可以添加comment增加字段说明 也可以用 -- 表示注释)
事例:
create table stu_test(
id int,
name varchar(20) comment '姓名',
password varchar(50) comment '密码',
age int,
sex varchar(1),
resume text
);
3.删除表
drop table table_name;
六、表的增删改查
1.增加
隐含列插入,给表中的所有字段添加数据
insert into table_name values (value [,value...]);
insert into table_name values(v1,v2....);
指定列插入,只给表的某几个字段赋值,需要指定字段名
insert into table_name[(column[,column...])] values (value [,value...]);
逐条插入
insert into table_name[(column[,column...])] values (value [,value...]);
批量插入
insert into table_name[(column[,column...])] values (value [,value...]),(value [,value...]),(value [,value...]);
注意:
- 插入的数据应与字段的数据类型相同
- 数据的大小应在规定的范围内
- 在values中列出的数据位置必须与被加入的列位置相对应
- 字符和日期类型应该包含在单引号中
- 插入空值,不指定或指定为 null
当插入时,主键出现冲突可以利用更新操作更改主键对应的其他数据。(找相同,先插后删)
insert into 表名(字段列表) values(值列表) on duplicate key update 字段=新值;
若主键没有冲突,直接插入数据
replace into 表名(包含字段) values(值列表);
2.修改
update tbl_name set col_name1=expr1, [, col_name2=expr2 ...] [where conditon] [limit n];
注意
- update 语法可以用新值更新原有表中的各列值
- set子句指示要修改的列和要新赋的值
- where子句指定应更新哪些行。如果没有where子句,则更新所有行。
- where子句后面指定limit,更新符合条件的限制数量的行。
3.删除
delete from table_name [where condition];
truncate table table_name;
delete、truncate和drop删除整表的区别
delete只删除表中数据,表的结构保留,不释放空间;truncate清空数据、释放空间;drop删除内容和定义,释放空间
delete可以rollback,truncate不可以rollback
delete属于DML,truncate和drop属于DDL
delete后空间不变,truncate后空间回到初始化时,drop后所有空间被释放
速度:drop > truncate > delete
delete返回被删除的记录数,而truncate返回0
清空表数据,建议使用truncate
delete注意:
只能删除一行数据,不能删除一列数据
复制表结构:
create table new_table_name like exist_table_name;
复制表中数据:
insert into new_table_name select * from exist_table_name;
4.查询
1)简单查询:
select [distinct] *| {column1,column2,...} from tbl_name [where condition];
--示例1:
select distinct math from student;
--distinct math 删除math重复项
--示例2:
--使用as起别名
select name,chinese+math+english+5 as total from student;
2)where子句
在select中使用where子句,进行查询过滤。where后不能用select语句后指定的别名
3)order by子句
在select语句中使用order by子句排序查询结果
select column1,column2,... from table order by column asc|desc,...;
注意
- order by 指定排序的列,排序的列可以使表中的列名,也可以是select语句后指定的别名
- asc升序(默认),desc降序
- order by 子句应该位于select语句的结尾
4)limit分页
select 字段 from 表名 where 条件 limit 起始位置 ,记录条数
select 字段 from 表名 where 条件 limit 记录条数 offset 起始位置
5.聚合函数
select count(*)|count(列名) from tbl_name where condition;
count(*)会统计一共的记录数,count(列名)会排除为null的情况
sum函数:返回满足where条件的列中数据的和
sum仅对数值起作用,否则结果无意义。
select sum(列名) {,sum(列名)...} from tbl_name [where condition];
avg:返回满足where条件的一列的平均值
select avg(列名) [,avg(列名),...] from tbl_name [where condition];
max/min:返回满足where条件的一列的大/小值
select max/min(列名) from tbl_name [where condition]
6.group by子句
在select中使用group by 子句可以对指定列进行分组查询
select column1, column2, .. from table group by column;
group by不能和where搭配使用,应该与having搭配
例如:
select avg(sal) as avg from emp group by deptno having avg<2000;
7.关键字优先级
SQL查询中各个关键字的执行先后顺序
from > on > join > where > group by > with > having > select > distinct > order by > limit
SQL语句注意事项:
1.一定不能忘记加分号,分号说明这条语句结束,可以写成多行
2. 每个单词之间记得空格
3. 这里展示所有的数据库,base后面 记得加s
4. ctrl + c 可以终止当前输入
5. mysql 中 不区分大小写