MYSQL的使用方法
基本使用
;为语句结束语句
单行注释 :-- 注释了内容 或 #注释内容
多行 : /注释/
Show DATABASes :查询所有数据库名称
DDL 数据定义语言,操作数据库跟表
DML 数据操作语言,对数据进行增删改
DQL 对表中数据进行查询
DCL 对数据库进行权限控制
DDL---操作库
1·查询
Show databases;
2·创建数据库
Create DATABASES 库名;-- 有库就会报错 Create DATABASES if not exists 库名;-- 不会报错没有创建就进行创建
3·删除数据库
Drop Databases 库名; DROP DATABASES if exists 库名; -- 如果有数据库创建就进行删除
4· 使用数据库
Use 库名;
DDL—操作表
1·查询表
Show tables; 查询表结构 Desc 表名称;
查询表名称
2·创建表
Create table 表名 ( 字段1 数据类型1, 字段2 数据类型2, 字段n 数据类型n, ); -- 例: Create table tb_user( Id int, Username varchar(20), Password varchar(32) ); -- 数据类型 • -- 例 :age int Score double(总长度,小数点后几位数) -- double 就是整数位数加小数点后几位 -- 日期 Birthday data; Name char (10)---存储性能高 浪费空间 Name varchar(10)--- 性能低节约空间 Create DATABASES if not exists 库名; -- 没有创建就进行创建 -- 习题一 Create databases student; Create table studentInformation( Id int, Name varchar(10), Gender char(1), Birthday date, Grades double(5,2), e-mail varchar(64), phone varchar(15), state tinyint );
数据类型
-- 例 :age int Score double(总长度,小数点后几位数) double 就是整数位数加小数点后-- 几位 -- 日期 Birthday data; Name char (10)---存储性能高 浪费空间 Name varchar(10)--- 性能低节约空间
3·删除表
Drop table 表名; DROP table if exists 表名; • -- 如果有数据库创建就进行删除
4·修改表
(1)修改表名 Alter table 表名 rename to 新的表名; (2) 添加一列表 Alter table 表名 ADD 列名数据类型; (3)修改数据类型 Alter table 表名 modify 列名 新数据类型; Alter table studentInformation mondify address char(50); (4)修改列名和数据类型 Alter table 表名 change 列名 新列名 新数据类行; ALITER TABLE studentInformation CHANGE PHONE PHONES VARCHAR(30); (5)删除列 Alter table 表名 drop 列名;
DML—操作数据
1·添加数据
给指定列表添加数据 Insert into 表名 (列名1,列名2….)values(值1,值2…); Insert into stu (id,name) values(1,‘张珊’);-- 这样写给所有列添加属性的话可以无顺序添加 Insert into stu (id,name) values(1,‘张珊’。。。。。。。。。); -- 给所有列添加属性,列名列表是可以省略的 -- 多行添加只需将values 后值多几组数据 括号外加入逗号 Insert into stu (id,name) values(1,‘张珊’。。。。。。。。。),(1,‘张珊’。。。。。。。。。),(1,‘张珊’。。。。。。。。。),(1,珊’。。。。。。。。。);
2·修改数据
Update 表名 set 列名1=值1,列名2=值2,。。。。[where 条件]; Update stu set sex=’女’ where name =’张三‘; Updata stu set Birthday=’1999-12-12’ score=99.99 where name =’张三’ -- 注意 :如果语句后边没有加where 条件就会将表中所有数据修改
3·删除数据
删除 delete from 表名 [where 条件]; Delete from STU WHERE NAME=’ZHANSGAN’; -- 注意 :如果语句后边没有加where 条件就会将表中所有数据删除
DQL—表中数据进行查询
查询数据
Select
字段列表
From
表名列表
Where
条件查询
GrouP by
分组字段
Having
分组后条件
Order by
排序字段
Limit
分页限定
1·基础查询
建表
CREATE TABLE stu( id INT, -- 编号 NAME VARCHAR(20), -- 姓名 age INT, -- 年龄 sex VARCHAR(5), -- 性别 address VARCHAR(100), -- 地址 math DOUBLE(5,2), -- 数学成绩 english DOUBLE (5,2),-- 英语成绩 hire_date DATE -- 入学时间 ); INSERT into stu(ID ,name,age,sex,address, math, english, hire_date) VALUES (1,'马云',55,'男','杭州',66,78,'1995-09-01'), (2,'马华腾',45,'女','深圳',98,87,'1998-09-01'), (3,'马克斯',55,'男','香港',56,77,'1999-09-02'), (4,'柳白',20,'女','湖南',76,65,'1997-09-05'), (5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'), (6,'刘德华',57,'男','香港',99,99,'1998-09-01'), (7,'张学友',22,'女','香港',99,99,'1998-09-01'), (8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');
查询指定列
Select 列名,列名 from 表名; 所有列查询(不建议写) Select * from 表名;
除重
Select distinct 列名 from 表名;
展示是起别名
As
Select 列名as 别名,列名 别名 from 表名; -- As -- 不写as 用空格
2·条件查询
Select 字段名 from 表名 where 条件
例
SELECT * FROM stu WHERE age>20, SELECT * FROM stu WHERE age>=20, -- 并且用and链接 SELECT * FROM stu WHERE age>=20 AND age<=30, -- 限制范围查询用 between ‘‘and’‘ SELECT * FROM stu WHERE hire_date BETWEEN '1998-09-01' and '1999-09-01', -- 相等 SELECT * FROM stu WHERE age=20, -- 不等 SELECT * FROM stu WHERE age!=20, SELECT * FROM stu WHERE age<>20, -- 或 用or SELECT * FROM stu WHERE age=18 OR age=20, -- 或者用 列名 in (数据,数据)表示值为什么的时候 SELECT * FROM stu WHERE age in (18,20,22,), -- 数据为null时用is或is not SELECT * FROM stu WHERE english is NULL,
3·模糊查询
Where 列名 like ’**’;
利用通配符查询
_:代表单个任意字符
%:代表任意数字符
排序查询
排序方式
Select 字段名称 from 表名 order by 排序字段名 [排序方式1], 字段名[排序方式2]…;
Asc: 升序排列(默认值)
Desc: 降序排列
4·分组查询
聚合函数
Null不参与聚合函数
Count 统计数量 取值1、主键(非空且唯一)
Max 最大值
Min 最小值
Sum 求和
Avg 平均值
将一列数据作为一个整体进行纵计算
Select 聚合函数名(列名) from 表;
例
Select count(id) from stu; -- 统计的类名不能为空。
分组查询
Select 字段泪飙 from表名[where 分组前条件限定 group by 分组字段名 【having 分组后条件过滤】;
分组时之后,查询的字段为聚合函数和分段函数,查询其他字段无任何意义
执行顺序 where >聚合函数>having >
Select *被分组列名*,avg(math)from stu group by 被分组列名; Select sex ,avg(math) from stu group by sex;
查询男同学和女同学各自的数学平均分,及各自人数,需求:分数低于70分的不要参与分组
Select sex ,avg(math) from stu where math >70 group by sex;
查询男同学和女同学各自的数学平均分,及各自人数,需求:分数低于70分的不要参与分组,分组之后人数大于2;
Select sex ,avg(math) from stu where math >70 group by sex having count(*)>2;
分页查询
Select 字段列表from 表名 limit 起始索引,查询数目 Select * from stu limit 0,3; -- 第一页 Select * from stu limit 0,3; -- 第二页 Select * from stu limit 3,3; -- 第三页 Select * from stu limit 6,3; -- 起始索引 =(当前页码-1)*每页显示条数
5·数据库约束
非空约束
DROP TABLE IF EXISTS emp;
CREATE TABLE emp(
id int PRIMARY KEY auto_increment,外键非空且自增
ename VARCHAR (50) NOT NULL UNIQUE,非空且唯一
joindate DATE NOT NULL,
salary DOUBLE(7,2) not NULL,
donus DOUBLE(7,2) DEFAULT 0 );非空且有默认值
INSERT INTO emp(id,ename,joindate,salary,bonus)VALUE (1,'张三','1999-11-11',8800,5000);
-- 演示主键
-- 非空且唯一
INSERT INTO emp(id,ename,joindate,salary,donus)VALUES
(null,'张三','1999-11-11',8800,5000);
INSERT INTO emp(id,ename,joindate,salary,donus)VALUES (1,'张三','1999-11-11',8800,5000);
INSERT INTO emp(id,ename,joindate,salary,donus)VALUES (2,'李四','1999-11-11',8800,5000);
-- 非空
INSERT INTO emp(id,ename,joindate,salary,donus)VALUES(3,NULL,'1999-11-11',8800,5000);
-- 唯一约束
INSERT INTO emp(id,ename,joindate,salary,donus)VALUES (3,'李四','1999-11-11',8800,5000);
-- 默认约束
INSERT INTO emp(id,ename,joindate,salary,donus)VALUES (4,'张三','1999-11-11',8800);
-- 自增
INSERT INTO emp(ename,joindate,salary,donus)VALUES ('张就','1999-11-11',8800);
DCL —数据权限控制
1·外键约束
Create table表名( 列名 数据类型 [constraint] [外键名称] freign key (外键列名)references 主表(主表列名)。。。关系名
建表完成
Alter table 表名 aDD constraint [外键名称] freign key (外键列名) references 主表(主表列名)。。。关系列名
2·多表查询
内连接
隐式内连接
Select 字段列表 from 表**1,表2 .。。where** 条件;
Select 表名**.字段名FROM** 表 where 条件
给表起别名
Select 别名**.字段名FROM** 表 别名 where 条件 别名**.字段名=别名2.字段名;**
显示内连接
Select 字段列表 from 表**1 [inner ]join** 表二 on 条件;
查询不同表的不同字段
Select * from emp inner join dept on emp.dep
内连接查∩
外连接
左外链接
Select 字段列表 from 表**1 left [inner ]join** 表二 on 条件;
取右集合所有数据跟交集
右外连接
Select 字段列表 from 表**1 right [inner ]join** 表二 on 条件;
取右集合所有数据跟交集
子查询
单行单列
Select 字段名 from**表** where 字段名 = (子查询**)** ;
多行单列
Select 字段名 from**表** where 字段名 in**(子查询)** ;
多行多列
Select 字段名 from**(子查询)** where 条件;
目录