mysql

作者: 随风飞2019 | 来源:发表于2019-07-28 17:06 被阅读0次

数据库

  • 增:create database zyw;
  • 删:drop database zyw;
  • 改:rename database zyw to newzyw;修改数据库名zyw为新名字newzyw
  • 查:show databases;查看都有哪些数据库
  • 用:use zyw;表示切换到zyw数据库里,后续操作都在这个库里

数据表

  • 增:create table student(字段名称 数据类型,字段名称 数据类型),新增表必须确定都有哪些字段,每个字段的数据类型。
    如create table student(id int(4), name char(20), sex int(4));
  • 删:drop table student;
  • 改:rename table student to newstudent;修改表名
  • 查:show tables;查看这个库里所有表;
  • 查询表所有内容:select * from student;查询表中所有记录
  • 查表结构:desc student;查看表结构,含有哪些字段

表字段

  • 增加字段:alter table student add cout int; 用add关键字增加+字段+字段数据类型;
  • 删除字段:alter table student drop count;用drop删除关键字+字段,即可删除字段;
  • 修改字段类型:alter table student modify name char(11);modify 修改的是name字段的数据类型及位数
  • 修改字段名称:alter table student change sex nsex char(2); change 修改字段sex名称为nsex并设置数据类型和位数;
  • 查表结构:desc student;查看表结构,含有哪些字段

表字段约束

  • 唯一约束:unique,不能重复
    比如id,身份证号,手机号,邮箱等唯一身份标记
    创建表或增加字段时设置唯一的方法是一样的,在字段数据类型后面加unique
    如:alter table users add uid int(2) unique; 增加一个uid唯一字段
  • 非空约束,not null,不能为空
    如:create table stu(id int(2) unique,name char(11) not null); 创建表时候设置id唯一,name非空;
  • 同时限制唯一和非空,创建或修改时直接加约束,无须加逗号
    如:create table stu(id int(2) unique not null,name varchar(11));
    unique和not null顺序无所谓
  • 唯一和非空的组和约束,就形成了主键约束,也可以直接用主键约束代替组和
    如:create table stu(id int(2) primary key,name varchar(12));
  • 自动增长auto_increment
    create table stu(id int primary key auto_increment,name varchar(12));
    一般用主键配合自动增长使用,int不设置位数。即便删除最后一位再增加会自动跳过并增加。
  • 外键foreign key
    b表外键约束b表中某个字段必须参考a表的某个字段的记录
    b表外键必须是a表的主键
create table class(id int primary key auto_increment,name varchar(12));   先创建一个班级表
desc class;   主键是id自增长
insert into class values(null,"一班");    insert into class values(null,"二班");  插入数据
create table stu(id int primary key auto_increment,name varchar(12),classnum int,foreign key(classnum) references class(id));
创建一个学生表,包含id,姓名,和班级号,外键班级号参考class表的id
insert into stu values(null,"jone",2);新增学生
本表最后一个字段时外键,如果是3,而班级表中没有id为3的记录,就插入不成功;
创建外键的语法
create table 表名(字段 类型及约束,...,foreign key(字段名) references  另表名(字段名));

记录

  • 增:insert into student(id,uname,age) values(1,"zyw","32");注意顺序对应,字符串加引号;
    如果所有字段都插入,可以不写前面的字段,如insert into users values(2,"33","tom");
  • 删:delete from 表名 where 条件表达式,如delete from student where id=1;
    delete from student;清空表数据,后面不跟条件的话
  • 改:update 表名 set 字段名=新的字段值,... where 条件表达式,如
    update student set name="xinxin",sex="f" where id=1;
  • 查:seletc * from student;查询所有记录,后面还有复杂查询

查询

  • 查询所有字段
    select * from 表名

  • 简单查询
    select xxx from 表名; xxx可以是:字段列表,表达式,函数
    字段列表:select sal,ename from emp; 从emp表中查询sal和ename字段,字段中间用逗号分隔,结果二维表按查询字段顺序列出
    去掉重复的用distinct,如select distinct job from emp;
    表达式:seletc ename,sal*12 from emp;简单查询年薪,字段的算术运算
    函数:比较复杂

  • 条件查询where+条件表达式
    = > < >= <= <>不等于
    select * from emp where sal>600;
    select * from emp where sal<>800;查询不等于800的结果

  • and,多个条件都要满足
    select * from emp where sal>=800 and sal<1500;

  • between and,相当于大于等于a and 小于等于b
    select * from emp where sal between 800 and 1500;
    select * from emp where sal>=900 and sal<=1500;
    完全一样的结果,注意是大于等于

  • or,或者的关系
    select * from emp where sal=800 or sal>1300;
    select * from emp where sal=800 or sal=1600;
    如果是=,并且是or,可以用in语句
    in语句,表示只要符合条件中的任何一个都会被查询到
    select * from emp where sal in (800,1600);和上面查询结果一样
    not in语句,表示只要不是符合条件中的任何一个才会被查询到
    select * from emp where sal not in (800);

  • null
    筛选一个字段为空,用关键字is
    select * from emp where comm is null;
    筛选一个字段不为空,用关键字is not null;

  • 别名
    查询中可以给查询字段设置一个别名,让返回结果表头更容易看懂
    select ename as "姓名",sal*12 as "年薪" from emp;
    姓名是ename字段的别名,也可以不写as

  • 分组查询
    select avg(sal) from emp;这样查的结果是,表中所有人的平均工资
    如果我想按组划分,查询平均公司,就需要用分组查询group by
    select avg(sal) from emp group by deptno; 根据deptno字段分组查询平均工资
    加上组名显示效果更佳
    select avg(sal) as "平均",deptno as "组id" from emp group by deptno;
    平均avg(),最大max(),最小min(),总数count()
    select deptno as "组id" ,count() as "计数" from emp group by deptno;
    select deptno as "组id" ,count(
    ) as "计数" from emp group by deptno;
    不在分组函数中的字段,必须存在于group by后面,否则会出错

  • 子查询
    一个查询的结果可以作为另一个查询的数据源或条件
    把查询结果当做条件
    比如查询最高工资的人的姓名,就先查出最高工资,然后作为条件查人名
    select max(sal) from emp
    select ename,sal from emp where sal=(select max(sal) from emp);
    把查询结果当做数据源,接着查询
    比如查询平均工资最大的部门,首先查询平均工资,然后再查出最大的
    select avg(sal),deptno from emp group by deptno;

  • 多表查询
    select ename,dname from emp,dept where emp.deptno=dept.deptno;
    select ename,dname from emp join dept on emp.deptno=dept.deptno;
    两种写法,从两张表中根据相同的deptno查询ename和dname

相关文章

网友评论

      本文标题:mysql

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