- DOS命令方式
- 什么是 SQL
- SQL 作用
- SQL 语句分类
- MySQL 的语法
- DDL操作
- 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 = ‘黄石市’;
- 带条件修改数据,将 id 号为 2 的学生性别改成男
 update student2 set address = ‘深圳’ where id = 2;
- 一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京
 update student2 set age=30,address=’上海’ where id=3;
- 不带条件删除数据
 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;
- 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;
- —————————————————————
 — 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
 select * from student3 where age > 35 and sex = ‘男’ and address = ‘香港’;
- 表示从值 77 到值 87 范围,包头又包尾
 select * from student3 where english >= 77 and english <= 87;
- LIKE 表示模糊查询
 # % 匹配任意多个字符串 0~N
 # _ 匹配一个字符 1~1
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;                                                                                    — 改变要使用的数据库
创建表
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
 
                         
                                

