一、安装:
默认安装或自定义安装均可,完全安装没必要,因为一般用不到那么多功能。
尽量不要和系统安装在同一个目录下。
二、基本操作:
MySQL数据库同一个用户下存在多个库;
用sql语句或者MySQL命令操作数据库;
sql语句以分号结尾;
登录数据库:
cmd窗口里输入:
mysql -u用户名 -p密码
1、数据库操作:
查看有哪些数据库:
show databases;
自己创建一个数据库:
create database 数据库名;
其中,first为数据库名称。
删除一个数据库:
drop database 数据库名;
选择要操作的数据库:
use 数据库名
这里可以不加分号,因为这个语句是MySQL自己的。
2、表的操作:
创建表:
create table 表名(字段名称 字段类型, 字段名称 字段类型......);
create table student(num int(6), name varchar(10), sex varchar(2), age int, schooldata date);
create table book(num int, name varchar, date1 date, price double(5, 2));
删除表:
drop table 表名;
修改表的名字:
alter table 旧表名 rename to 新表名;
查看数据库中有哪些表:
show tables;
3、表结构操作:
查看表的结构:
desc 表名;
增加字段:
alter table 表名 add 字段名 值类型;
修改字段类型(不修改字段名):
alter table 表名 modify 要修改的字段名 新的字段类型;
修改字段名:
alter table 表名 change 旧表名 新表名(数据类型);
删除字段:
alter table 表名 drop 字段名;
4、表内容的操作:
插入数据:
insert into 表名(要插入的字段名1, 要插入的字段名2......) values(字段值1, 字段值2......);
insert into book(num, name, date1, price) values(1, '人工智能', '2019-7-7', 69);
当要对表中所有字段进行插入的时候,表名后括号及里面的内容可以不用写:
insert into book values(1, '人工智能', '2019-7-7', 69);
更新数据:
update 表名称 set 列名称=新值 where 更新条件;
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause];
update book set name = "数据挖掘" where num = 1;
删除数据:
delete from 表名称 where 删除条件;
DELETE FROM table_name [WHERE Clause];
如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
你可以在 WHERE 子句中指定任何条件。
您可以在单个表中一次性删除记录。
查询数据:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据。
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
5、delete,drop,truncate 都有删除表的作用,区别在于:
1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。
三、MySQL约束:
所谓MySQL约束就是不允许去做某些事情。
唯一约束:
create table student(num int unique, name varchar(11));
注:任意两个null都不相等。
非空元素:not null
create table stu(num int not null, name varchar(11));
同一个字段加多个约束:
create table stu(num int not null unique, name varchar(11));
非空约束和唯一约束的组合称为主键约束:primary key
一般数字类型主键配合MySQL的自动类型增长策略:auto_increment
当一个字段为主键且设置为自增长的时候,插入的值为null就可以自增长了。
外键约束:
单独加,且外键必须是另外一张表的主键。
create table stu(num int primary key auto_increment, name varchar(11), classnum int, foreign key(classnum) references class(num));
create table stu(num int primary key auto_increment, name varchar(11), classnum int, foreign key(classnum) references class(num));
如果表已经创建,在给字段添加外键约束时需要添加括号:
alter table student add (classnum int, foreign key(classnum) references class(num));
四、MySQL查询:
select [字段列表,表达式,函数] from 表名 where 条件表达式;
select [字段 1, 字段2, 字段3......] from 表名 where 条件表达式;
select 表达式(算术表达式) from 表名 where 条件表达式;
distinct 字段1
条件表达式:
等值比较(=),大于,小于,大于等于,小于等于,不等于;
多个条件:and,or;
in():代表在这个取值中只要有一个匹配就可以取出来,如in(800, 1500, 2900)
not in():不在区间范围之内;
between:<=>大于等于 and 小于等于;
is:空永远不等于空,判断一个值是否为空的方式是:is null,反之是is not null;
别名:给字段、表达式、函数、表起别名,在他们后面加个空格然后添加别名即可或使用'as'关键字;
分组查询:
分组:group;
分组函数:sum(),avg(),max(),min(),count();
注意:不在分组函数中的字段,必须存在group by后;
having:
1、子查询情况:
将查询结果作为另一个查询的条件:
例:查询工资最高的员工是谁
select num, salary from employ where salary = (select max(salary) from employ);
2、使用临时表:
查询平均工资最高的部门 :
组函数不可嵌套;
查询结果作为另一个查询的数据源(临时表),当成临时表的过程中必须起别名
select max(avg_salary) from (select avg(salary) as avg_salary from employ group by dept) as avg_table;
select avg_salary, dept from (select avg(salary) as avg_salary, dept from employ group by dept) as avg_employ where avg_salary = (select max(avg_sal) from (select avg(salary) as avg_sal from employ group by dept) as e);
3、多表查询:
select ename, dname from emp, dept where emp.deptno = dept.deptno;
或
select ename, dname from emp join dept on emp.deptno = dept.deptno;