美文网首页
mysql常用语法

mysql常用语法

作者: num_one | 来源:发表于2020-04-09 19:24 被阅读0次

    操作数据库 CRUD

    1.C(create)创建
    // 创建数据库,先判断是否存在,不存在就创建,并制定数据库的字符集
    create database if not exists 数据库名称 character set 字符集名称(一般 utf8 );
    
    2.R(retrieve)查询
    // 查看所有数据库
    show databases;
    
    // 查看某个数据库字符集
    show create database 数据库名称;
    
    3.U(update)修改
    // 修改某个数据库的字符集
    alter database 数据库名称 character set 字符集名称(一般 utf8 );
    
    4.D(delete)删除
    // 删除数据库,先判断是否存在,存在就删除
    drop database if exists 数据库名称;
    
    5.普通操作
    // 当前数据库
    select database();
    
    // 使用数据库
    use 数据库名称;
    

    操作表

    1.C(create)创建
    // 常用类型如下
    1.int 整数类型
    2.double(5,2) 小数类型:共5位数字,小数点后保留2位
    3.date 日期:年月日形式,2020-02-02
    4.datetime 日期:年月日时分秒形式,2020-02-02 12:00:00
    5.timestamp 时间戳:年月日时分秒形式,2020-02-02 12:00:00
    6.varchar(20) 字符串类型:最多20个字符
    
    // 创建表
    create table 表名(
        列名1 数据类型1,
        列名2 数据类型2,
        ...
        列名n 数据类型n
    );
    
    // 复制表
    create table 新表名 like 已存在的表名;
    
    // 测试  
    // 注意:double(5,2)共5位数字,小数点后保留2位
    // 注意:insert_time timestamp 最后一项没有逗号
    create table person(
      id int,
      name varchar(20),
      weight double(5,2),  
      birthday date,
      insert_time timestamp
    );
    
    2.R(retrieve)查询
    // 查看所有表
    show tables;
    
    // 查看某个表结构
    desc 表名;
    
    // 查看某个表字符集
    show create table表名;
    
    3.U(update)修改
    // 修改表名
    alter table 表名 rename to 新表名;
    
    // 修改表的字符集
    alter table 表名 character set 字符集(utf8);
    
    // 添加一列
    alter table 表名 add 列名 数据类型;
    
    // 修改列名称
    alter table 表名 change 列名 新列名 新数据类型;
    
    // 修改列数据类型
    alter table 表名 modify 列名 新数据类型;
    
    // 删除列
    alter table 表名 drop 列名;
    
    4.D(delete)删除
    // 删除表,先判断是否存在,存在就删除
    drop table if exists 表名;
    

    增删改数据(DML)

    1.添加数据
    // 中括号中列名可省略,省略后values中必须全部赋值。
    // 赋值时,除了数字类型,其他类型都必须使用双引号
    insert into 表名[(列1,列2,...列n)] values(数据1,数据2,...数据n);
    
    2.删除数据
    // 中括号中条件可省略,注意:省略后,会逐条删除全部数据。
    delete from 表名 [where 条件];
    
    // 先删除表,然后创建一张相同的空表,删除全部数据的效率高。
    truncate table 表名;
    
    3.修改数据
    // 中括号中条件可省略,注意:省略后,会逐条删除全部数据。
    update 表名 set 列1 = 数据1,列2 = 数据2,列n = 数据n [where 列=值];
    

    查数据(DQL)

    查询的基本语法字段
    select 字段列表
    from 表名列表
    where 条件列表
    group by 分组列表
    having 分组后的条件
    order by 排序
    limit 分页

    // 查看表中所有数据
    select * from 表名;
    
    // 去除重复数据
    select distinct 字段名 from 表名;
    
    // 计算数字数据,ifnull表示,如果是null值默认为后面的值。
    select num01, num02, ifnull(num1,0) + ifnull(num2,1) from 表名;
    
    // 起别名, as可以省略
    select num01 别名, num02 别名, ifnull(num1,0) + ifnull(num2,1) [as] 别名 from 表名;
    
    

    where查询条件示例,范围取值有: > < = >= <= !=

    // 各种
    select * from person where age = 20;
    select * from person where age >= 20;
    select * from person where age != 20;
    
    // 20到30之间
    select * from person where age >= 20 && age <= 30;
    select * from person where age >= 20 and age <= 30;
    select * from person where age between 20 and 30;
    
    // 等于15,20,25岁的人
    select * from person where age = 15 or age = 20 or age = 25;
    select * from person where age in (15,20,25);
    

    where查询null值,是null:is null 不是null:is not null

    // 判断值是否为 null 必须使用 is null 或 is not null
    select * from person where age is null;
    select * from person where age is not null;
    
    // 错误写法,错误写法,错误写法,null不是值,不能 = null
    select * from person where age = null;
    

    where查询的模糊查询:like,一个占位符_ 多个占位符%

    // 姓马的人
    select * from person where name like "马%";
    
    // 第三个字为马的人,两个"_"代表两个字,后面字符不限加"%"
    select * from person where name like "__马%";
    
    // 姓名是3个字的人,只需要3个下划线 
    select * from person where name like "___";
    
    // 包含马字的人
    select * from person where name like "%马%";
    

    排序查询:ASC 升序(默认),DESC降序

    // 按照数学成绩排名,只有数学成绩相等时,按照英语成绩排名。
    select * from student order by math ASC , english DESC;
    

    聚合函数:将一列数据作为整体,进行纵向计算。

    // count:统计数据个数,一般选择使用主键统计个数
    select count(id) from student;
    
    // max:数据中最大值
    select max(math) from student;
    
    // min:数据中最小值
    select min(math) from student;
    
    // sum:数据和
    select sum(math) from student;
    
    // avg:数据平均数
    select avg(math) from student;
    

    分组:group by

    // 按照性别分组,分别查询男、女的平均分
    select sex , AVG(math) COUNT(id) from student group by sex;
    
    // 按照性别分组,分别查询男、女的平均分
    // 要求1:分数大于60分才参与计算
    select sex , AVG(math) from student where math > 60 group by sex;
    
    // 按照性别分组,分别查询男、女的平均分
    // 要求1:分数大于60分才参与计算
    // 要求2:分组后,组员数大于2,才参与计算
    select sex , AVG(math) from student where math>60 group by sex having COUNT(id)>2;
    
    // where 与 having 的区别
    // 1.where在分组前限定,满足条件才能进组,限定的是数据。having在分组后限定,当组满足条件才能被查询,限定的是一个组。
    // 2.where后不可以跟聚合函数,having后可以跟聚合函数。
    

    分页查询:limit 起点数据的索引index,每页查询的条数
    公式:起点数据的索引index =(当前页码-1)* 每页条数

    // 第一页 
    select * from student limit 0,5;
    // 第二页
    select * from student limit 5,5;
    // 第三页
    select * from student limit 10,5;
    

    多表关系

    一对多:一个旅游线路分类中有多个旅游线路。
    1.旅游线路分类表(1)
    2.旅游线路表(n)

    多对多:多个用户可以收藏多个旅游线路。
    1.旅游线路表
    2.用户表

    // cid 旅游线路分类主键,自动增长
    // cname 旅游线路分类名称,非空,唯一
    create table tab_category(
      cid int  primary key auto_increment,
      cname varchar(100) not null unique 
    )
    
    // rid 旅游线路主键,自动增长
    // rname 旅游线路名称,非空,唯一
    // cid 外键,关联 tab_category表的主键 cid。
    create table tab_route(
      rid int primary key auto_increment,
      rname varchar(100) not null unique,
      price double,
      rdate date,
      cid int,
      foreign key (cid) references tab_category(cid)
    )
    
    // uid 用户主键,自动增长
    // uname 用户名,非空,唯一
    create table tab_user(
      uid int primary key auto_increment,
      uname varchar(20) not null unique,
      sex char(1) default '男'
    )
    
    // primary key(rid,uid) 联合主键
    // rid 外键,关联 tab_route(rid)
    // uid 外键,关联tab_user(uid)
    create table tab_favorite(
      rid int,
      uid int,
      primary key(rid,uid),
      foreign key (rid) references tab_route(rid),
      foreign key (uid) references tab_user(uid)数据库
    )
    

    数据库的备份与还原

    语法:

    • 备份:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
    • 还原:登录数据库 -- 创建数据库 -- 使用数据库 -- 执行文件:source 文件路径

    子查询:子查询可作为条件使用运算

    子查询结果为单行单列:运算符( > < = <= >= )

    // 查询  tab_01.num 小于 table_02.num 平均值的数据
    select * from tab_01 where tab_01.num < (select AVG(num) from table_02);
    

    子查询结果为多行单列:运算符( in )

    // 先查询 tab_c 中研发部和技术部的数据,拿到n条数据后,使用 in() 查询 tab 表中的数据
    select * from tab where tab.cid in(select id from tab_c where tab_c.name in("研发部","技术部"));
    

    子查询结果为多行多列:把子查询结果当做虚拟表使用

    // 子查询格式
    select 
      * 
    from 
      tab1 as t1,
      (select * from tab2 where tab2.age > 1) as t2  
    where 
      t1.id = t2.cid;
    
    // 可以转化为普通内连接
    select 
      *
    from
      tab1, tab2
    where
      tab1.id = tab2.cid
      and tab2.age > 1;
    

    事务

    1.概念:如果一个包含多个步骤的操作被事务管理,那么这些操作要么同时成功,要么同时失败。
    2.操作:开启事务:start transaction 回滚:rollback 提交:commit
    3.四大特征:

    • 原子性:最小操作单位,要么成功,要么失败。
    • 持久性:提交或回滚后,会持久保存数据。
    • 隔离性:多个事务间,相互独立。
    • 一致性:事务操作前后,数据总量不变。

    DCL数据库用户管理

    用户的基本操作

    // 创建用户:格式 create user ‘用户名’@‘主机名’ identified by ‘密码’;
    create user 'zhangsan'@'%' identified by '123456';
    
    // 删除用户:格式 drop user ‘用户名’@‘主机名’
    drop user 'zhangsan'@'%';
    
    // 修改密码:
      // 1.已经登录到数据库:
        // 格式1 update user set password = password('新密码') where user = '用户名';
        update user set password = password('abc') where user = 'zhangsan';
        // 格式2:set password for '用户名'@'主机名' = password('新密码') 
        set password for 'zhangsan'@'%' = password('123')
      // 2.忘记root密码
        // (1)管理员运行cmd : net stop mysql  (停止mysql服务)
        // (2)使用无验证方式启动mysql :mysql --skip-grant-tables  (cmd会卡住)
        // (3)打开新的cmd窗口:mysql  (直接回车就能登录)
        // (4)新cmd窗口:use mysql;
        // (5)新cmd窗口:update user set password=password('123456') where user= 'root';
        // (6)修改密码成功后,关闭两个cmd窗口。
        // (7)打开任务管理器,关闭进程:mysqld.exe。
        // (8)cmd:net start mysql ,启动mysql服务后,就可以正常登录了
    

    用户的权限管理:

    // 查看用户权限:show grants for '用户名'@'主机名';
    show grants for 'zhangsan'@'%';
    
    // 授权:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
    grant select,update,insert on test.user to 'zhangsan'@'%';
    grant all on *.* to 'zhangsan'@'%';
    
    // 撤销权限:revoke 权限列表 on 数据库名.表名 to '用户名'@'主机名';
    revoke delete,drop on test.user to 'zhangsan'@'%';
    

    相关文章

      网友评论

          本文标题:mysql常用语法

          本文链接:https://www.haomeiwen.com/subject/euycmhtx.html