当前位置:   article > 正文

mysql命令详解

mysql命令详解
1、SQL命令
    1、create:创建
        1、数据库
            create database [if not exists] 数据库名 [character set 'utf8mb4']
            []代表可选内容,<>代表必填内容,#和--代表注释
            有用到保留字命名表或行可用 ` 表头` 来查询
    # SQL语法大小写不区分
    2、alter:修改
    [alter database 数据库名 [character set 'utf-8'] ]
    3、drop:删除
    [drop database [if exists] 数据库名 ]
2、建表
  1. create table 表名(
  2. 列名 数据类型 约束,
  3. 列名 数据类型 约束
  4. )[engine = engine_name | [default] character set charset_name];
    # engine是数据表的引擎;innodb,mysiam
    # charset_name:utf, GBK
    约束,可以保证表里面的数据符号的数据完整性要求
    1、 主键的定义
        [primary key,表示主键]
        如果要使用多个字段作为主键:在定义表的最后一行,使用:primary key(字段1,字段2,...)
    添加主键约束
    [alter table 表名 add primary key(字段名)]
    2、非空约束
        将一个字段定义为非空 not null。
        [字段名 类型 not null,]
        alter table student modify 字段名 varchar(20) not null, 
    3、默认值约束
        该字段没有给值,就会使用默认值
        [字段名 类型 default 默认值]
  1. create table student(
  2. id int primary key,
  3. name varchar(20) not null default 'tester' # 使用默认值
  4. )
        [alter table student modify 字段名 varchar(20) not null default 'tester';]
    4、自增长约束
        字段的值自动递增
        [字段名 类型 auto_increment]
        一张表中只能有一个自增长约束
        自增长字段的类型必须是整数,可以和primary key合用
        [alter table student modify 字段名 int auto_increment primary key;]
    5、唯一约束
        使字段的值保持唯一,于同列其他值区分
        [字段名 类型 unique]
    6、检查约束
        检查某一列的值,是否是自己规定的值,如果不是抛出异常
        [字段名 set(值1,值2,...)] 或
        [字段名 enum(值1,值2,...)]
  1. alter table student modify cardid unique
  2. alter table student modify sex set (男, 女)
    7、外键约束
        1、把从表和主表进行映射关联的一个纽带
        主表的主键发生变化的时候,这个变化要满足外键的限制才能执行成功    
        约束的行为:1、删除 2、修改
        约束的方式:
            1、禁止主表对主键进行删除或修改:restrict,no action(innodb)
            2、从表的外键跟随主表的主键同步变化:cascade
            3、把从表的外键设置为空:set null,这个外键不能有非空约束
        实现:
            # 1、建表的时候创建外键
            [foreign key (外键名) references 主表名(主键) [on update |delete cascade|restrict|set null|no action]]
            # 2、数据表建好补充外键
            [alter table 从表 add constraint 外键名称 foreign key(外键名) references 主表名(主键) [on update |delete cascade|restrict|set null|no action]]
            如果不写 
3、SQL:查询语言
    1、insert新增
        [insert into 表名([字段列表]) values(<值列表>)]每次插入一行记录
        [insert into 表名([字段列表]) values(<值列表>,<值列表>,<值列表>)...]一次插入多行记录
insert into student (sname,sex,sage,cardid) values('张三','男',18,'54545555');
    2、update修改
        [update 表名 set 字段名=值 字段名=值...(where字句)]
        如果where字句不加,就会更新整个表的数据,一定要加,避免数据破坏
    3、delete删除
        [delete from 表明 (where字句)]
        注意:删除是以行为单位,如果不加where子句限制,整个表删除
            delete一旦执行提交,则无法恢复数据
    4、where子句
        用来筛选数据
        [where 条件表达式 and|or 条件表达式...]
4、数据控制语言
    1、给指定用户赋权
    [grant 权限名1,权限名2,... on 数据库名.对象名 to '用户名' @'允许其登陆的地址' identified by '密码';] 
    权限列表:select,insert
            all所有权限 *.*:所有的库及所有的对象
    grant all privilege on *.* to 'root'@'%' identified by '123456' with grant option;
    将所有权限给root用户,在任何地址可以登录服务器,使用密码为123456
    flush privileges;刷新权限
5、三范式
    1、范式
数据库查询语言
单表查询:
    select <字段列表> from <数据源> [where 字句] [group by 字段名] [having 条件表达式] [order by 字段名 ASC|DESC] [limit x,y]
    2、模糊查询
    [字段名 like 表达式]
    表达式:''%key_' %:通配符,代表任意个字符  _:代表任一字符
    3、排序
    [order by 字段名1 asc(升序)|desc(降序), 字段名 asc|desc...]
    多字段排序先按前面的字段进行排序,如果有相同的数据再按照后面字段进行排序
    4、别名
    [select 字段名 as 别名,字段名 别名 from 表名 as 别名 | 表名 别名;]
    5、范围查询
    [select * from table where 字段名 >= 值 and 字段名 <= 最大值]
    6、集合操作
    [select * from table where 字段名 in|not in (值列表)]
    7、分页查询
    [select * from table limit x,y;]
    8、去重
    对重复行进行去除,只保留一行记录
    [select distinct * from table]  对记录去重
    [select count(distinct 字段名) from table] 对某个字段去重再计算
6、聚合查询
    1、聚合函数
    count():统计记录数
    sum():对指定的字段进行求和
    max():求最大值
    min():求最小值
    avg():求平均值
    2、使用聚合函数统计结果
    select round(avg(score),0) 平均分 from score;
    如果字段的值是NULL,统计的时候往往会忽略,为了使不统计疏漏,需使用ifnull函数
    ifnull(字段的值,i):如果字段的值为NULL,则使用i来代替,              这个函数再count和avg中最有用
    3、分组查询
    [select 聚合函数 from table group by 字段名;]
    统计平均分超过75分的学生学号和平均分
    select sid,round(avg(score),0) avgscore from  score group by sid having avgscore > 75
7、多表查询
    1、内连接:两张表通过主外键关系——对应进行连接,也成为全连接
    [select * from table1 inner join table2 on table1.pk=table2.fk]
    或[select * from table1, table2 where table1.pk=table2.fk]
    2、左外连接
    [select * from table1 left join table2 on table1.pk=table2.fk]
    以左表的数据为主,游标匹配上的数据就显示数据,没有匹配上的数据就显示NULL
    3、右外连接
    [select * from table1 right join table2 on table1.pk=table2.fk]
8、子查询
    1、all 
    [select * from table1 where degree>all(select degree from table2 where sid=18)]
    针对all的运算只有 > 或 <
    2、any 和任意值进行比较
    [select * from table1 where degree > any(select degree from table2 where sid=18)]
    3、in
    [select * from student_info where fk_class_id in (select id from class_info where class_name like 'J%');]
    IN操作符执行顺序
    先查询子表的表,再将内表和外表做一个笛卡尔积,使用 where 条件进行筛选
    4、exists
    [select * from student_info as s where exists (select id from class_info as c where c.id=s.fk_class_id and c.class_name like 'J%' );]
    先查主表(外表),将外表中的数据带入到子查询当中,判断子查询返回True或False,如果返回True,则将外表查询到的数返回结果集中,将集中数据返回给用户
    内表比较多的时候,exists效率更高
    select 
9、组合查询
    union | union all
    用于连接两个以上的select语句的结果组合到一个结果集合中
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/910916
推荐阅读
相关标签
  

闽ICP备14008679号