目录
4.1添加数据 insert into ...values..
一、基本概念
1.MySQL的启动&关闭、登录、退出
启动&关闭:
net start mysql
net stop mysql
登录:
mysql -u账号 -p密码 //特点:输入的密码会显示出来
mysql -u账号 -p(回车)密码 //特点:输入的密码隐藏
退出:
exit 或者quit
2.sql语言概念
概念:就是定义了操作所有有关系型数据库的规则。每一种数据库操作的方式有所不同,这种不同称为“方言”;
全名:Structured Query Language 结构化查询语言,
二、SQL语言分类
1. DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
2. DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3. DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4. DCL(Data Control Language)数据控制语言
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
三.DDL
1.操作数据库
1.1C(Create):创建create
直接创建:
create database 数据库名称;
创建并判断是否为空:
create databases if not exists 数据库名
创建并判断,并指定它的编码;
create databases if not exists 数据库名 character set
比如:CREATE DATABASE IF NOT EXISTS test CHARACTER SET utf8;
1.2.R(Retrieve):查询show
查询全部
show databases;
指定查询
show database 数据库名;
1.3.U(Updata):修改
修改数据库的字符集
alter database 数据库名称 character set 字符集名称
1.4.D(Delete):删除drop
删除数据库
drop database 数据库名称;
判断并删除
drop database if exists 数据库名称;
1.5使用数据库
查询当前正在使用的数据库名称
SELECT DATABASE();
使用数据库(进入数据库)
use 数据库名称;
2.操作表
2.1.C(Create):创建create
创建 表 Demo1(
字段id 类型bigint 非空 自增,
字段name 类型varchar长度10 非空,
字段age 类型int 非空,
主键(id)
);
CREATE TABLE Demo1(
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(10) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);
添加一列
alter table 表名 add 列名 数据类型;
2.2.R(Retrieve):查询show
查询本数据库的数据表
show tables;
查询表结构
describe 表名;
2.3.U(Updata):修改alter
修改表名:
alter table 表名rename to 新的表名;
修改字符集:
查看字符集:show create table 表名;
修改字符集:alter table 表名 character set 字符集名称;
修改列的名称 类型
alter table 表名 change 列名 新列名 新数据类型
只改类型
alter table 表名 modify 列名 新数据类型名
修改表中数据:
update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件];
注:如果不加任何条件则会将表中所有记录全部修改
2.4.D(Delete):删除drop
删除表:
drop table 表名;
删除列
alter table 表名 drop 列名
删除并判断:
drop table if exists 表名;
2.5.复制表:
create table stu like student; 创建一个stu表,像student表
四.DML
4.1添加数据 insert into ...values..
insert into 表名
(列名1,列名2,...列名n)
values
(值1,"值2"...值n),
(值1,"值2"...值n),
(值1,"值2"...值n);
注意:
注1:类型和位置要对应
注2:若表名后不定义列名则默认给所有列添加值
注3:除了整型,其他类型的值都要用单引号引起来
4.2删除数据
DELETE FROM 表名 where 条件;
比如:DELETE FROM demo1 WHERE id = 1;
五.DQL
5.1基础查询
1.多个字段的查询
select 列名1,列名2...from 表名;
2.查询所有字段
select * from 表名;
3.去除重复:distinct
select distinct 字段名 from 表名;
4.计算列
select 字段名 + 字段名 from 表名;
注:如果一个字段值为null,则结果为null,所以可以使用ifnull(列名,值)
5.起别名
as 或者 空格
5.2条件查询:where
1.in
查询学生表中id为1、2、3的内容
select id from student where id in (1,2,3,4);
2.BETWEEN AND
两者之间:查询demo1表中id在1~3之间的
SELECT * FROM demo1 WHERE id BETWEEN 1 AND 3;
结果是id=2 和id=3 的结果
3.占位符:
%:占位n个
%刘% 表示内容含有刘的 比如 ***刘***、刘***、***刘
%刘 表示以刘结尾的 比如 *****刘
刘% 表示以刘开头的 比如:刘*****
_:占位一个
刘_ 能代表刘*,但是不能代表刘**
4.like
模糊查询
select * from student where name like "%刘%"
select * from student where name like "刘_"
5.3排序查询:order by
递增(默认) ASC
降序 DESC
如:
递增:SELECT * FROM demo1 ORDER BY id ASC
递减:SELECT * FROM demo1 ORDER BY id DESC
5.4聚合函数
count:计算数量个数,一般选择非空的列(主键)
如:SELECT COUNT(id) FROM 表名;
max:计算最大值
SELECT MAX(age) FROM 表名;
min:计算最小值
SELECT MIN(age) FROM 表名;
sum:计算和 (注:自动将null视为0)
SELECT SUM(age) FROM 表名;
avg:计算平均值
SELECT AVG(age) FROM 表名;
5.5分组查询
比如:查询男生,女生的平均年龄
查询 平均年龄 性别 来自与表demo1 根据性别分组
SELECT AVG(age) AS "平均年龄",sex AS "性别" FROM demo1 GROUP BY sex;
附加条件 :
where
SELECT AVG(age) AS "平均年龄",sex AS "性别" FROM demo1 WHERE id > 3 GROUP BY sex;
从id=4开始查询
having
SELECT AVG(age) AS "平均年龄",sex AS "性别" FROM demo1 GROUP BY sex HAVING COUNT(id)>3;
分组查询,分组后总数要大于3(男生只有三人,所以过滤掉了男生)
where和having的区别
where:在分组前进行判断,不满足条件不准参与查询
having:在分组之后进行判断,不满足条件查询结果不显示
5.6分页查询:limit
select * from 表名 limit 开始值,结束值;
5.7顺序总结
select 字段列表 from 表名列表where 条件列表 group by 分组列表 having 分组之后的条件 order 排序 limit 分页限定
六.DCL
6.1 添加用户:
语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
6.2 删除用户:
语法:DROP USER '用户名'@'主机名';
6.3修改用户密码:
方法一、UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
方法二、SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
6.5root用户忘记密码:
1.停止MySQL服务
管理员身份运行DOS命令窗口,输入 net stop mysql;
2.使用无验证方式启动MySQL服务
mysqld -- skip-grand - tables
3.再打开一个新的DOS命令窗口,输入MySQL直接回车就可以登录
4.改密码
use mysql;回车
5.UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
6.关闭所有窗口,进入任务管理器,在进程里面找到并结束mysqld进程;
7.管理员身份启动DOS窗口,然后开始使用新的密码登录;
七、约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性
分类:
- 非空约束:not null
- 唯一约束: unique
- 主键约束:primary key
- 外键约束:foreign key
- 级联操作
7.1、非空约束:not null
创建时添加
直接在列后边添加
如:create table student {name varchar(20) not nuull}
删除约束
重新定义该列
alter table 表名 modify 列名 类型 ;
如:alter table student modify stuname varchar(20);
创建后添加
重新定义并modify
如:alter table student modify stuname varchar(20) unique
7.2、唯一约束: unique
特点:可以有一个为null,也就是null也不能重复
创建时添加
直接在列后面添加
如:create table student {name varchar(20) unique}
删除约束
drop index 列名;
如:alter table student drop index stuname;
创建后添加
重新定义并modify
alter table student modify stuid int primary key;
联合主键
create table aaa(tid int , uid int , primary key (tid,uid) );
7.3、主键约束:primary key
特点:它包含了非空且唯一,且一张表只能有一个主键
创建时添加
列名 列类型 primary key;
如:create table student{stuid int primary key};
删除约束
drop primary key;
如;alter table student drop primary key;
注:因为一张表只能有一个主键,所以删除是只需要提供表名即可
创建后添加
重新定义并modify
如:alter table student modify stuid int primary key;
联合主键
create table aaa(tid int , uid int , primary key (tid,uid) );
7.4、外键约束:foreign key
注意:外键可以为null,但不能为关联表不存在的值
公式:
CONSTRAINT外键列 constraint 外键名称 foreign key(外键列名) references 主表名称(主表列名)
创建时添加
create table 表名( ……CONSTRAINT外键列 constraint 外键名称 foreign key(外键列名 references 主表名称(主表列名)));
删除约束
ALTER TABLE 添加外键的表DROP FOREIGN KEY 外键名;
创建后添加
ALTER TABLE 表名ADD CONSTRAINT外键列 constraint 外键名称 foreign key(外键列名) references 主表名称(主表列名)
7.5、级联操作
什么是级联操作:
在有外键约束时,修改表1的主键列值,表2的外键列也会自动修改
公式:ON UPDATE CASCADE
添加外键设置级联更新
ALTER TABLE 表名ADD CONSTRAINT外键列 constraint 外键名称 foreign key(外键列名) references 主表名称(主表列名)ON UPDATE CASCADE ;
级联删除
ON DELETE CASCADE
八、多表查询
8.1笛卡尔积:select * from 表1,表2;
笛卡尔积结果:
笛卡尔积是多表查询中发生的一种现象,他会出现多张表数据的组合,如A有两条数据,B有三条数据,笛卡尔积就会出现3*2条数据;
8.2多表查询分类:
- 内连接查询
- 隐式内连接
- 显示内连接
- 外连接查询
- 左外连
- 右外连接
- 子查询
8.3内连接查询
隐式内连接
使用where条件,where后边跟两个表的主键列,或其他
如:
select student.name,teacher.name from student,teacher where student.sid = teacher.tid;
显示内连接
语法:
select * from 表1 inner join 表2 on 条件 表1.主键列 = 表2 . 主键列;
8.4外连接查询
左外连
语法:
select * from 表1 left join 表2 on 条件;
查询时两个表如果有一个位置为空的话就会排除掉,左连接将会不排除左边的内容,只排除右边的空值内容
右外连接
语法:
select * from 表1 right join 表2 on 条件;
8.5子查询
概念:
子查询就是一个select里面还有一个select查询语句,那么这个嵌套的select就是子查询
子查询的不同情况
1.查询结果是单行单列
一般使用运算符 > 、>=、< 、<= 、=
2.查询结果是多行单列
一般使用运算符in
如: select * from student where tid in (select tid from teacher where name = '张三'or name = ‘李四’);
3.查询结果是多行多列
一般将子查询当成虚拟表放在from后
select * from student,(子查询) where……;
今天到此结束,明天事务