zoukankan      html  css  js  c++  java
  • MySQl语句总结

    MySQL DDL语句

    DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象的定义,常用的关键字只要包括create,drop,alter等

    1.创建数据库

    1.连接数据库

    语法:mysql -uroot -p

    1. mysql ——代表客户端命令
    2. u——后面连接的数据库用户
    3. -p——表示需要输入密码

    2.创建数据库

    语法:create database test1;

    3.删除数据库

    语法:drop database test1;

    4.创建数据库表

    在数据库中创建一张表的基本语法如下:

    create table tablename(
    column_name_1 column_type_1 constraints,
    column_name_2 column_type_2 constraints,
    ...
    column_name_n column_type_n constraints)
    

    column_name:列的名称

    column_type:列的数据类型

    contraints:列的约束条件

    5.查看创建的表

    show create table emp;

    desc emp;

    6.删除表

    drop table emp;

    7.修改表

    1.修改表类型,语法:

    alter table emp modify[column] column_definition[first|after col_name]
    

    例:修改表emp的ename字段定义,将varchar(10)改为varchar(20):

    alter table emp modify ename varchar(20);
    

    2.增加表字段,语法:

    ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
    

    例:表emp上新增加字段age,类型为int(3)

    alter table emp add column age int(3);
    

    3.删除表字段,语法:

    ALTER TABLE tablename DROP [COLUMN] col_name
    

    例:将字段age删除掉:

    alter table emp drop column age
    

    4.字段改名,语法:

    ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTERcol_name]
    

    例:将age改名为age1,同时修改字段类型为int(4)

    alter table emp change age age1 int(4);
    

    注意:change 和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便,但是change的优点是可以修改列的名称,modify则不能

    MySQL约束

    一,什么是约束

    约束实际上就是表中数据的限制条件

    二,约束作用

    表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效

    三,约束种类

    • 非空约束(not null)
    • 唯一性约束(unique)
    • 主键约束(primary key)
    • 外键约束(foreign key)
    • 检查约束

    四,非空约束

    用not null约束的字段不能为null值,必须给定具体的数据

    创建表,给字段添加非空约束(创建用户表,用户名不能为空)

    mysql> create table t_user(
     -> id int(10),
     -> name varchar(32) not null
     -> );
     Query OK, 0 rows affected (0.08 sec)
    

    五,唯一性约束

    unique约束的字段,具有唯一性,不可重复,但可以为null创建表,保证邮箱地址唯一(列级约束)

    mysql> create table t_user(
     -> id int(10),
     -> name varchar(32) not null,
     -> email varchar(128) unique
     -> );
    Query OK, 0 rows affected (0.03 sec)
    

    1.表级约束

    mysql> create table t_user(
     -> id int(10),
     -> name varchar(32) not null,
     -> email varchar(128),
     -> unique(email)
     -> );
    

    2.使用表级约束,给多个字段联合约束

    联合约束,表示两个或以上的字段同时与另一条记录相等,则报错

    mysql> create table t_user(
     -> id int(10),
     -> name varchar(32) not null,
     -> email varchar(128),
     -> unique(name,email)
     -> );
    Query OK, 0 rows affected (0.01 sec)
    

    插入第一条数据

    mysql> insert into t_user(id,name,email) values(1,'xxx','qq.com');
    Query OK, 1 row affected (0.05 sec)
    

    插入第二条数据如果是与联合字段中的一条相同另一条相同,也是可以的

    mysql> insert into t_user(id,name,email) values(2,'mmm','qq.com');
    Query OK, 1 row affected (0.05 sec)
    

    插入第三条数据,如果与联合字段都相同,则报错

    mysql> insert into t_user(id,name,email) values(3,'mmm','qq.com');
    ERROR 1062 (23000): Duplicate entry 'mmm-qq.com' for key 'name'
    

    3.表级约束可以给约束起名字(方便以后通过这个名字来删除这个约束)

    mysql> create table t_user(
     -> id int(10),
     -> name varchar(32) not null,
     -> email varchar(128),
     -> constraint t_user_email_unique unique(email)
     -> );
    Query OK, 0 rows affected (0.06 sec)
    

    constraint是约束关键字,t_user_email_unique自己取的名字
    例:用户名既不能为空,也不能重复

    name varchar(32) not null unique
    

    MySQL DML语句

    插入操作insert

    单行插入

    方式1

    insert into 表名[(字段,字段)] values (,);
    

    示例:

    -- 向test1表中插入数据
    insert into test1 (cuid,cid,num) VALUES (1,1,2);
    

    说明:
    值和字段需要一一对应
    如果是字符型或日期类型,值需要用单引号引起来;如果是数值类型,不需要用单引号
    字段和值的个数必须一致,位置对应
    字段如果不能为空,则必须插入值
    可以为空的字段可以不用插入值,但需要注意:字段和值都不写;或字段写上,值用null代替
    表名后面的字段可以省略不写,此时表示所有字段,顺序和表中字段顺序一致。

    方式2

    insert into 表名 set 字段 =,字段 =;
    

    批量插入

    方式1

    insert into 表名 [(字段,字段)] values (,),(,),(,);
    

    示例:

    insert into 成绩表 (cid,cname,tid) VALUES
    (1,'数学',1),
    (2,'语文',1),
    (3,'地理',1);
    

    数据修改update

    单表更新

    语法:

    update 表名 set 字段 =[where条件];
    

    示例:

    -- 将test1表中id为1的地址修改为北京
    UPDATE test1 SET address='北京' WHERE id=1;
    -- 将学生表中的年龄加1
    UPDATE student set sage=sage+1;
    

    多表更新

    语法:

    update1 ,2 set 字段=,字段=[where 条件]
    

    删除数据delete

    delete单表删除

    delete  from 表名 [where条件]
    

    示例:

    -- 删除test1表所有记录
    delete from test1;
    -- 删除test1表中id为4的记录
    DELETE from tb1_commodity where id=4;
    

    delete多表删除

    语法:

    delete from1,2 [where 条件]
    

    查询语句select

    1.基本语法:

    select 查询的列 from 表名
    

    2.查询指定字段

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

    3.查询所有列

    select * from 表名
    

    4.列别名

    select[as] 别名 from 表名
    

    解读:

    创建数据表时,一般使用英文单词来设置字段名这样会给用户查看数据带来不便,这种情况可以使用别名代替英文列名,增强可读性。

    select条件查询

    语法:

    select 列名 from 表名 where 列 运算符 值
    
    操作符 描述
    = 等于
    <>或者!= 不等于
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于

    逻辑查询运算符

    逻辑运算符 描述
    AND 多个条件都成立
    OR 多个条件中满足一个

    AND并且

    select 列名 from 表名 where 条件1 and 条件2
    

    OR或者

    select 列名 from 表名 where 条件1 or 条件2
    

    like模糊查询

    语法:

    select 列名 from 表名 where like pattern
    

    pattern 中可以包含通配符,有以下通配符

    % 表示匹配任意一个或多个字符

    _ 表示匹配任意一个字符

    示例:

    -- 查询名字中带有‘学’的学生,‘学’的位置不固定,可以这么查询
    select * from stu  where name like '%学%'
    -- 查询姓‘张’,名字2个字的学生
    select * from thu where name like '张_'
    

    between and (区间查询)

    操作符between and 会选取介于两个值之间的数据范围,这些值可以是数值,文本或日期,属于一个闭区间查询

    select 列名 from where 列名 between 值1 and 值2
    

    in查询

    select 列名 from 表名 where 字段 in (值1,2,值3

    not in查询

    select 列名 from 表名 where 字段 not in(值1,值2,值3

    例:查询年龄不在10,20,30,之间的

    select * from test1 where age not in(10,20,30)
    

    聚合函数

    语法:

    select 字符串 函数([参数列表]
    聚合函数 说明
    sum() 求所有行中单列结果的总和
    avg() 平均值
    max() 最大值
    min() 最小值
    count() 求总行数

    例:

    1.求单列所有数据的和

    select sum(salary) from test1;
    

    2.求多少个员工

    select count(employee_id) from test1;
    

    表连接查询

    多表连接查询语法:

    select 字段列表
    	from1 inner|left|right join2
     on1.字段=2.字段;
     
     select 字段列表 from1,2 where1.字段=2.字段
    

    内连接查询(inner join on)

    select 选课.学生号,姓名,成绩 from 选课,学生 where 选课.学生号=学生.学生号
    
    select 选课.学生号,姓名,成绩 from 选课 inner join 学生 on 选课.学生号=学生.学生号
    

    左外连接(left join on)

    查询出未选课的学生

    select 学生.学生号,学生.姓名,选课.成绩 from 学生 left join 选课 on 选课.学生号=学生.学生号
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WfPMh8WI-1598923075012)(MySQL总结.assets/image-20200831130821717.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eY46TNLT-1598923075017)(MySQL总结.assets/image-20200831130855021.png)]

    解读:以学生表为主表,向右匹配选课表的内容

    注意:左外连接是以左表为主表,依次向右匹配,匹配到,返回结果,匹配不到则返回null值填充

    右外连接(right join on)

    select 学生.学生号,学生.姓名,选课.成绩 from 选课 right join 学生 on 选课.学生号=学生.学生号
    

    注意:右外连接是以右表为主表,依次向左匹配,匹配到,返回结果,匹配不到则返回null值填充

    三表连接查询

    从techdb中查询出选修了课程名为操作系统课程的每个学生的姓名

    方式1

    select b.姓名,c.课程名 from 选课 a 
    inner join 学生 b on a.学生号=b.学生号 
    inner join 课程 c on a.课程号=c.课程号 where c.课程名='操作系统' or b.姓名
    

    方式2

    select 姓名,课程名 from 选课 a,学生 b,课程 c where a.学生号=b.学生号 and a.课程号=c.课程号 and c.课程名='操作系统'
    
  • 相关阅读:
    线性dp 打鼹鼠
    区间dp 能量项链 洛谷p1063
    洛谷 CF1012C Hills (动态规划)
    交作业了 动态规划 木棍加工
    最短路之Floyd
    最小生成树
    寒假集训并查集初级版
    【倍增DP】——保卫王国
    bootstrap四部分概述
    zrender初识
  • 原文地址:https://www.cnblogs.com/James-221/p/13647448.html
Copyright © 2011-2022 走看看