• mysql学习笔记


    今天开始学习mysql数据库了,也是第一次在这里写技术笔记,相信好记忆不如烂笔头,就以此来见证自己的成长吧!

    首先安装mysql服务器的过程这里就不啰嗦啦,相信大家都懂的,直接进入主题吧,欢迎那些也是刚开始学习mysql数据库的来一起探讨,是高手的话就发表下意见咯,小弟在这里虚心请教!

    一、入门语句:

    首先打开运行对话框-->输入cmd-->回车

    1.连接到mysql服务器:

    mysql -h localhost -u 用户名(通常都是root) -p 密码;

    如果不写 -h localhost,默认是连接到本地的mysql服务器,比如在我的电脑:

    mysql -u root -p mysql;

    2.查看所有的数据库

    show databases;

    3.选择使用哪个数据库

    use databaseName;  --这条语句比较特殊,可以不写分号

    比如我有一个数据库名字是test,则use test;

    4.查看某个数据库下的所有表

    show tables;

    5.查看表结构

    desc(全称description) 表名;

    6.建库语句

    create database 数据库名;

    7.建表语句

    注意:建表之前必须先选择使用某个数据库,use test,

    create table 表名(

      列名 数据类型,   --多个列用逗号隔开

      ......

    )

    其实建表就是声明列的过程。

    8.重命名表

    rename table oldName(原来的表名) to newName(新的表名);

    注意:不能给数据库重命名的。

    9.设置字符集

    set names gbk;

    二、详解列类型之三大列类型

        1.数值型(整型列,浮点型列)

        2.字符型列

        3.日期/时间类型

    整型列存储范围与所占空间

    类型
     
    字节 有符号 无符号
    tinyint 1 8 -2^7-2^7-1 0-2^8-1
    smallint 2 16 -2^15-2^15-1 0-2^16-1
    mediumint 3 24 -2^23-2^23-1 0-2^24-1

    int

    bigint

    4

    8

    32

    64

    -2^31-2^31-1

    -2^63-2^63-1

    0-2^32-1

    0-2^64-1

    tinyint类型分析:

    默认是有符号的,存储-128-127;

    比如:我们有一列age年龄列,年龄适合用tinyint类型,但年龄又不能为负数,这时候我们就要声明为unsigned无符号类型,如:

    create table student(

    id int,

    age tinyint unsigned

    )

    整型列的可选属性

    tinyint(M) unsigned zerofill;

    M:宽度(在零填充的时候才有意义),不会影响存储范围

    unsigned:无符号类型(非负),会影响存储范围

    zerofill:0填充,默认无符号

    zerofill详解:

    比如:我们往student表新增一列

    alter table student add age2 tinyint(5) unsigned(可写可不写) zerofill;

    然后我们再往student表插入一行数据时:

    insert into student(id,age2) values(1,255);

    表里显示的数据会是

    id  age2

    1   00255

    位数不够时,用0来填充就是这个意思。

    另外,smallint,mediumint,int,bigint用法也是大同小异,此处就不多说了。

    浮点型与定点型:

    float(M,D),decimal(M,D)

    M:代表精度,即总位数(不包含小数点)

    D:代表标度,即小数位数

    比如float(6,2),代表的取值范围为-9999.99-9999.99

    注意:和整型有一点不同的是float的M是影响它的取值范围的,而整型则不会。

    float和decimal的区别在于:decimal表达的值更精确,比如我们创建一张商品表:

    create table goods(

       id int primary key auto_increment,

       floatprice float(9,2) not null default 0.00,

       decimalprice decimal(9,2) not null default 0.00);

    然后插入一行数据:

    insert into (name,floatprice,decimalprice) values('法拉利',1234567.23,1234567.23);

    goods最终显示的结果是:

    id   name   floatprice   decimalprice

    1    法拉利  1234567.25   1234567.23

    由此可见它们谁更加精确了。

    字符型:

    char(M),varchar(M)

    类型 宽度 可存字符 实存字符(i<=M) 实占空间 利用率
    char M M(0-255字节) i M i/M<=100%
    varchar M M(0-65535字节) i i字符+(1-2个字节) i/(i+1-2)<100%

    char和varchar的主要区别:

    1.char:定长,M个字符,如果存的小于M个字符,实占M个字符,如果不够M个字符,内部会用空格来补全;

      如果某列尾部值存在空格,用char的话会造成空格的丢失:

      比如我们创建一张学生表:

      create table stu(

        id int primary key auto_increment,

        name char(8) not null default '',

        waihao varchar(8) not null default '');

    insert into stu(name,waihao) values('lisi  ','lisi  ');

    这里某人的姓名就是lisi+两个空格

    然后我们查询的时候

    select concat(name,'!'),concat(waihao,'!') from stu;这里用concat是为了让大家看出效果

    结果为:

    id      name      waihao

    1       lisi!      lisi  !

    可见,char类型的name列的空格丢失了,为什么呢?

    因为char类型,我们这里定义了8个字符,我们实际存储的lisi+加两个空格只有六个字符,它内部会再用2个空格再帮我们补全8个字符,而当我们查询的时候,它会把后面的空格全部去掉,这样就造成我们空格的丢失了。

      varchar:变长,M个字符,如果存的小于M个字符,设为N,N<=M,实占N个字符

    2.它们的利用率

    3.速度上char会比较快

    char和varchar的选择原则,以下三方面来考虑:

    1.空间利用率,比如四字成语表,就可以用char(4),可以保证空间百分百利用;

      而像个人简介,微博这种就应该用varchar;

    2.速度上,比如用户名,如果用char,可能会浪费几个字节空间,但从速度上来考虑,当用户注册量非常大的时候,还是选择用char比较好。

    最后还有一个text类型的,它是文本类型,可以存储比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议用char,varchar来代替;

    text还有一个要注意的:不能给text类型的字段加默认值。

    三、日期/时间类型

    1.year

    1个字节,表示1901-2155年,[0000,表示错误时的选择]

    如果输入两位,'00-69',则表示的是2000-2069年;'70-99',则表示的是1970-1999年;

    如果嫌记得麻烦,就四位一起输咯。

    2.date

    典型格式:1990-09-14;

    表示的范围:1000-01-01 到 9999-12-31

    3.time

    典型格式:hh:mm:ss

    表示的范围:-859:59:59->859:59:59

    4.datetime

    典型格式:yyyy-mm-dd hh:mm:ss

    表示的范围:1000-01-01 00:00:00->9999-12-31 23:59:59

    5.时间戳

    1970-01-01 00:00:00到当前的秒数;

    一般存注册时间,商品的发布时间并不是用datetime类型来存储,而是用时间戳,

    因为datetime虽然直观,但计算不方便。

    而用int类型来存储时间戳,方便计算,对于显示来说也方便格式化。

  • 相关阅读:
    好系统重装助手重装电脑系统步骤
    U盘加载速度慢的解决方法
    Win10应用商店缓存信息多如何去清理?
    怎么消除文件左上角的白色小框?
    U盘被识别但不显示盘符怎么样才能解决?
    【Gamma】Scrum Meeting 2
    【技术博客】 关于laravel5.1中文件上传测试的若干尝试
    【Beta】Phylab 发布说明
    【Beta】Phylab 测试报告
    【Beta】Scrum Meeting 10
  • 原文地址:https://www.cnblogs.com/a757956132/p/4314914.html
Copyright © 2020-2023  润新知