相信的心就是你的魔法

01.SQL基础语法

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
    8
    CREATE 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
2
3
4
5
6
ALTER TABLE tb_student ADD COLUMN stuadd VARCHAR(200);
ALTER TABLE tb_student ADD COLUMN
(
stuclass VARCHAR(10),
stuheight float
);
  • 删除字段

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
2
3
insert into tb_student values (1001,'狗剩','1993-10-8', 1, '18181818001');
insert into tb_student (stuname,stubirth,stutel) values ('王大拿','1990-3-17','18188888888');
insert into tb_student (stuname,stubirth,stugender,stutel)values('稻花香',date(now()),0,'19012345678'),('牛王庙','1999-2-13',1,'18966666666'),('天下一剑','1997-12-21',1,'13190909090');

补充:值的问题

  • 字符串 - 用引号(单双都可)引起来
  • 日期(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
    2
    DELETE 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
2
ALTER table tb_student add COLUMN stuaddr VARCHAR(200);
UPDATE tb_student set stuaddr='成都',stubirth=date(now()) where stugender=0;

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; – 先按性别进行从小到大的排序,排序之后,再按照生日从大到小对性别相同的对象进行排序

------ 本文结束------