MySQL学习笔记:基本数据类型与查询操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WilliamCode/article/details/85546073

#客户端将数据存储到数据库服务器上的过程
    1、连接到服务器 mysql -u xxx -p xxx
    2、选择一个库 use xxx
    3、创建表或者修改表
    4、断开与数据库服务器的连接 exit; | quit; | \q

#mysql的数据类型
#数值类型(有符号和无符号)
    1、整形
        bigint 极大整形
            0-2**64-1
        int 大整形(4个字节) 2^32-1 = 42亿多
        smallint 小整形(2个字节)
            0-65535
        tinyint 微笑整形(1个字节)    
            默认signed:-128 到 127
            unsigned:0 到 2^8-1=255
    2、浮点型
        float(4字节,最多显示7个有效位)            
        用法:float(m,n) m为十进制下总位数 n为十进制下小数位位数
            float(5,2)范围是 -999.99到999.99
            插入时,自动补全小数位,多出来的小数位会四舍五入
            当有效数字位多于7位时,显示时,只显示准确的前七位,其他都是乱的
        
        double(8字节,最多显示15个有效位)
        用法:double(m,n) m为十进制下总位数 n为十进制下小数位位数
    
        decimal(占M+2个字节,最多显示28个有效位)
        用法:decimal(M,D)

        多用decimal和float,用double的很少
    
#字符类型
    1、char(定长)
        宽度取值范围:1-255;即字符串最长为255个字符
        不给定宽度时为1
    2、varchar(变长)    
        宽度取值范围:1-65535,没有默认宽度,必须指定
        
    char是定长字符串,不足定长的部分会被空格补齐,但是性能高
    varchar是边长字符串,节省空间,但是性能低
    
#枚举类型
    字段值只能在列举的范围内取选择
    1、enum单选(最多有65536个不同的值)
        字段名 enum(值1,值2 ......)
    2、set多选(最多有64个不同的值)
        字段名 set(值1,值2 ......)
    
    比如:
    create table t6(
        name char(15),
        sex enum("boy","girl","secret"),
        hobby set("girl","boy","MySQL","Python","C++","PHP"));
    #enum和set只能枚举字符串类型
    insert into t6 values( "Lucy","secret","C++,PHP");
    #set多选时,用双引号括住,中间直接填值
    
#日期时间类型
    1、year年份,插入YYYY
    2、date日期,插入YYYYMMDD
    3、time时间,插入HHMMSS
    4、datatime日期与时间,插入YYYYMMDDHHMMSS
    5、timestamp日期时间,插入YYYYMMDDHHMMSS

    注意:
    插入记录时datatime不给值,默认返回NULL
          timestamp不给值,默认返回系统当前时间

#查找表
    1、and且
    2、or或
    3、is null空, is not null非空
    
    注意:
    空值NULL必须用is 或者is not 去匹配
    ""空字符串必须用 = 或者 != 匹配
    
    4、范围内比较
        between A and B
        in (A,B,C ...)
        not in (A,B,C ...)
    5、模糊比较
        字段名 like 表达式
        _ 匹配单个字符
        % 匹配0到多个字符
    
        比如
        select * from table1 where name like "___"
        匹配名字长度为3的童鞋
        select * from talbe1 where name like "赵%"
        匹配姓赵的童鞋
        select * from table1 where name like "__%"
        匹配名字至少有两个字符的童鞋

#SQL查询执行顺序
    3、select    ...聚合函数 from ...
    1、where
    2、group by
    4、having    
    5、order by
    6、limit
    
#order by语句
    作用:给查询的结果进行排序
    方式:升序,降序
        ACS(默认):升序
        DESC:降序
    语法:order by 字段名 排序方式
    
#limit永远放在最后写
    limit n 显示几条记录
    limit m,n m表示从第几条记录开始显示,n表示显示几条
        
#聚合函数
    分类:
    avg(字段名):求平均值
    sum(字段名):求字段的和
    max(字段名):求字段的最大值
    min(字段名):求字段的最小值
    count(字段名):统计该字段记录个数
    
    比如,显示成绩最大值
    select max(score) as "highest score" from table8;
    显示成绩平均值
    select avg(score) as "average score" from table8;
    显示成绩高于100的学生人数
    select count(*) from table8 where score>=100

#group by 分类    
    该过程是先按照字段给所有数据分组,然后再计算其他要求的数据
    比如:select country from t8 group by country
        查询都有哪些国家
    
    注意:
    1、group by之后的字段名必须是select之后的字段名
    2、如果select之后的字段名和group之后的字段名不一致,必须进行聚合处理,否则必须因为结果行数不一样而出错
    
    示例:查询所有国家中英雄数量最多的前两名的国家名称和英雄数量
    select country,count(*) as Num from table8 group by country order by Num 
    
    示例:找出平均攻击力大于105的国家的前两名,显示国家名和平均攻击力
    select country,avg(damage) from table8 group by country having avg(damage)>105 limit 2

    注意:
    1、having语句通常与group by语句联合使用,用于过滤由group by语句返回的记录集
    2、where的优先级高于group,只能对分组之前的结果进行筛选;having优先级低于group,用于对group之后的结果进行分组
    
#distinct(不重复的)
    作用:不显示字段的重复值
    示例:select distinct country from sanguo;
    如果select country,name from sanguo;    则当且仅当country和name都相同时才能去重

#查询表时做数学运算
    运算符:+、-、*、/、%
    示例:select id,name,score * 10 from table8;

#约束:为了保证数据的完整性、一致性、有效性的规则,可以限制无效数据插入到数据表中

#默认约束
    作用:插入记录时,如果不给该字段赋值,则使用默认值
    格式:字段名 数据类型 default值
    
#非空约束
    作用:不允许该字段的值有NULL记录
    格式:字段名 数据类型 not null
    
#表记录的修改
    delete from table_name where 条件;
    不加where将表记录全部删除
    
    update table_name set 字段名=值1, where 条件


#索引:对数据库表中的一列或者多列进行排序的结构(MySQL中是BTREE)
    优点:防止多次遍历数据库记录,加快检索速度(相当于对索引排序后进行二分,MySQL中最多分三层)
    缺点:进行增加、修改、删除时,索引也需要动态维护,降低了数据的变更速度;需要占用物理空间

#普通索引(index):
    规则:
    1、一个表中可以有多个index字段
    2、字段的值可以有重复、且可以为NULL值
    3、经常把做查询条件的字段设置为index字段
    4、index字段的key标志时MUL
    
    创建普通索引:
    1、创建表的时候创建索引字段
        index(字段名1),index(字段名2)......
    2、向已存在的表中创建索引字段
        create index 索引名 on table(字段名);

#查看普通索引
    1、desc 表明;    查看key标志为MUL即可
    2、show index from table

#删除普通索引
    drop index 索引名 on table_name
    只能一个一个删除

#小知识点
    在MySQL中调用bash命令
    system bash命令

#唯一索引(unique)规则
    一个表中可以有多个unique字段
    unique字段的值不允许重复,但是可以为空
    unique的key值是UNI

#创建唯一索引
    1、在创建表时创建
        create table t1(
        id int default 0,
        name char(20) unique);
    2、也是在创建表时创建,和创建普通索引差不多
        create table t1(
        id int default 0,
        name char(30),
        unique(id),
        unique(name));
    3、在已存在的表中创建
        create unique index name_ on t1(name);

#查看唯一索引
    1、desc
    2、show index from t1\G;
    
#删除唯一索引
    drop index name from t2;

#主键(primary key)
    1、一个表中只能由一个主键字段
    2、对应字段的值不允许重复,且不能为空值
    3、KEY标志位PRI    
    4、一般把表中唯一能够表示一条记录的字段设置为主键字段

#创建主键
    1、在创建表时创建,和unique一样
        create table t3(
        id int primary key,
        name char(20)
        );        

        create table t3(
        id int,
        name char(20),
        primary key(id)
        );        

    2、在已存在的表上加入
        alter table t2 add primary key(name);
        
#删除主键
    alter table t2 drop primary key;
    
#复合主键的概念

#自增长属性
    作用:通常和主键一起配合使用
#创建表时创建自增长属性
    字段名 数据类型 primary key auto_increment
#使用
    插入记录时,不会动态维护,但会保证表内id不一样
    根据实验,可能有一个变量在记录表中自增属性的最大值,然后每次插入缺省时,用最大值+1

#向已存在表中添加自增长属性
    alter table table_name modify 字段名 数据类型 primary key auto_increment
    
#删除带自增长属性的主键
    先删除自增长属性,但是该字段还是主键:alter table t3 modify 字段名 数据类型;

猜你喜欢

转载自blog.csdn.net/WilliamCode/article/details/85546073