• MYSQL指令


    启动数据库 net start mysql
    关闭数据库 net stop mysql
    进入数据库 mysql -uroot -p
    退处数据库 q

    mysql会自动寻找分号作为语句结束符。
    注释(单行注释):双中划线+空格(– );也可以使用#
    查看警告 show warnings;

    创建数据库 create database数据库名字 charset utf8;
    删除数据库 Drop database 数据库名;
    查看创建数据库信息 Show create database 数据库名字;

    当删除数据库语句执行之后,发生了什么?
    1.数据库被删除,查看不到该数据库
    2.在对应的数据库存储的文件夹内:数据库名字对应的文件夹也被删除(级联删除:里面的数据全被删除)
    3.删除不可逆,应先备份再删除

    表操作:表与字段密不可分.
    新增数据表
    create table [if not exists] 表名(字段名字 数据类型;字段名字 数据类型)[表选项]
    if not exists:如果表名不存在,那么就创建,否则不执行创建代码:检查功能
    表选项:控制表的表现
    字符集:charset/character set 具体字符集; 保证表中数据存储的字符集
    校对集:collate 具体校对集;
    存储引擎:engine 具体的存储引擎(innodb和myisam)

    新增表前必须进入某个数据库,然后在操作
    进入数据库 use 数据库名字;
    然后创建表如:
    create table class(
    name varchar(10),
    room varchar(10)
    )charset utf8;

    查看数据表 show tables;
    查看部分表 模糊查询pattern
    show tables like ’%s’;

    查看表的创建语句 show create table 表名G
    查看表结构:查看表中的字段信息(以下四种方式都可以)
    Desc/describe/show columns from 表名;
    desc class;
    describe class;
    show columns from class;

    修改数据表
    重命名表 rename table 旧表名 to 新表名;
    修改表选项 alter table 表名 值;
    新增字段 alter table 表名 add[column] 字段名 数据类型 [ 列属性][位置]
    修改字段 alter table 表名 modify 字段名 数据类型 [属性][位置]
    重命名字段 alter 表名 change 旧字段 新字段名 数据类型 [属性][位置];
    删除字段 alter 表名 drop 字段名;
    删除数据表 drop table 表名1,表名2,表名3…;

    数据操作
    新增数据
    方案1.给全表字段插入数据,不需要指定字段列表:要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致:凡是非数值数据,都要使用引号(建议是单引号)
    insert into 表名 valuse(值列表)[,(值列表)];
    方案2.给部分字段插入数据,需要选定字段列表出现的顺序与字段的顺序无关;但是值列表的顺序必须与选定的字段的顺序一致.
    insert into 表名(字段列表)values(值列表)[,(值列表)];

    查看数据 select */字段列表 from 表名 [where条件];
    更新数据 update 表名 set 字段=值[where条件];
    删除数据 delete from 表名 [where条件];

    查看服务器识别哪些字符集 show character set;
    查看服务器默认对外处理字符集 show variables like ‘character_set%’;
    改变服务器默认的客户端字符集 set character_set_client=gbk;
    改变服务器给定数据的字符集为GBK set character_set_results=gbk;

    校对集问题
    校对集:数据比较方式
    校对集有三种方式
    _bin:binary二进制比较,取出二进制位u,一位一位的比较,区分大小写
    _cs:case sensitive,大小写敏感,区分大小写
    _ci:case insensitice,大小写不敏感,不区分大小写
    查看数据库支持的校对集 show collation;
    校对集应用:只有数据产生比较的时候,校对集才会生效。
    比较:根据某个字段进行排序:order by 字段名[asc|desc];asc 升序,desc 降序,默认是升序

    web乱码问题:
    动态网站由三部分构成:浏览器,apache浏览器(PHP),数据库服务器,三个部分
    都有自己的字符集,数据需要在这三个部分之间来回传递:很容易产生乱码。
    解决:统一编码(三码合一),事实不可能

    数据类型(列类型)
    数值型数据:都是数值
    数值型:整数型和小数型
    整数型数据:在SQL中为考虑节省磁盘空间,系统将整型又细分5类
    Tinyint:迷你整型,使用一个字节存储,表示的状态最多为256种(常用)
    smallint:小整型,使用2个字节存储,表示的状态最多为65536种
    mediumint:中整型,使用3个存储字节
    int:标准整型,使用4个字节存储(常用)
    bigint:大整型,使用8个字节存储

    SQL中的数据类型都是默认有符号的:分正负
    有时候需要使用无符号数据:需要给数据类型限定:int unsigned

    查看表结构的时候,发现每个字段的数据类型之后都会自带一个括号,里面有指定的数字是指显示宽度:数据最终显示的位数

    小数型(浮点型)
    SQL中:将小数型细分为两种:浮点型和定点型
    浮点型:小数点浮动,精度有限,会丢失精度
    定点型:小数点固定,精度固定,不会丢失精度

    浮点型
    浮点型数据是一种精度数据,因为超出指定范围之后,会丢失精度(自动四舍五入)
    浮点型:理论分为两种精度
    float:单精度,占用4个字节存储数据,精度范围大概为7位左右
    double:双精度,占用8个字节存储数据,精度范围大概为15位左右
    浮点型数据的插入:整型部分不可以超出长度,但是小数部分可以超出(系统会自动四舍五入)

    定点型
    定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论小数部分也不会丢失精度)
    插入数据:定点数的整数部分一定不能超出长度(进位不可以),小数部分的长度可以随意超出(系统自动四舍五入)

    时间日期类型
    datetime:时间日期
    插入数据:时间time可以是负数如:
    insert into my_date values('2017-4-26 17:29:08','2017-4-26','17:30:13','2017-4-26 17:30:39',2017);
    insert into my_date values('2017-4-26 17:29:08','2017-4-26','-17:30:13','2017-4-26 17:30:39',2017);
    insert into my_date values('2017-4-26 17:29:08','2017-4-26','-177:30:13','2017-4-26 17:30:39',2017);
    insert into my_date values('2017-4-26 17:29:08','2017-4-26','-2 17:30:13','2017-4-26 17:30:39',2017)
    insert into my_date values('2017-4-26 17:29:08','2017-4-26','17:30:13','2017-4-26 17:30:39',69);
    insert into my_date values('2017-4-26 17:29:08','2017-4-26','17:30:13','2017-4-26 17:30:39',70);

    timestamp:只要当前所在的记录被更新,该字段一定会自动更新成当前时间
    – timestamp
    update my_date set d1=’2017-4-26 17:41:40’ where d5=2069;

    字符串类型
    在SQL中,将字符串分成了6类:char,varchar,text,blob,enum和set

    定长字符串:char,磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度。
    char(L):L代表length。可以存储的长度,单位为字符,最大长度值可以为255.

    变长字符串:varchar,在分配空间的时候,按照最大的空间分配:但是实际上最终用了多少,是根据具体的数据来确定
    varchar(L):L表示字符长度,理论长度是65536个字符,但是会多出1到2个字节来确定存储的实际长度
    定长与变长字符串的区别:定长的磁盘空间比较浪费,但是效率高:如果数据基本上确定长度都一样,就是使用定长
    变长的磁盘空间比较节省,但是效率低:如果数据不能确定长度(不同数据有变化)

    文本字符串
    如果数据量非常大,通常说超过255个字符就会使用文本字符串
    文本字符串根据存储的数据的格式进行分类:text和blob
    Text:存储文字(二进制数据实际上都是存储路径)
    Bolb:存储二进制数据(通常不用)

    枚举字符串
    枚举:enum,事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个
    枚举原理:枚举进行数据规范的时候(定义的时候),系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中);然后进行数据
    插入的时候,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统自动将数值转换成对应的字符串显示.

    集合字符串
    集合跟枚举类似:实际存储的是数值,而不是字符串(集合是多选)
    集合使用方式:
    定义:set(元素列表)
    使用:可以使用元素列表中的元素(多个),使用逗号分隔

    列属性
    列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束来更加保证数据的合法性。
    列属性:NULL/NOTNULL,default,primary key,unique key,auto_increment,comment
    空属性:NULL(默认的)和NOT NULL(不为空)

    列描述:comment,描述,没有实际含义:是专门用来描述字段,会根据表创建语句保存:用来给数据库管理员来进行了解的。

    默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好:在需要真实数据的时候,用户可以选择性的使用默认值。
    默认值关键字:default

    主键:primary key,一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能-重复:这种称之为主键。
    一张表只能最多一个主键。
    增加主键:
    1.在创建表的时候,直接在字段之后,跟primary key关键字(主键本身不允许为空)
    2.复合主键
    3.当表已经创建好,再次额外追加主键:可以通过修改字段属性,也可以直接追加

    主键约束
    主键对应的字段中数据不允许重复:一旦重复,数据操作失败(增改)
    删除主键:
    alter table 表名 drop primary key;

    主键分类:
    在实际创建表中,很少使用真实业务数据作为主键字段(业务主键,如学号,课程号);
    大部分的时候是使用逻辑的字段(字段没有业务含义),将这种字段称之为逻辑主键

    自动增长
    自增长:当对应的字段,不给值,或者给默认值,或者给NULL的时候,会自动的被系统触发,
    系统会从当前字段中已有的最大值在进行+1操作,得到一个新的不同的字段
    自增长通常是跟主键搭配.
    自增长特点:auto_increment
    1.任何一个字段要做自增长必须前提是本身是一个索引(key一栏有值)
    2.自增长字段必须是数字(整型)
    3.一张表最多只能有一个自增长
    修改自增长
    自增长如果涉及到字段改变:必须先删除自增长,后增加(一张表只能有一个自增长)
    修改当前自增长已经存在的值:修改只能比当前以有的自增长的最大值大,不能小(小不生效)可以修改变量实现不同的效果:修改是对整个数据库修改,而不是单张表(修改是会话级)

    唯一键
    一张表往往有很多字段需要具有唯一性,数据不能重复:但是一张表中只能有一个主键:唯一键(unique key)就可以解决表中有多个字段需要唯一性约束问题
    增加唯一键:
    1.在创建表的时候,字段之后直接跟unique/unique key
    2.复合唯一键

    删除唯一键 alter table 表名 drop index 索引名子;

    索引
    mysql中索引:
    1.主键索引:primary
    2.唯一索引:unique key
    3.全文索引:fulltext index
    4.普通索引:index

    连接查询
    分成四类:
    1.内连接
    2.外连接
    3.自然连接
    4.交叉连接

    交叉连接:cross join,从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配;
    匹配一定保留(没有条件匹配),而连接本身字段就会增加(保留),最终形成的结果叫做:笛卡尔积.
    基本语法:左表 cross join 右表;======from 左表,右表;
    select * from my_student cross join my_class;

    内连接:inner join,从左表中取出每一条记录,去右表中与所有的记录进行匹配:匹配必须是某个条件在左表中与右表中相同最终才会保留,否则不保留
    基本语法:右表 join on 左表.字段=右表.字段;on表示连接条件;条件字段就是代表相同业务含义。

    外连接:outer join,以某张表为主,取出里面所有的记录,然后每条与另外一张表进行连接;
    不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其他表的字段都置空NULL.
    外连接:以主表为主:有主表
    left join:左连接,以左表为主表
    right join:右连接,以右表为主表
    基本语法:左表 left/right join 右表 on 左表.字段=右表.字段;

    自然连接:natural join,自然连接,就是自动匹配连接条件:系统以字段名字作为匹配模式(同名字字段就作为条件,多个同名字字段都作为条件)
    自然连接分为:自然内连接,自然外连接
    基本语法:
    自然内连接:左表 natural join 右表;
    自然外连接:左表 natural left/right 右表;

  • 相关阅读:
    [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串
    [LeetCode] Number of Segments in a String 字符串中的分段数量
    [LintCode] Longest Common Prefix 最长共同前缀
    [LintCode] Product of Array Except Self 除本身之外的数组之积
    [LintCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
    [LintCode] Sort List 链表排序
    [LintCode] Find Peak Element 求数组的峰值
    [LintCode] Container With Most Water 装最多水的容器
    [LintCode] Linked List Cycle 单链表中的环
    [LeetCode] 465. Optimal Account Balancing 最优账户平衡
  • 原文地址:https://www.cnblogs.com/wangqilong/p/8279819.html
Copyright © 2020-2023  润新知