- 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