• day54


    内容回顾:
    一.MySql是基于C/S端的一个软件
    1.安装
    2.初始化 mysqld --initialize -insecure
    3.mysqld -install 安装windows服务 mysqld -remove 卸载服务
    4.net start mysql 开启服务 net stop mysql 关闭服务
    5.mysql -uroot -p 登陆

    二.破解密码
    跳过授权表破解密码 mysqld -skip -grant -tables

    三.同一字符串编码
    my.ini
    一定要重启MySQL服务器

    host localhost 或者127.0.0.1
    port 3306
    四.常用的sql语句

    查看所有的数据库
    show databases;

    创建数据库
    create database db1;

    使用数据库
    use db1;

    创建表
    create table s1(id int,name char(20));

    插入数据
    insert into s1 values(1,"娜扎"),(2,'alxe');

    查看表的结构
    desc s1;

    数据驱动视图

    今日内容:
    1.数据类型
    数值类型 tinyint int bigint
    小整数 整数 大整数
    一个字节 四个字节 八个字节
    默认是有符号的(-128,127)

    无符号的(0,255)
    unsigned:给当前的字段设置约束
    create table t2(x tinyint unsigned);

    int类型后面的存储时显示宽度,而不是粗存宽度

    zerofill用0填充
    create table t4 (id int(5) unsigned zerofill);

    浮点型:
    float 单精度 随着小数的增多,精度变得不准确
    double 双精度 同上但是要比float精度要高
    decimal 精准 内部原理是以字符串形式去存
    (m,d) 准确的小数值,m时整数部分总个数(符号不算),d时小数点后个数 m的最大值为65,d最大值为30.
    随着小数的增多,精度始终精确
    对于精确数值计算时需要用此类型
    decimal能够存储精确值的原因在其内部按照字符串储存
    字符串:
    char(10):简单粗暴,浪费空间,存储速度快(长度范围0-255)一个中文是一个字符,是utf-8编码的三个字节
    储存:
    储存char类型的值时,会往右填充空格来满足长度
    root存成root00000
    检索:
    在检索或者说查询的时,查出的结果会自动删除尾部的空格,除非我们打开
    pad_char_to_full_length
    SQL模式
    (设置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';查询sql的默认模式:select @@sql_mode;)
    varchar:精准,节省空间,存取速度慢
    储存:
    varchar类型储存数据的真实内容,不会用空格填充
    强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数
    (1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
    如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
    如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
    检索:
    尾部有空格会保存下来,在检索或者查询时,也会正常显示包含空格在内的内容

    sql优化:创建表时,定长的类型往前放,变长的往后放
    比如性别 比如地址

    >255个字符,超了就把文件路径存放到数据库中.
    比如视频,图片等找一个文件服务器,数据库中只存路径或url

    length();查看字节数
    char_length();查看字符数

    时间类型:

    YEAR
    YYYY(1901/2155)

    DATE
    YYYY-MM-DD(1000-01-01/9999-12-31)

    TIME
    HH:MM:SS('-838:59:59'/'838:59:59')

    DATETIME

    YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

    TIMESTAMP

    YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

    调用mysql自带的now()函数,获取当前类型指定的时间

    枚举类型与集合类型
    mysql> create table consumer(
    id int,
    name varchar(50),
    sex enum('male','female','other'),
    level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
    fav set('play','music','read','study') #在指定范围内,多选多
    );

    2.表的约束

    作用:保证数据的完整性和一致性
    -not null 和 default
    create table tb2(
    #如果插入空值,默认是2
    id int not null default 2,
    num int not null
    );
    insert into tb1(num) values(3);

    -unique
    不用的唯一的
    单列唯一
    只有一列是唯一

    create table department(
    id int,
    name char(10) unique
    );
    insert into department values(1,2),(2,2);

    多列唯一
    每个字段都设置unique
    create table department2(
    id int unique,
    name char(10) unique,
    );

    create table department2(
    id int,
    name char(10),
    unique(id),
    unique(name)
    );
    #每个字段插入的值都是不同的才能插入
    insert into department2 values(1,'it'),(2,'it2');

    组合唯一
    create table department3(
    id int,
    name char(10),
    unique(id,name)
    );
    insert into department3 values(1,'it'),(2,'it');

    primary key
    主键 在现在sql版本中 只允许 表中有一个主键,通常是id

    not null + unique

    create table s2(
    id int primary key,
    name char(10) not null
    );
    create table s3(
    id int not null unique,
    name char(10) not null
    );

    auto_increment 自增长

    create table student2(
    id int primary key auto_increment,
    name char(20) not null
    );
    insert into student2(name) values('nazha');
  • 相关阅读:
    PAT (Advanced Level) Practice 1097 Deduplication on a Linked List (25分) (静态链表+测试实例)
    PAT (Advanced Level) Practice 1096 Consecutive Factors (20分)
    POJ
    LightOJ
    LibreOJ
    SGU 223 国王 状压DP
    HDU
    CodeForces
    【模板】 拉格朗日插值
    模板 求二次剩余
  • 原文地址:https://www.cnblogs.com/jerry-hou/p/12332272.html
Copyright © 2020-2023  润新知