zoukankan      html  css  js  c++  java
  • 数据库基本操作

    一、库操作

    1.1 创建库

    CREATE DATABASE db_name charset utf8;

    1.2 查看数据库

    show databases;  -- 查看当前用户下所有数据库
    show create database db_name;  -- 查看数据库的创建信息
    select database();  -- 查询当前数据库的名字

    1.3 使用数据库

    use db_name;

    1.4 删除数据库

    drop database db_name;

    二、用户权限

    2.1 用户管理

    create user '用户名'@'IP地址' identified by '密码';  -- 创建用户
    drop user '用户名'@'IP地址';  -- 删除用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';  -- 修改用户

    2.2 授权管理

    show grants for '用户'@'IP地址'                  -- 查看权限
    grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
    revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限

    三、表操作

    3.1 创建表

    create table student(
        id int not null auto_increment primary key,
        name varchar(250) not null,
        age int not null,
        sex enum('','') not null default '',
        salary double(10,2) not null
    )engine=innodb default charset=utf8;
    
    ps: not null :表示此列不能为空
         auto_increment :表示自增长,默认每次增长+1
    注意:自增长只能添加在主键或者唯一索引字段上
      
    primary key :表示主键(唯一且不为空)
    engine =innodb :表示指定当前表的存储引擎
    default charset utf8 :设置表的默认编码集

    3.2 查看表数据

    select 字段1,字段2,字段3 from 表名;  -- 查询表数据
    desc 表名;  -- 查看表结构
    show create table 表名;  -- 查看表创建信息

    3.3 修改表结构

    alter table 表名 add 字段名 类型 约束 after 字段1;  -- 在字段1的后面添加表字段
    alter table 表名 modify 字段 类型 约束;  -- modify只改变字段属性
    alter table 表名 change 旧字段 新字段 类型 约束;  -- change可以改变字段名和属性
    alter table 表名 drop 字段名; -- 删除表字段
    rename table 旧表名 to 新表名; -- 更新表名
    alter table 表名 add primary key(字段);  -- 添加主键
    alter table 表名 drop primary key;  -- 移除主键
    alter table 表名 modify id int not null ,drop primary key;  -- 自增主键需要先去掉自增才能移除主键
    alter table 从表 add constraint fk_test foreign key 从表(字段) referenes 主表(字段);  -- 添加外键
    alter table 表名 drop foreign key 外键名;  -- 移除外键
    注意,外键只能先删除再修改
    alter table 表名 alter 字段 set default 值;  -- 修改默认值
    alter table 表名 alter 字段 drop default;  -- 删除默认值

    3.4 删除表

    drop table 表名;  -- 删除表
    truncate table 表名;  -- 清空表

    3.5 复制表

    #只复制表结构和表中数据
    CREATE TABLE tb2 SELECT * FROM tb1;
    ps:主键自增/索引/触发器/外键 不会 被复制
       
    #只复制表结构
    create table tb2 like tb1;
    ps: 数据/触发器/外键 不会被复制

    四、数据操作

    4.1 插入数据

    insert into 表名(字段1,字段2,字段3 ...) values (值1,值2 ...);  -- 按字段插入
    insert into 表名 values (值1,值2 ...);  -- 按字段顺序插入
    insert into 表名 values (值1,值2 ...), (值1,值2 ...), (值1,值2 ...);  -- 插入多条数据
    insert into 表名(字段1,字段2,字段3 ...) select 字段1,字段2,字段3 ... from 表名; -- 插入查询结果

     4.2 更新操作

    update 表 set 字段1 = 值1, 字段2 = 值2, ... ;  -- 更新整表数据
    update 表 set name = 小明;  -- 表中说有的名字更新为小明
    pdate student set name= '小明' ,age =13  where id = 2;  -- 将id=2的名字改为小明,年龄改为13

    4.3 删除表

    delete from 表名;  -- 将表删除
    delete from student where id=1; -- 只删除id 为1的数据.
    truncate student; -- 清空表

     五、单表查询

    5.1 简单查询

    select * from person;  -- 查询person表所有字段
    select name,age from person; -- 查询表person的name和age字段
    select name as '名字',age '年龄' from person; -- as起别名,as可以不加
    select age+10 from person; -- 查询出年龄并加10岁
    select distinct age from person; -- 去重

    5.2 条件查询

    比较运算符
    select * from person where age = 23; select * from person where age <> 23; select * from person where age is null; select * from person where age is not null;
    逻辑运算符
    select * from person where age = 23 and salary =29000; select * from person where age = 23 or salary =29000;

    5.3 区间查询

    select * from person where salary between 4000 and 8000;  -- 包含4000和8000

    5.4 集合查询

    select * from person where age in(23,32,18);

    select from person where age not in(23,32,18);

    5.5 模糊查询

    select * from person where name like '张%';  -- 查询姓名以"张"字开头的
    select * from person where name like '%张';  -- 查询姓名以"张"字结尾的
    select * from person where name like '%张%';  -- 查询名字中含有"张"字的
     
    #查询 name 名称 是四个字符的人
    select * from person where name like '____';
    #查询 name 名称 的第二个字符是 'l'的人
    select * from person where name like '_l%';
     
    #排除名字带 a的学生
    select * from student where name not like 'a%'

    5.6 排序查询

    #按人员工资正序排列,注意:此处可以省略 ASC关键字 是升序  DESC是降序
    select * from person order by salary ASC;
    select * from person order by salary;
     
    #工资大于5000的人,按工资倒序排列
    select * from person where salary >5000 order by salary DESC;
     
    #按中文排序
    select * from person order by name;
     
    #强制中文排序
    select * from person order by CONVERT(name USING gbk);
    ps:UTF8 默认校对集是 utf8_general_ci , 它不是按照中文来的。你需要强制让MySQL按中文来排序

    5.7 聚合函数

    select max(age),min(age),avg(age) from person;

    5.8 分组查询

    #分组查询格式:
    select 被分组的字段 from 表名 group by 分组字段 [having 条件字段]
    ps: 分组查询可以与 聚合函数 组合使用.
    
    #查询每个部门的平均薪资
    select avg(salary),did from person  GROUP BY did;
    
    #查询每个部门的平均薪资 并且看看这个部门的员工都有谁?
    select avg(salary),did,GROUP_CONCAT(name) from person GROUP BY did;
    #GROUP_CONCAT(expr):按照分组,将expr字符串按逗号分隔,组合起来
    
    #查询平均薪资大于10000的部门, 并且看看这个部门的员工都有谁?  
    select avg(salary),did,GROUP_CONCAT(name) from person GROUP BY did having avg(salary)>10000;

    5.9 分页查询

    #查询前5条数据
    select * from person limit 5;
     
    #查询第5条到第10条数据
    select * from person limit 5,5;
     
    #查询第10条到第15条数据
    select * from person limit 10,5;
     
    ps: limit (起始条数),(查询多少条数);

    5.10 正则表达式

    # ^  匹配 name 名称 以 "e" 开头的数据
    select * from person where name REGEXP '^e';
     
    # $  匹配 name 名称 以 "n" 结尾的数据
    select * from person where name REGEXP 'n$';
     
    # . 匹配 name 名称 第二位后包含"x"的人员 "."表示任意字符
    select * from person where name REGEXP '.x';
     
    # [abci] 匹配 name 名称中含有指定集合内容的人员
    select * from person where name REGEXP '[abci]';
     
    # [^alex] 匹配 不符合集合中条件的内容 , ^表示取反
    select * from person where name REGEXP '[^alex]';
    #注意1:^只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
    #注意2 : 简单理解 name  REGEXP '[^alex]' 等价于 name != 'alex'
     
    # 'a|x' 匹配 条件中的任意值
    select * from person where name REGEXP 'a|x';  
     
    #查询以w开头以i结尾的数据
    select * from person where name regexp '^w.*i$';
    #注意:^w 表示w开头, .*表示中间可以有任意多个字符, i$表示以 i结尾

    5.11 语句执行顺序

    select name, max(salary)
       
    from person  
       
    where name is not null  
       
    group by name  
       
    having max(salary) > 5000
       
    order by max(salary)
     
    limit 0,5

    六、多表查询

    6.1 多表联合查询

    #查询人员和部门所有信息
    select * from person,dept;
    select * from person,dept where person.did = dept.did;

    6.2 多表连接查询

    6.21 内连接查询

    #查询人员和部门所有信息
    select * from person inner join dept  on person.did =dept.did;

    6.22 左连接查询

    #查询人员和部门所有信息
    select * from person left join  dept  on  person.did =dept.did;

    6.23 右连接查询

    #查询人员和部门所有信息
    select * from person right join  dept  on  person.did =dept.did;

    6.24 全连接查询

    #查询人员和部门的所有数据
     
    SELECT * FROM person LEFT JOIN dept ON person.did = dept.did
    UNION
    SELECT * FROM person RIGHT JOIN dept ON person.did = dept.did;
    注意: UNION 和 UNION ALL 的区别:UNION 会去掉重复的数据,而 UNION ALL 则直接显示结果

    6.3 复杂条件多表查询

  • 相关阅读:
    函数的声明
    数组遍历的方法
    运算符
    变量命名规则
    js条件判断
    vuex使用
    高盛伦敦分部面试
    野村证券伦敦分部面试
    Linux Performance Monitoring Commands
    Linux server上too many open files问题
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9520847.html
Copyright © 2011-2022 走看看