1.sql基础
sql又叫结构化查询语言,分为三大类:DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)
- DDL:create(创建数据库和表)、drop(删除数据库和表)、alter(修改数据库和表)
- DML:insert(增)、delete(删)、update(改)、select(查)
- DCL:grant(授权)、revoke(召回授权)
sql的注释是在注释前加–;sql中sql的关键字不区分大小写;sql语句结束后需要加分号
2. DDL(数据定义语言)
2.1 数据库操作
2.1.1 创建数据库
create database 数据库名称; - 创建指定数据库,如果这个数据库已经存在,会报错
create database if not exists 数据库名称; - 当指定数据库不存在的时候创建对应的数据库
create database if not exists 数据库名称 default charset utf8; - 创建数据库的时候指定数据库文件的编码方式
1 | create database if not exists school default charset utf8; |
2.1.2 删除数据库
drop database 数据库名称;
drop database if exists 数据库名称;
1 | drop database if exists school; |
2.1.3 切换/使用数据库
use 数据库; - 切换/使用指定数据库;切换后所有数据库相关操作都是针对这个数据库
1 | use school; |
2.2 表的操作
2.2.1 创建表(数据库文件是通过表来存数据)
create table if not exists 表名(字段名1 类型名1 约束1,字段名2 类型名2 约束2,字段名3 类型名3 约束3,…);
- 表名:程序员自己命名,见名知意,一般需要加前缀t_/tb_表示表
- 字段名:程序员自己命名,见名知意;注意:字段中一定要有一个字段来作为主键(可以表示唯一一条记录);主键要求不能为空,并且是唯一的,而且类型是整型
- 类型名:必须是当前数据库支持的数据类型,mysql中常用的数据类型:int(整型),float(浮点型),double(更大取值范围的浮点型数据),varchar(字符串)/text(字符串),bit(布尔),date/datetime(日期和时间)
- 约束:not null(非空约束)、unique(唯一约束)、default(默认值约束)、primary key(主键约束)、foreign key(外键约束)、auto_increment(自动增长)
- 注意:约束可以没有,也可以有多个
1
2
3
4
5
6
7
8CREATE TABLE IF NOT EXISTS tb_student
(
stuid int PRIMARY KEY auto_increment,
stuname VARCHAR(20) not null,
stubirth date,
stugender bit DEFAULT 1,
stutel VARCHAR(11) UNIQUE
);2.2.2 删除表
drop table if exists 表名; - 删除指定表1
drop TABLE if EXISTS tb_student;
2.2.3 修改表
- 添加字段
alter table 表名 add column 字段名 字段类型 字段约束;
1 | ALTER TABLE tb_student ADD COLUMN stuadd VARCHAR(200); |
- 删除字段
alter table 表名 drop column 字段名;
1 | ALTER table tb_student drop COLUMN stuheight; |
- 修改字段名
alter table 表名 change 原字段 新字段 新的类型;
1 | ALTER TABLE tb_student CHANGE tel stutel VARCHAR(11); |
- 添加约束
- 删除约束
3.DML(数据操作语言)
数据操作语言主要提供表中数据的增、删、改、查操作
3.1 insert
insert into 表名 values(值1,值2,值3,…); - 按表中字段的顺序依次给每个字段赋值,最终形成一条新的记录
insert into 表名(字段名1,字段名2,…)values(值1,值2,…) - 按指定顺序给指定字段赋值,最终形成一条新的记录
insert into 表名(字段名1,字段名2,…)values(第一条数据的值1,第一条数据的值2,…),(第二条数据的值1,第二条数据的值2),…;
1 | insert into tb_student values (1001,'狗剩','1993-10-8', 1, '18181818001'); |
补充:值的问题
- 字符串 - 用引号(单双都可)引起来
- 日期(date) - 1)日期字符串 2)date(now()) - 当前日期 year(now()) - 当前年 month(now()) - 当前月:这些都是mysql的函数
- 布尔 - 1或0
3.2 delete
delete from 表名; - 删除当前表中所有的记录(清空表)
delete from 表名 where 条件; - 删除所有满足条件的记录
补充:
- sql条件语句的写法(筛选);条件语句在写的时候可以通过加()来改变运算的优先级
- 比较运算:=(等于),<>(不等于),>,<,>=,<=
- 逻辑运算:and(逻辑与),or(逻辑或) ,not(逻辑非)
- 集合包含:in eg:delete from tb_student where stuname in (‘狗剩’,’稻花香’);
- 范围: between and
- 判断是否为空:is null,is not null
- 筛选:like(%表示任意个任意字符,_表示一个任意字符)
1
2DELETE FROM tb_student where stutel like '_3%';
DELETE FROM tb_student where stuname='王大拿';3.3 update
update 表名 set 字段1=新值1,字段2=新值2,…; - 将指定表中所有记录中指定的字段修改成指定的值
update 表名 set 字段1=新值1,字段2=新值2,…where 条件; - 将满足条件的记录的指定字段设置为指定值
1 | ALTER table tb_student add COLUMN stuaddr VARCHAR(200); |
3.4 select
select * from 表名; - 获取指定表中所有的记录中的所有字段的数据
1 | SELECT * FROM tb_student; |
- 映射
select 字段1,字段2,字段3,…from 表名; - 获取表中所有记录指定字段的数据
1 | SELECT stuname,stutel FROM tb_student; |
- 列重命名
select 字段名1 as 新字段名1,字段名2,字段名3 as 新字段名3,… from 表名; – as 可以省略
select stuname as ‘姓名’,stutel as ‘电话’ from tb_student;
– 结果重新赋值(主要针对布尔)
select if(字段名,值1,值2) from 表名; - 如果if中对应的字段的值是1,最后的结果就是值1,否则是值2(mysql特有写法)
通用写法:select case 字段 when 值 then 新值1 else 新值2 end
select stuname as ‘姓名’,if(stugender,’男’,’女’) as ‘性别’ from tb_student;
ifnull(字段,值) – 如果指定的字段值为空,则返回指定的值,否则返回字段本身
1 | select stuname as '姓名',case stugender when 1 then '男' else '女' end as '性别' from tb_student; |
- 列合并(查询的时候将多个字段合并成一个数据返回结果)
select concat(字段1,字段2,…)from 表名;
1 | SELECT CONCAT(stuid,stuname) as 'information' FROM tb_student; |
注:
- 筛选
上面所有的查询语法后面都可以加’where条件’对记录进行筛选
– select * from 表名 where 条件;
1 | select stuname,stutel from tb_student where stugender=0; |
- 排序
select * from 表名 order by 字段; - 将查询结果按指定字段的值从小到大排序
select * from 表名 order by 字段 asc; - 将查询结果按指定字段的值从小到大排序
select * from 表名 order by 字段 desc; - 将查询结果按指定字段的值从大到小排序
select * from tb_student order by stugender, stubirth desc; – 先按性别进行从小到大的排序,排序之后,再按照生日从大到小对性别相同的对象进行排序