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

    数据库基础知识

    创建和查看数据库
      create database 数据库名称;    #创建数据库
      show databases;              #查看数据库
       drop database 数据库名称;     #删除数据库                

    数据类型

    常用数据类型 intchar,varchar,等等

    创建数据表

    创建数据表
    
        use 数据库名称;                                        #选择创建表的数据库
        create table 表名(id int(11),name varchar(11));        #创建表和字段名称
        desc 表名;                                              #查看数据表
    alter table 旧表名 rename to 新表名; #修改表名
       alter table 表名 change 旧字段名 新字段名 新数据类型;   #修改字段名
       alter table 表名 modify 字段名 数据类型;        #修改字段名的数据类型
       alter table 表名 add 新字段名 数据类型;        #添加字段
       alter table 表名 drop 字段名;        #删除字段
       alter table
    表名 modify 字段名 数据类型 first;      #修改字段的排列位置(排在第一个位置)
       alter table 表名 modify 字段名1 数据类型 after 字段名2; #字段名1 放在字段名2 后面
       drop table 表名; #删除数据表

    表的约束(列举的约束条件都是针对表中字段进行限制,从而保证数据表中的正确性和唯一性)

      primary key    主键约束,用于唯一标识对应的记录

      foreign key    外键约束

      not null       非空约束

      unique      唯一性约束

      default      默认值约束

    主键约束
    create table table2(id int(11) primary key, #单字段主键
                name varchar(11) not null,
                grade float);

    create table table2(id int(11),
                name varchar(11),
                grade float,
                primary key(id,name)); #多字段主键
    非空约束
    create table table2(id int(11),
               name varchar(11) not null, #非空约束           
               grade float);
    唯一性约束
    create table table2(id int(11),
                stu_id int unique, #唯一性约束          
               grade float);

    默认约束
    create table table2(id int(11),
               name varchar(11),       
               grade float default 0, #默认约束
               stu_id int);
              

     索引(普通索引-唯一性索引-全文索引-单列索引-多列索引-空间索引) 

    1. unique 可选参数,表示唯一索引
    2. fulltext 可选参数,表示全文索引
    3. spatial 可选参数,表示空间索引
    4. index和key,用来表示字段的索引,二者选一即可
    5. 别名 可选参数 表示创建的索引的名称
    6. 字段名1 指定索引对应字段的名称
    7. 长度 可选参数 用于表示索引的长度
    8. ASC和DESC 可选参数 其中 ASC表示升序排列 DESC表示降序排列
    创建普通索引
    create table t1(id int,
              name varchar(11),
              score float,
              index(id)); #在id上建立索引

    show create table 表名 G; #查看表的结构
    explain select * from 表名 where id=1 G; #查看索引是否被使用,当possible_keys和key的值都为id,说明索引已经存在

    唯一性索引
    create table t2(id int not null,
              name varchar(20) not null,
              score float,
              unique index unique_id(id asc)); #在id的字段上建立索引名为unique_id的唯一性索引,并且按照升序排列

    全文索引
    create table t3(id int not null,
              name varchar(20) not null,
              score float,
              fulltext index fulltext_id(name) #在name字段上建立索引名为full_text的全文索引
              )engine=myisam; #目前只有myisam存储引擎之v胡全文索引

    单列索引
     create table t4(id int not null,
              name varchar(20) not null,
              score float,
              index single_name(name(20))) #建立一个名为signal_name的单列索引,并且索引的长度为20

    多列索引
    create table t5(id int not null,
              name varchar(20) not null,
              score float,
              index muli(id,name)); #在id和name上建立一个muli的多列索引


    使用create index 语句在已经存在的表上创建索引
    create index index_id on t1(id);          #创建普通索引
    create unique index unique_id on t1(id); #创建唯一性索引
    create index multidex on t1(id,name); #创建多列索引


    使用alter table 语句在已经存在的表上创建索引
      alter table t1 add index index_id(id);   #创建普通索引

      alter table t1 add unique uniqueidx(id); #创建唯一性索引

      alter table t1 add index multidx(id,name)#创建多列索引

     使用alter table 删除索引

      alter table 表名 drop index 索引名;

     使用drop index 删除索引

     drop index 索引名 on 表名;

    数据库的增 删 改 查

    #select * from 表名;  查看表中数据

    添加数据

    建表
    create table student(id int(4) primary key auto_increment, #id会自增
                name varchar(20) not null,
                grade float);

    insert into student(id,name,grade)values(1,'zhangsan',98.5);   

    insert into student(name,grade,id)values('zhangsan',98.5,2);   #注意:字段名和值对应

    insert into student(id,name)values(1,'zhangsan');   #为表的指定字段添加数据

    insert语句中不指定字段名

    insert into 表名 values(值1,值2,。。。)           #添加值的顺序必须按照表中定义的字段顺序

    insert into student values(1,'zhangsan',98.5);    

    insert语句的其他用法

    insert into 表名 set 字段名1=值1, [字段名2=值2,...]

    insert into student set id=5,name='boya',grade=99;   #添加一条记录

    insert into student values

              (6,'a',99),

              (7,'b',99),

              (8,'c',99);                         #同时添加多条记录,按表中定义的字段顺序

    insert into student(name,id,grade) values           #同时添加多条数据,对应字段名和值

              ('a',6,99),

              ('b',7,99),

              ('c',8,99); 

     更新数据

    update更新部分数据:
    update student set name='asd',grade=89 where id=5; #更新id=5的数据
    update stedent set grade=100 where id<10; #更新id<10的数据

    update更新全部数据
    update student set grade=100; #更新grade全部为100

     删除数据

    delete from 表名 [where 条件表达式]

    delete 删除部分数据
    delete from student where id=1; #删除id=1的数据
    delete from student where id>6; #删除id>6的数据

    delete 删除全部数据
    delete from student #删除全部数据

    使用关键字truncate删除表中数据 #使用delete删除数据会留下记录,体现在删除数据之后的id会继续增加不会从1开始,truncate不会留下记录,从0开始,所以效率更高

    truncate student; #删除全部数据

     查询数据

    简单查询

    在select语句中指定所有字段

    select 字段名1,字段名2,。。。from 表名

    select id name,grade,gender from student;

    在select语句中使用*通配符代替所有字段

    select * from 表名;

    查询指定字段

    select 字段名1,字段名2,。。。from 表名

    select id,name from student;

    按条件查询

    select id,name from t where id=4;   #查询t表中 id=4 的数据

    select id,name,grade from t where grade>60;   #查询表中 grade>60 的数据

    带in的关键字查询

    select id,name,grade,gender from t where id in(7,8,9);     #查询id,name,grade,gender等数据 在id为7,8,9

    select id,name,grade,gender from t where id not in(7,8,9);     #查询id,name,grade,gender等数据 除了id为7,8,9

    带between and 关键字的查询

    select id,name,grade,gender from t where id between 5 and 9;   #查询id,name,grade,gender等数据 在id为5-9之间

    select id,name,grade,gender from t where id not between 5 and 9;   #查询id,name,grade,gender等数据 除了id为5-9之间

    空值查询

    select id,name,grade,gender from t where grade is null;       #查询id,name,grade,gender等数据 在grade为null值

    带distinct 关键字的查询   

    select distinct 字段名 from 表名;  

    select distinct gender from t;         #过滤掉重复的gender值

    distinct 关键字作用于多个字段

    select distinct gender,name from t;   #过滤掉gender和name联合起来重复的值

    带like关键字的查询

    %通配符

    select id,name from t where name like"a%";    #查询字段中以字符a开头的 id和name的值

    select id,name from t where name like"d%h";    #查询字段中字符d开头,h结尾的 id和name的值

    select id,name from t where name like"%h%";    #查询字段中含有h的  id和name的值

    select id,name from t where name not like"%h%";    #查询字段中不含有h的  id和name的值

    _通配符(一个下划线只能匹配一个字符)

    select id,name from t where name like"__gs";       #查询字段中四个字节,后两位为gs的   id和name的值

    select id,name from t where name like"_ _gs";      #查询字段中带有一个空格 ,后两位为gs的  id和name的值

    匹配字符串总的%和_怎么办?

    例子

    %\%% 匹配字符串中带有%的

    %\_% 匹配字符串中带有_的

     带and关键字的条件查询

    select id,name,gender from t where id<9 and gender='女';  #匹配id<9 且 gender=女

    select id,name,gender from t where id in(1,2,3,4) and name like '%ng' and grade<80; #匹配id为1,2,3,4 且 name的最后两个字符是ng 且 grade<80

     带or的关键字的多条件查询

    select id,name,gender from t where id<9 or gender='女';  #匹配id<9 或 gender=女

    or 和 and 一起用的情况

    select id,name,gender from t where gender='女' or gender='男’ and grade=100;  #匹配gender=女 或者 gender=男的且grade=100

    高级查询

    count函数

    select count(*) from 表名;

    select count(*) from t;    #查询表中有多少条数据

    sum函数

    select sum(字段名) from 表名;

    select sum(grade) from t;    #计算grade字段的总和

    avg函数

    select avg(字段名) from 表名;

    select avg(grade) from t;  #计算grade字段的平均值

    max和min函数

    select max或者min(字段名) from 表名;

    select max或者min(grade) from t;  #查询grade字段最大值或者最小值

    对查询结果排序

    select * from t order by grade;        #对t表中的grade进行排序,默认升序排列  

    select * from t order by grade asc;    #对t表中的grade进行排序,升序排列     从小到大

    select * from t order by grade desc;   #对t表中的grade进行排序,降序排列     从大到小

    分组查询

    单独使用group by

    select * from t group by gender;   #查询对gender字段中不同的值进行分类,然后显示每个类的其中一组数据

    group by 和 聚合函数一起使用

    select count(*),gender from t group by gender;     #对分类过后的数据统计并返回gender的几种情况

    group by 和 having 关键字一起使用   #having 和 where关键的作用相同,区别在于 having关键字之后可以跟聚合函数,where关键字不能

    select sum(grade),gender from t group by gender having sum(grade)<300;  #对于分组后的结果进行过滤   查询gender分组过后grade字段值之和小于300的

    使用limit限制查询结果

    select * from t limit 4;      #查询前四条记录

    select * from t order by grade desc limit 4,4;  #最后跟了两个参数,第一个表示偏移量为4,即从第五条记录开始查询,第二表示返回几条记录  desc 表示 grade字段从高到低排列

    函数

    select concat(id,'_',name,'_',grade,'_',gender)from t;        #查询t表中的记录,将个字段的值用下划线连接起来

    select id,if (gender='男',1,0) from t;                        #查询t表中id和gender的字段值,如果gender的字段值是男,返回1,否则返回0

    为表和字段取别名

    select * from 表名 [as] 别名;

    select * from t as s where s.gender='女';   #为t表取别名为s   s.gender表示t表中gender的字段值

    为字段取别名

    select 字段名 [as] 别名[,字段名 [as] 别名,... ] from 表名;

    select name as n,gender g from t;       #将name字段和gender字段取别名分别为n和g    查询结果也会显示n和g

    多表操作

    外键

    创建两种数据表
    create table grade(id int(4) not null primary key,
                name varchar(36));

    create table student(sid int(4) not null primary key,
                sname varchar(36),
                gid int(4) not null);

    为表添加外键约束

    alter table student add constraint fk_id foreign key(gid) references grade(id);   #为student表添加外键约束  grade的id为主键 student的gid为外键

    删除外键约束

    alter table 表名 frop foreign key 外键名;

    alter table student drop foreign key fk_id;    #删除student表中的外键约束

    操作关联表

    添加数据

    insert into grade(id,name)values(1,'软件一班');

    insert into grade(id,name)values(2,'软件二班');

    insert into student(sid,sname,gid)values(1,'王红',1);

    insert into student(sid,sname,gid)values(2,'李强',1);

    insert into student(sid,sname,gid)values(3,'赵四',2);

    insert into student(sid,sname,gid)values(4,'李五',2);

    select sname from student where gid=1;         #查询gid为1的学生姓名   student和grade表之间有联系   gid的1表示的是软件一班

    删除数据  注意:一定要先删除从表中的数据,然后删除主表中的数据 不然会报错

    连接查询

    交叉连接   select * from 表1 cross join 表2;   #表一和表二分别有4条数据  交叉查询后有16条数据 4*4=16

    内连接   select 查询字段 from 表1 [inner] join 表2 on 表1.关系字段=表2.关系字段;  #关系字段相等的才会显示

    外连接(左连接,右连接)

    复合条件连接查询:

    子查询:

    带in关键字的查询:

    带exists关键字的查询:

    带any关键字的子查询:

    带all关键字的子查询:

    带比较运算符的子查询:

    事物存储与过程

    事物管理

    存储过程的创建

    存储过程的使用

    视图

    视图概述

    视图管理

    数据库的高级操作

    数据备份与还原

    用户管理

    权限管理

  • 相关阅读:
    微信小程序开发(十)获取手机的经纬度
    微信小程序开发(九)获取手机连接的wifi信息
    微信小程序开发(八)获取手机ip地址
    微信小程序开发(七)获取手机网络类型
    微信小程序开发(六)获取手机信息
    关于JPype报FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'错误的解决
    微信小程序开发(五)数据绑定
    微信小程序开发(四)页面跳转
    微信小程序开发(三)点击事件
    微信小程序开发(二)创建一个小程序页面
  • 原文地址:https://www.cnblogs.com/yzcstart/p/10623676.html
Copyright © 2011-2022 走看看