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

    有点乱ctrt+F 查找

    数据库的操作(必须进入mysql)

    (执行:mysql  -u  root  -p)

     

    1.查看当前MySQL下的数据库

    例如:show  databases;

     

    2.创建数据库

    格式:create  database  数据库名称 ;

    例如:create database  test;

    (注:MySQL下默认使用的编码格式为gbk,如果想要数据库下的表单中的数据支持汉字,需要设置数据库的编码格式  charset=utf8)

    格式:create  database  数据库名称  charset=utf8;

    例如:create database  test   charset=utf8;

    (注:数据库及表单的名称遵循之前学过的命名规则:英文字母及数字的组合,不能以数字开头,不区分大小写)

    注:数据库的名称不能重复,在同一数据库下的表单的名称也不能重复

     

    3.删除数据库

    (注:当数据库被删除时,数据库中的表单也会被一起删除)

    格式:drop database   数据库名称;

    例如:drop  database  test;

     

    4.使用数据库

    格式:use 

    例如:use   test1;

    注:对数据表单的操作一定要进入到某一个数据库中

     

    6.查看当前数据库下的表单

    例如:show tables;

     

    数据表单的操作
    1、查看数据库下的表单
    格式:show tables;
    例子:show tables;

     

    2、创建表单
    2.1、创建一个全新的表单
    格式:create table 表单名(列名 列的类型 列的约束);
    例子: create table students(id int auto_increment primary key, name varchar(50) not null,
    age int unique not null, address varchar(60));

     

    2.2根据已经存在的表单创建一个表单(创建一个框子)

    create  table  new stu like   students; 

     

    2.3根据已经存在的表单创建一个表单(将查找到的内容复制到新的表单中但旧的表单格式不会被复制(格式没有完全复制)。)

    create  table   新的表单名  as   已经存在的表单的

    create table   newstu1 as   select * from   students;

     

    SQL中的类型:
    int: 整型
    bigint:长整型
    float:浮点型
    char:字符串类型
    varchar:可变的字符串类型
    char(16):系统会自动分配16个字符的长度,不管后期存储几个字符,都会分配16个字符。
    varchar(16):会根据后期使用的字符长度计算分配几个字符。
    从性能上来说,char更好;从实际存储数据上来说,varchar更好。
    blob:二进制类型(png、音频、视频等转为二进制存入数据库)
    text:大文本类型

     

    SQL中的约束:
    作用:对插入的数据进行不同类型的限制。
    注:约束最好在创建表单时直接声明(但后期也是可以再次添加或修改或删除的)
    auto_increment :自增长约束 特点:不能为空,值不会重复,int类型,从1开始
    primary key :主键约束 特点:不能为空,不能重复
    not null :非空约束 特点:值不能为空
    unique : 唯一约束 特点:除null值外,其他值不能重复
    foreign key : 外键约束 

     

    3、删除表单
    格式:drop table 表单名称;
    例子:drop table students;

     

    4、查看表单结构
    格式:desc 表单名称;
    例子:desc students;

     

    5、查看创建表单时的语句
    格式:show create table 表单名称;
    例子:show create table students;

     

    6、修改表单

    6.1重命名表单  

    格式  :rename  table   原表单名称  to 新的表单名称;

    rename  table newstu1  to stu1;

    6.2  修改表单的字段

    格式:alter  table 表单名称   add/drop/change/modify  列名 类型   约束

    6.3  新增一个字段

    格式:alter table 表单名称   add 列名  类型   约束

    alter  table  students  add  phone  int(11)   unique;

    6.4删除一个字段

    alter  table  students  drop phone ;

     

    6.5  更改一个字段  改字段名

    格式  :alter  table  表单名称 change 旧列名   新列名   类型 约束

    格式:alter  table  students  change phone  sex  int(11)   default  1;

     

    6.6  更新字段类型

    格式  :alter  table  表单名称 modify   旧列名   新类型  新约束

    alter  table students  modify   sex   varchar(4);


    七、数据的操作
    1、增
    1.1、全列插入数据
    格式:insert into 表单名称 values(列对用的值);
    例子:insert into students values(0, 'A', 10, '北京');
    注:id为自增长的键,有auto_increment约束,在全列插入数据时,需要给该位置的数据做一个占位,
    我们一般使用0做占位,防止其他列的数据放在该位置,但存入到数据表单中的数据会自动增长,
    不用我们刻意管理(默认从1开始自增)。
    注:当为全列插入数据时,值的顺序要与键(列)的顺序一致(如果不一致,可能数据会生错乱)。
    注:当键为唯一约束(unique)时,值不能重复,如果重复,插入失败。
    注:当为自增长约束时,如果增加数据,值会自动加1,如果插入失败,值也会增加,后期再
    增加的数据不会使用已经被使用过的值。

     

    1.2、缺省插入
    格式:insert into 表单名称(列名1, 列名2 ...) values(值1, 值2 ....);
    例子1:insert into students(name, age, address) values('D', 13, '河南');
    结论:可以插入成功,原因:id为自增长的键,我们可以不用船只,系统会自动填充该位置的值。
    例子2:insert into students(name, age) values('E', 14);
    结论:可以插入成功,原因:address的值可以为空,如果我们不传值,系统使用默认值null。
    例子3:insert into students(age, name) values(15, 'F');
    结论:可以插入成功,原因:表单在创建时我们默认规定了间的名称,但不会规定顺序。
    只要键的名称正确,值根据约束传入,就可以。
    例子4:insert into students(name) values('G');
    结论:插入失败,因为age的约束为 not null 非空,在插入数据时,必须传入值。
    例子5:insert into students(age, name) values(15, 'H');
    结论:插入失败,因为age的约束为 unique 唯一约束,在插入数据时,必须传入不同的值。

     

    1.3、一次性插入多条数据
    1.3.1、全列插入
    格式:insert into 表单名称 values(值1, 值2 ....),(值1, 值2 ....),(值1, 值2 ....)...;
    例子:insert into students values(0, 'I', 16, '河北'),(0, 'J', 17, '山西'),
    (0, 'K', 18, '山东');
    1.3.2、缺省插入
    格式:insert into 表单名称(列名1,列名2) values(值1, 值2 ....),(值1, 值2 ....),(值1, 值2 ....)...;
    例子:insert into students(name, age, address) values('L', 19, '陕西'),('M', 20, '陕北'),
    ('N', 21, '河南');

    create table students(id int auto_increment primary key, name varchar(50) not null
    default 'lily',age int unique not null, address varchar(60) default '北京');
    注:default 设置默认值

    2、删
    格式:delete from 表单名称 where 条件;
    例子:delete from students where id=13;
    结论:会根据where后面的条件删除一条或多条数据。

    注:如果不写where,会将整个表单中的数据全部删除。 慎用!!!!!!
    例子:delete from students;

    3、改
    格式:update 表单名称 set 字段名1=新值1,字段名2=新值2... where 条件;
    例子:update students set name='MMM' where id=15;
    一次更改一列数据
    update students set name='Lily', address='天津' where id=17;
    一次更改多列数据

    注:如果更新数据时,没有where条件,会将表单中的对应的列全部更新。慎用!!!!!!!
    例子:update students set name='lucy';


    4、查
    4.1、全列查找
    格式:select * from 表单名称;
    例子: select * from students;

    说明:如为  * 查找所有    如为   列名    查找当前这一列如果查找多个列,不同列名之间用逗号隔开。

    from  为关键字,后面为表单名称,代表数据来自该表单。

    列名可取别名  , 用 as或空格   连接。

    如果别名中有空格或特殊字符,使用''引号引起来。

     

    4.2 根据条件查询

    格式:select  * from  表单名  where  条件;

    说明:where为关键字,后面的为筛选条件

    如:select  * from  students  where  id>10;

     

    where  条件

    1.比价运算符

    =  等于

    > 大于

    <  小于

    >=  大于等于

    <=  小于等于

    <> 不等于

    !=  不等于

    2.逻辑运算符

    and  逻辑与  满足and左右两侧的两个条件

    select * from students  where name='ff' and  id=10; 

    or  逻辑或  满足or左右两侧任意条件

    select * from students  where name='ff' or id=10; 

    not  逻辑非   不满足not 的条件

    select * from students  where not name='ff' ;

    3.优先级

    3.1小括号的优先级是最高的,

    3.2  逻辑运算符的优先级   not>and>or

    建议:如果不确定符号的优先级,可以使用小括号将该符号的优先级提升,再去进行判断。

     

    4.非空判断

    4.1  is null  空值

    格式:where  字段  is  null

    select * from students where  address is null;

    4.2  is not null  非空值

    格式:   where 字段   is not null;

     select * from students where  address is not null;

    注:null 为空值   ,空字符串不是空值  ,is null 与is  not null 只能判断字段是否为null,不能判断是否为空字符串。

     

    5、范围查找

    5.1   in  集合   :查询在字段在集合中存在的数据

    格式 :  where  字段名   in    (集合)

    例子:select  * from  students  where  id in (1,3,4,6);

    5.2  between... and....     在一个连续的区间中查找

    格式:where  字段名  between   起始数    and    结束数;

    注:在mysql中,为闭合区间

    select  * from  students  where  id between  2 and   6;

     

    6 模糊查询  like

    6.1 %    匹配零个或多个字符

    select * from students where  address  like  '%河%';

    6.2  -   匹配一个字符

    select * from students where  address  like  '_南_';

    建议:下滑线的方式不适合匹配多个字符

     

    消除重复行  distinct

    select dictinct  name  from students;

     

    聚合函数

    create table stu(id int auto_increment primary key,name varchar(30) not null,age int(11) not null,sex int default 1);

    insert into stu  values(0,'a',12,0),(0,'b',13,1),(0,'c',14,1),(0,'d',15,0),(0,'e',16,1);

     

    1.count (字段)    统计个数

    2.max 字段)返回当前字段的最大值

    2.min字段)返回当前字段的最小值

    2.sum字段)返回当前字段的求和

    2.avg字段)返回当前字段的平均值

     

    分组查询  group  by

    以字段分组,将该字段相同的值放入一组

    格式:select  字段 from 表单 where 条件  group by 字段;

    提示:where 条件  可以省略

    注:根据分组查看数据时,返回的数据个数可能与原数据的个数不一致,原因为分组时将相同的数据放到一组中,我们只看到一个数据。

    2. gruop by 与having 联合使用

    having  后面接一个条件

    对分组后的数据进行条件查询

    排序  order by 

    格式:select * from  表单  order  by 字段    asc/desc,字段   asc/desc;

    说明:将数据根据字段1进行排序,如果字段1有多个相同的数据,会根据字段2进行排序。

    默认:升序的排序   asc

    desc:  降序排序

    按照年龄升序排序

    select * from stu  order by age  asc;

     

    where与having 的区别

    where:对整个表单进行筛选,先执行条件,再进行查询

    having: 对分组后的数据进行再次筛选。

     

    分页 limit

    格式:select */字段  from  表单  where 条件  limit  起始下标,数据调数;

    注:where  条件   可以省略

    注:limit  的起始下标,为0

    select * from  students limit  0,2;

    select * from  students limit  1,2;

     

    关联查询(多表查询)

    准备工作:创建表单并插入数据

    create table b1(id int(11),name  varchar(255));

    create table b2(num int(11),user varchar(255));

    insert  into b1 values(1,'a'),(2,'b'),(3,'c');

    insert  into  b2 values(1,'A'),(1,'B'),(1,'C'),(1,'D');

    1.左链接  left join

    格式:select 字段  from 表单1  left   join   表单2   on  表单1.字段=表单2.字段;

    select * from  b2 left  join  b1  on b1.id=b2.num;

    注:左链接以左边的表为主表

     

    2.右链接  right  join

    select * from  b2 right join  b1  on b1.id=b2.num;

     

    3.内连接  inner  join   以两表最少条数显示

    select * from  b2 inner join  b1  on b1.id=b2.num;

     

    表单的设计

    1.一对一   (一个表单)

    id---name---age

    2.一对多

    班级 ------学员

    3.多对多

    一个学科可以有多个学员,一个学员可以选多个学科

    表单的实现(使用外键实现)

    语法 : foreign key(字段名(将该字当做外键使用) )   references 要关联的表名(关联的字段)

    1、一对一

    2、一对多

    2.1、创建表单

    班级表:

      claid  班级编号

      claname 班级名称

    创建班级表

    create table  class(claid int(11)  primary key,name varchar(16) not null);

    添加数据

    insert  into class  values(1,'python1班'),(2,'web1班'),(3,'java1班');

    学员表:

      stuid   学员id

      stuname    姓名

      claid  班级id

    创建学院表

    create  table  students1(stuid int(11) auto_increment primary key,stuname varchar(16) not null,claid int(11) not null,foreign key(claid) references class(claid));

    添加数据

    insert into students1 values(0,'小明',1),(0,'小辉',3),(0,'小红',2),(0,'熊熊',1),(0,'饼干',3),(0,'官保',2),(0,'聪聪',1);

    注:添加外键关联数据时,添加关联表中字段没有的数据,会直接报错

    多对多

    创建表单

    课程表  cid  cname----course

    学员表   sid sname-----people

    关系表   cid   sid   ------ cp      cid----course(cid)    sid----people(sid)

     

    创建课程表

    create table course(cid int(11) auto_increment primary key,cname varchar(255) not null);

    创建学员表

    create table people(sid int(11) auto_increment primary key,sname varchar(255) not null);

    创建关系表

    create table cp(sid int(11) not null,cid int(11) not null,foreign key(sid) references  people(sid),foreign key(cid) references course(cid));

    添加数据

    insert  into course values(0,'语文'),(0,'生物'),(0,'数学'),(0,'英语');

    insert  into people values(0,'小明'),(0,'小红'),(0,'小吕'),(0,'小小');

    insert  into cp values(1,2),(2,3),(1,3),(4,3),(3,4),(3,3);

    查找学数学的人

    select people.sname,course.cname  from cp,course,people  where cp.cid=course.cid and people.sid=cp.sid and course.cname='数学';

    注:如果数据库引擎不是innodb,需要设置引擎类型,在语句后面添加engine=innodb;

    如:create table people(sid int(11) auto_increment primary key,sname varchar(255) not null)engine=innodb;

    删除数据

    delete  from  表名  where  条件;

    注:当涉及删除数据,如果需要删除主表中的数据的时候,需要先删除从表中的数据;

    子查询

    1 从表单中查询数据

    select * from 表单;

    2  从结果集中查询数据

      create  table newtable as  select * from  student;

    格式:select  */字段  from (select */字段 from 表单 where 条件 ) 

    八、SQL中的基本函数
    dual:虚拟表单
    1、字符函数
    1.1、字符转为大写 upper
    例子:select upper('abcdef') from dual;
    1.2、字符转为小写 lower
    例子:select lower('ABCDEFG') from dual;
    1.3、获取字符长度 length
    例子:select length('ABCDEFG') from dual;

     

    2、数学函数
    2.1、返回绝对值 abs(num)
    例子:select abs(-10) from dual;
    2.2、四舍五入 round(num, n) 保留n位小数
    例子:select round(2.5) from dual;
    例子:select round(2.123456, 2) from dual;
    2.3、返回开方 sqrt(num)
    例子:select sqrt(9) from dual;

  • 相关阅读:
    HTML5新特性之离线缓存技术
    摘要
    典藏百度前端面试题
    idea连接mysql数据库
    报错:[stack Error: Can't find Python executable "python"] vue项目npm install
    SVN客户端(小乌龟)checkout(检出)文件(项目)到本地
    java日期Date工具类 日期格式转换
    radio标签 onchange事件
    js 写带有返回值的function遇到的返回值不正常的情况
    读取zip包内根目录文件的文件名
  • 原文地址:https://www.cnblogs.com/dyd520/p/11411686.html
Copyright © 2011-2022 走看看