• MySql语法概述


    数据库概述

    数据库就是存储和管理数据的仓库。
    常见的数据库有关系型数据库和非关系型数据库。
    关系型数据库就是平常使用的数据库,例如Oracle,Mysql等
    非关系型数据库是使用键值对来存储数据,例如redis

    MySql数据库

    连接MySql数据库服务器

    mysql -uroot -proot -h127.0.0.1 -P3306
    -u 用户名
    -p 密码
    -h 连接的数据库ip
    -P 连接的数据库端口

    MySql数据库的增删查

    1)新增数据库

    create database if not exists mydb1 charset utf-8;  --创建mydb1数据库
    

    2)删除数据库

    drop database if exists mydb1;  --删除mydb1数据库
    

    3)查询数据库

    show databases;  --查看数据库服务器中的所有数据库
    select database();  --查看已经进入的数据库
    show create database mydb1;   --查看mydb1数据库的建库语句
    

    MySql数据库对表的增删改查

    1)新增user表

    create table user(
    	id int primary key,
    	name varchar(20),
    	addr varchar(40)
    );
    

    补充:新建表时会添加一些字段约束
    1.主键约束(primary_key)
    如果一个列添加了主键约束,那么这一列就是主键,主键的特点就是唯一且不能为空。
    且一张表中只能有一列作为主键。
    主键还经常与主键自增一同使用,主键自增(auto_increment)
    2.非空约束(not null)
    如果为一列添加了非空约束,那么这个列的值就不能为空,但可以重复。
    3.唯一约束(unique)
    如果为一列添加了唯一约束,那么这个列的指就必须唯一(即不能重复),但是可以为空。
    4.外键约束
    外键其实就是用于通知数据库中两张表中数据关系的列。这样数据库就会帮我们维护两张表中数据之间的关系
    2)删除user表

    drop table if exists user;
    

    3)修改user表

    --新增一列
    alter table user add salary double;
    --删除一列
    alter table user drop salary;
    --修改一列
    alter table user modify name varchar(80);
    

    补充:对表中的约束进行增删改

    alter table user modify name varchar(40) not null;--在修改列时增删改
    --但是在删除主键约束时有些不同
    --若主键有自增,则需先删除主键自增
    alter table user modify id int primary key;
    alter table user drop primary key;
    
    --对外键的新增,删除也需特殊操作
    --新增外键
    alter table user add constraint fk_user_emp foreign key(id) references emp(id); --fk_user_emp是为外键起的名称
    --constraint fk_user_emp语句也可删除,mysql会自动为外键分配一个名字
    --删除外键
    show create table user;--首先查看user表的建表语句,找到外键的名称
    alter table drop foreign key fk_user_emp;
    

    4)查询表
    1.查询表结构

    desc user;
    

    2.查询建表语句

    show create table user;
    


    MySql对表记录的增删改查

    1)增加一条表记录
    语法:insert into stu (列名1,列名2,列名3)value(值1,值2,值3);
    当插入所有列时,列名可省略不写,但是值的个数及顺序必须与列名一致
    2)删除表记录

    delete from emp;
    

    3)修改表记录

    update emp set name='1111'
    

    查询表记录

    1)基础查询

    select * from emp;
    

    2)where语句查询

    select * from emp where id=1;
    select * from emp where id >1;
    select * from emp where id<1;
    select * from emp where id<>1;--不等于
    select * from emp where id !=1;--不等于
    select * from emp where id>=1;
    select * from emp where id <=1;
    select * from emp where id between 1 and 10;--区间查询,两边都是闭区间
    select * from emp where name like '%杨%';--模糊查询
    

    3)多行函数查询
    常用多行函数
    count(列名) 一列记录的数量
    max(列名) 一列的最大值
    min(列名) 一列的最小值
    sum(列名) 一列值的总和
    avg(列名) 一列值的平均值
    补充:
    1.多行函数不能用于where子句中。
    2.多行函数与是否分组有关,分组与否会直接影响多行函数的结果。
    3.多行函数在统计时会自动过滤null值
    注意:

    • 多行函数和是否分组有关,如果查询结果中的数据没有经过分组,默认整个查询结果是一个组,多行函数就会默认统计当前这一个组的数据。产生的结果只有一个。

    • 如果查询结果中的数据经过分组(分的组不止一个),多行函数会根据分的组进行统计,有多少个组,就会统计出多少个结果


    4)分组查询
    group by

    select max(salary) from emp group by gender; --按照姓别分组,并查询出每组薪资的最大值
    

    5)排序查询
    order by

    select * from emp order by id;--按照id进行排序  asc升序(由低到高),desc降序(由高到低)
    

    6)分页查询
    limit (查询页数-1)*每页查询笔数,每页查询笔数(MySql特有的分页查询方式)

    select * from emp limit 0,3;----每页查询3条,显示第一页
    select * from emp limit 3,3;----每页查询3条,显示第二页
    select * from emp limit 6,3;----每页查询3条,显示第三页
    

    7)多表查询

    select * from dept inner join emp on dept_id=dept.id;-------内连接查询
    select * from dept left join emp on dept_id=dept.id;--------左外连接查询
    select * from dept right join emp on dept_id=dept.id;-------右外连接查询
    --三者的区别
    --内连接查询,会去除两表中多余的值
    --左外连接查询,以左边表为准,即使右边表没有对应的记录,也会查询出来
    --右外连接查询,以右边表为准,即使左边表没有对应的记录,也会查询出来
    

    8)子查询
    将一张表中查询出来的结果做为另一张表的查询条件

    补充内容:where和having的区别
    1)where是在分组前对记录进行筛选,并且where子句中不能使用多行函数且不能使用列别名,但是可以使用表别名
    2)having是在分组后对记录进行筛选,并且having子句中可以使用多行函数,列别名,表别名

    注意:
    SQL语句的书写顺序

    select * | 列名   --要查询哪些列
    from 表名         --要查询哪些表
    where 条件        --筛选条件
    group by 列名     --按照哪一列分组
    having 条件       --分组后筛选
    order by 列名     --排序
    limit  起始笔数,查询笔数   --分页
    

    sql语句的执行顺序

    from 表名    --确认要查询哪些表
    where 条件   --通过条件进行筛选
    select * | 列名  --确定要查询哪些列
    group by 列名    --确定根据哪些列进行分组
    having 条件       --分组后再进行筛选
    order by 列名     --排序
    limit  起始笔数,查询笔数   --分页
    

    补充:其他常见函数
    curdate() 获取当前日期,格式为年月日
    curtime() 获取当前时间,格式为时分秒
    sysdate()/now 获取当前日期+时间,格式为年月日时分秒
    year(date) 年
    month(date) 月
    day(date) 日
    hour(date) 时
    minute(date) 分
    second(date) 秒
    concat(s1,s2) 将两个字符串连接成一个字符串
    concat(x,s1,s2) 将两个字符串连接成一个字符串,并在两个字符串中插入字符x



    MySql数据类型

    数值类型

    1)tinyint 占用1个字节,相当于byte
    2)smallint 占用2个字节,相当于short
    3)int 占用4个字节
    4)bigint 占用8个字节,相当于long
    5)float 占用4个字节
    6)double 占用8个字节


    字符类型

    1)char(n)定长字符串,最长255个字符。
    特点:即使插入字符不足n个字符,也会占用n个字符,浪费空间,但是存储速度较快。适合存储定长的数据
    2)varchar(n)变长自符串,最长不超过65535个字节,但是一般超过255个字符,就会使用text字符
    3)text,大文本类型


    日期类型

    1)date 年月日
    2) time 时分秒
    3)timestamp 时间戳

  • 相关阅读:
    Web开发中的显示与隐藏
    Html中的表格
    go标准库的学习-encoding/json
    go-simplejson文档学习
    go标准库的学习-regexp
    go标准库的学习-net
    go标准库的学习-strconv-字符串转换
    go标准库的学习-strings-字符串操作
    go标准库的学习-net/rpc
    go标准库的学习-net/rpc/jsonrpc
  • 原文地址:https://www.cnblogs.com/planted/p/15186943.html
Copyright © 2020-2023  润新知