DOS命令方式

-> net start mysql——————————-启动mysql服务命令
-> mysql -uroot -p123456——————连接mysql服务器

什么是 SQL

Structured Query Language 结构化查询语言

SQL 作用

1) 是一种所有关系型数据库的查询规范,不同的数据库都支持。
2) 通用的数据库操作语言,可以用在不同的数据库中。
3) 不同的数据库 SQL语句有一些区别

SQL 语句分类

1) DataDefinition Language (DDL数据定义语言) 如:建库,建表
2) DataManipulationLanguage(DML数据操纵语言),如:对表中的记录操作增删改
3) DataQueryLanguage(DQL数据查询语言),如:对表中的查询操作
4) DataControl Language(DCL数据控制语言),如:对用户权限的设置
& DML与DQL在开发中使用的较多,重点关注 &

MySQL 的语法

1) 每条语句以分号结尾,如果在 SQLyog中不是必须加的。
2) SQL中不区分大小写,关键字中认为大写和小写是一样的
3) 3种注释:

注释的语法 说明
—空格 单行注释
/ / 多行注释
# 这是 mysql 特有的注释方式

DDL操作

创建数据库

create database db1; — 直接创建数据库 db1
create database if not exists db2; — 判断是否存在,如果不存在则创建数据库 db2
create database db3 default character set gbk; — 创建数据库并指定字符集为 gbk

查看数据库

show databases; — 查看所有的数据库
show create database db3;
show create database db1; — 查看某个数据库的定义信息

修改数据库

alter database db3 character set utf8; — 将db3数据库的字符集改成 utf8

删除数据库

drop database db2; — 删除db2数据库

使用数据库

selectdatabase(); — 查看正在使用的数据库
use db4; — 改变要使用的数据库

创建表

关键字说明
create 创建
table 表

MySQL 数据类型

分类 类型名称 类型说明



整数
tinyInt 微整型:很小的整数(占 8 位二进制)
smallint 小整型:小的整数(占 16 位二进制)
mediumint 中整型:中等长度的整数(占 24 位二进制)
int(integer) 整型:整数类型(占 32 位二进制)

小数 float 单精度浮点数,占 4 个字节
double 双精度浮点数,占 8 个字节


日期
time 表示时间类型
date 表示日期类型
datetime 同时可以表示日期和时间类型


字符串
char(11) 固定长度的字符串,无论使用几个字符都占满全部,M 为 0~255 之间的整
varchar(11) 可变长度的字符串,使用几个字符就占用几个,M 为 0~65535 之间的整数



大二进制
tinyblob
Big Large Object
允许长度 0~255 字节
blob 允许长度 0~65535 字节
mediumblob 允许长度 0~167772150 字节
longblob 允许长度 0~4294967295 字节
大文本 tinytext 允许长度 0~255 字节

text 允许长度 0~65535 字节
mediumtext 允许长度 0~167772150 字节
longtext 允许长度 0~4294967295 字节

创建 student表包含 id,name,birthday字段
create table student ( id int, — 整 数
name varchar(20), — 字符串
birthday date — 生日,最后没有逗号
);

查看表

use day21;
show tables; — 查看day21数据库中的所有表
desc student; — 查看 student表的结构
show create table student; — 查看 student的创建表 SQL语句

id int(11) DEFAULT NULL — `存在的目的是为了避免关键字的冲突

快速创建一个表结构相同的表

create table s1 like student; — 创建一个 s1的表与 student结构相同

删除表

drop table s1; — 直接删除表 s1表
drop table if exists create; — 判断表是否存在并删除 s1表

修改表结构

alter table student add remark varchar(20); —为学生表添加一个新的字段 remark,类型为 varchar(20)
alter table student modify remark varchar(100); —将student表中的 remark字段的改成 varchar(100)
alter table student change remark intro varchar(30); —student表中的 remark字段名改成 intro,类型 varchar(30)

rename table student to student2; — 将学生表 student改名成 student2
alter table student2 character set gbk; — 将student2表的编码修改成 gbk

DML操作

插入记录

插入部分的列,向学生类中
insert into student2 (id,name,age,sex) values(1,’孙悟空’,20,’男’);
insert into student2 (id,name,age,sex) values(2,’孙悟天’,16,’男’);

插入所有的列(七龙珠)
insert into student2 values (3,’孙悟饭’,18,’男’,’龟仙人洞中’);
insert into student2 value(4,’克林’,18,’男’,’龟仙人洞中’);

如果插入部分列,必须写列名(会报错)
insert into student2 values (3,’孙悟饭’,18,’男’);

插入数据偷懒方法
insert into student2 values (3,’孙悟饭’,18,’男’,null);

字符和日期型数据应包含在单引号中
insert into student values (10,’小华’,’2020-1-1’);
insert into student values (11,’小大’,NOW());

将 student2 表中的数据添加到 newstudent 表中
insert into newstudent select * from student2;

如果只想复制 student2 表中 name,age 字段数据到 newstudent 表中,两张表都写出相应的列名
insert into newstudent (name,age) select name,age from student2;

不带条件修改数据,将所有的性别改成女
update student2 set sex = ‘男’,address = ‘黄石市’;

update student2 set age = age + 1 ;

带条件修改数据,将 id 号为 2 的学生性别改成男
update student2 set address = ‘深圳’ where id = 2;

一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京
update student2 set age=30,address=’上海’ where id=3;

update student2 set age =29,address = ‘黄州’, sex = ‘女’ where name = ‘克林’;

不带条件删除数据
delete from newstudent;

带条件删除数据,也能支持触发器
delete from student2 where id = 1;

使用 truncate 删除表中所有记录
# truncate 相当于删除表的结构,再创建一张表,他是没有办法进行数据回滚的,也不能支持触发器
truncate table newstudent;# 基本不用

查询所有学生
select * from student2;

查询指定列的数据,多个列之间可以逗分隔
select name , address, sex from student2;

使用别名,别名对原表没有影响
select name as 姓名,age as 年龄 from student2; #  表使用别名的原因:用于多表查询操作

清楚重复值distinct
#查询学生来自于哪些地方
select distinct address,name,age from student2;

给所有的数学加5分
select math , math +5 as 新成绩 from student3;

查询 math+english的和
select * from student3;

select * ,(math+ifnull(english,0)) as 总成绩 from student3; #如果是空,就给一个默认值
# ifnull(expr1,expr2)如果空,返回expr1,否则返回expr2

as可以省略

null不能使用等于,只能使用is判断
select * from student3 where english is null;

查询math分数大于80分的学生
select * from student3 where math > 80;

查询english分数小于或等于78分的学生
select * from student3 where english < 78;

查询age等于20岁的学生
select * from student3 where age = 20;

查询age不等于20岁的学生 注:有两种写法
select * from student3 where age <> 20;

select * from student3 where age != 20;

—————————————————————
— 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
select * from student3 where age > 35 and sex = ‘男’ and address = ‘香港’;

— 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
select * from student3 where age >35 or sex = ‘男’;

— 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id = 1 or id = 3 or id = 5;

select from student3 where (age > 35 and sex = ‘男’) or address = ‘香港’;
#——————————————————————————————-
— 查询 id 是 1 或 3 或 5 的学生
select
from student3 where id in(1,3,5);

— 查询 id 不是 1 或 3 或 5 的学生
select * from student3 where id not in(1,3,5);

select * from student3 where english is not null;

表示从值 77 到值 87 范围,包头又包尾
select * from student3 where english >= 77 and english <= 87;

select * from student3 where english between 77 and 87;

LIKE 表示模糊查询
# % 匹配任意多个字符串 0~N
# _ 匹配一个字符 1~1

— 查询姓马的学生
select * from student3 where name like ‘马%’;

select * from student3 where name like ‘马’; # 仅查询名字叫’马’

— 查询姓名中包含’德’字的学生
select * from student3 where name like ‘%德%’;

— 查询姓马,且姓名有两个字的学生
select * from student3 where name like ‘马_’; # 马后面必须有一个字

insert into student3 values(9,’马%_%’,22,’女’,’香港’,99,99);

select * from student3 where name like ‘马\%_\%’; # \转义字符

总结

记住某些关键字的含义有助于我们理解与写代码
add 增
drop 删
change 改 alter
select 查
distinct 清楚重复值distinct
# LIKE 表示模糊查询
# % 匹配任意多个字符串 0~N
# _ 匹配一个字符 1~1