• 数据库笔记


    初始化 mysqld --initialize-insecure
    开启服务端 mysqld
    客户端连接服务端 mysql -uroot -p
    启动服务net start mysql
    关闭服务net stop mysql
    刷新权限flush privileges;
    密码设置update mysql.user set authentication_string =password('123') where User='root';
    破解密码
    - 先把原来mysql服务端关闭
    - 管理员身份运行执行:mysqld --skip-grant-tables
    - 客户端连接服务端 此时修改密码,注意修改密码之后一定要刷新权限
    创建用户:
    # 指定ip:192.118.1.1的mjj用户登录
    create user 'mjj'@'192.118.1.1' identified by '123';

    # 指定ip:192.118.1.开头的mjj用户登录
    create user 'mjj'@'192.%.%.%' identified by '123';

    # 指定任何ip的mjj用户登录
    create user 'mjj'@'%' identified by '123';
    sql语句
    show databases; 查看所有的数据库
    use db1; 进入数据库

    create database db1; 创建数据库
    use db1;

    - 创建用户
    create table s1(id int,name char(10));

    insert into s1(id,name) values (1,'abcd'),(2,'武松');
    - 对当前用户授权操作(root用户拥有)
    #授权 mjj用户仅对db1.t1文件有查询、插入和更新的操作
    grant select on db1.t1 to "mjj"@'%';

    # 表示有所有的权限,除了grant这个命令,这个命令是root才有的。mjj用户对db1下的t1文件有任意操作
    grant all privileges on db1.t1 to "mjj"@'%';

    #mjj用户对db1数据库中的文件执行任何操作
    grant all privileges on db1.* to "mjj"@'%';

    #mjj用户对所有数据库中文件有任何操作
    grant all privileges on *.* to "mjj"@'%';

    取消授权
    revoke select on db1.s1 from "mjj"@'%';

    mysql -umjj -h 192.168.12.74 -p
    123

    存储引擎
    create table t1(id int)engine=innodb;
    create table t2(id int)engine=myisam;
    create table t3(id int)engine=memory;
    create table t4(id int)engine=blackhole;

    insert into t1(id) value(1);
    insert into t2(id) value(1);
    insert into t3(id) value(1);
    insert into t4(id) value(1);

    select *from t1;
    select *from t2;
    select *from t3;
    select *from t4;

    复制表
    表结构+内容
    create database db2;
    use db2;
    create table b1 select *from db1.t1;
    selcet *from b1;
    复制表结构
    第一种:
    create table b2 select *from db1.t1 where 1>2;
    select *from b2;
    desc b2;
    第二种:
    create table b3 like db1.t1;
    select *from b3;
    desc b3;
    删除表
    drop table 表名;

    有符号和无符号tinyint(范围-128~127 顾头顾尾)
    默认有符号
    create database db3;
    use db3;
    create table t1(x tinyint);
    insert into t1 value(-128);
    insert into t1 value(127);
    desc t1;
    设置无符号(范围0~255)
    unsigned:给当前的字段设置约束
    create table t2(x tinyint unsigned);
    desc t2;
    insert into t2 value(-1);报错,超出范围;
    insert into t2 value(0);

    int类型后面的存储是显示宽度,而不是存储宽度
    create table t3(id int(1) unsigned);
    insert into t3 value(222222222);
    select *from t3;

    create table t4(id int(5) unsigned);
    insert into t4 value(222);
    select *from t4;

    create table t5(id int(5) unsigned zerofill);
    insert into t5 value(222);
    insert into t5 value(22222222);
    select *from t5;
    有符号和无符号的最大数字需要的显示宽度均为10,
    而针对有符号的最小值则需要11位才能显示完全,
    所以int类型默认的显示宽度为11是非常合理的

    浮点型
    float :在位数比较短的情况下不精准
    随着小数的增多,精度变得不准确
    参数解释:单精度浮点数(非准确小数值),M是全长,D是小数点后个数。M最大值为255,D最大值为30
    double:在位数比较长的情况下不精准
    随着小数的增多,精度比float要高,但也会变得不准确
    参数解释: 双精度浮点数(非准确小数值),M是全长,D是小数点后个数。M最大值为255,D最大值为30
    decimal:如果用小数,则用推荐使用decimal
    精准
    内部原理是以字符串形式去存
    随着小数的增多,精度始终准确 ****
    对于精确数值计算时需要用此类型
    decaimal能够存储精确值的原因在于其内部按照字符串存储。
    参数解释:准确的小数值,M是整数部分总个数(负号不算),D是小数点后个数。 M最大值为65,D最大值为30。

    精度验证
    create table t6(x float(255,30));
    create table t7(x double(255,30));
    create table t8(x decimal(65,30));

    insert into t6 value(1.111111111111111111111111111);
    insert into t7 value(1.111111111111111111111111111);
    insert into t8 value(1.111111111111111111111111111);

    select *from t6;
    select *from t7;
    select *from t8;
    时间类型:datetime
    日期类型
    year
    create table t9(year year);
    insert into t9 values (1900);超出范围
    insert into t9 values (1901);
    insert into t9 values (2155);
    insert into t9 values (2156);超出范围
    date、year、datetime
    create table t10(d date,t time, dt datetime);
    desc t10;
    insert into t10 values(now(),now(),now());
    select *from t10;

    创建学生表
    create table student(
    id int,
    name varchar(10),
    born year,
    barth date,
    classtime time,
    cometime datetime
    );
    insert into student values(
    1,'b','2008','2008-11-11','11:11:11','2018-11-11 11:11:11'
    );
    insert into student values(
    2,'c','2008','2008-11-11','11:11:11','2018-11-11 11:11:11'
    );
    insert into student values(
    3,'陈伟',now(),now(),now(),now()
    );
    select *from student;
    insert into student() values(
    4,'高永杰',now(),now(),now(),now()
    );
    select *from student;
    字符类型
    char和varchar括号内的参数指的都是字符的长度

    char类型:定长,简单粗暴,浪费空间,存取速度快
    字符长度范围:0-255

    varchar类型:变长,精准,节省空间,存取速度慢
    字符长度范围:0-65535

    length():查看字节数
    char_length():查看字符数
    create table t1(x char(5),y varchar(4));
    insert into t1 values('你好啊 ','你好啊 ');
    select x,char_length(x),y,char_length(y) from t1;

    让char显原型
    SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
    查看当前mysql的mode模式
    select @@sql_mode;
    select x,char_length(x) y,char_length(y) from t1;

    exit;退出后重新登录
    找到db4;
    select @@sql_mode;还原模式

    枚举类型与集合类型:enum 和set
    enum
    单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

    set
    多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

    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') #在指定范围内,多选多
    );

    insert into consumer values
    (1,'张三','male','vip2','read,study'),
    (2,'李四','female','vip4','play'),
    (3,'王五','female','vip3','play,read,study');

    select * from consumer;
    默认为空
    insert into consumer(id,name,sex,level,fav)values(4,'马六','male','vip2','');
    为NULL
    insert into consumer(id,name,sex,level)values(5,'周七','male','vip2');
    完整性约束
    作用:用于保证数据的完整性和一致性
    not null 不可空
    default 默认值 创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
    create database db5;
    use db5;
    nid如果为空默认为2,num不可以为空,如果为空则报错
    create table t1(nid int not null default 2,num int not null);
    nid为空默认为2
    insert into t1(num) values(3);
    num为空报错
    insert into t1(nid) values(3);


    unique 不同的,唯一的
    单列唯一
    只有一列唯一
    create table department(
    id int,
    name char(10) unique
    );
    insert into department values(1,'it'),(2,'it');报错
    insert into department values(1,'it'),(2,'it2');
    多列唯一
    多个列是唯一的
    create table department1(
    id int unique,
    name char(10) unique
    );
    insert into department1 values(1,'it'),(2,'sale');
    insert into department1 values(1,'it'),(1,'sale');报错
    insert into department1 values(1,'it'),(2,'it');报错
    insert into department1 values(1,'it'),(1,'it');报错
    或者
    create table department2(
    id int,
    name char(10) ,
    unique(id),
    unique(name)
    );

    组合唯一
    只要有一个字段不一样都可以插入
    create table department3(
    id int,
    name char(10) ,
    unique(id,name)
    );
    insert into department3 values(1,'it'),(2,'it');
    insert into department3 values(1,'it1'),(1,'it2');

    primary key
    主键 一般是id
    create table t2(
    id int primary key,
    name char(10)not null
    );
    insert into t2(id,name) values(1,'aaaa'),(1,'bbbb');报错
    insert into t2(id,name) values(1,'aaaa'),(2,'bbbb');

    create table t3(
    id int not null unique,
    name char(10)not null
    );
    insert into t3(id,name) values(1,'aaaa'),(2,'bbbb');
    结论:
    约束:等价于 not null unique,字段的值不为空且唯一
    主键查询速度快
    复合主键:只要有一个字段不一样都可以插入
    create table t4(
    ip char(20),
    port int,
    primary key(ip,port)
    );
    insert into t4 values('1.1.1.2',80),('1.1.1.2',81);
    insert into t4 values('1.1.1.3',80),('1.1.1.4',80);
    insert into t4 values('1.1.1.5',84),('1.1.1.5',84);报错

    auto_increment
    约束:约束的字段为自动增长,约束的字段必须同时被key约束
    id自动排序
    create table student(
    id int primary key auto_increment,
    name varchar(20),
    sex enum('male','female') default 'male'
    );
    insert into student(name) values ('张三'),('李四'),('王五');
    select * from student;
    delete from student where id=2;删除第二个
    再次插入一条不指定id的记录,该字段仍按照删除前的位置继续增长

    指定id
    insert into student values(6,'马六','female');
    insert into student values(10,'周七','female');
    再次插入一条不指定id的记录,会在之前的最后一条记录继续增长
    insert into student(name) values('赵八');

    清空表区分delete和truncate的区别:

    delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。

    truncate table t1;数据量大,删除速度比上一条快,且直接从零开始。


    show variables like'auto_inc%';
    步长auto_increment_increment,默认为1
    起始的偏移量auto_increment_offset, 默认是1

    设置步长 为会话设置,只在本次连接中有效
    set session auto_increment_increment=5;

    全局设置步长 都有效。
    set global auto_increment_increment=5;


    设置起始偏移量
    set global auto_increment_offset=3;

    insert into student(name) values('钱九');
    插入的时候,从起始位置3开始,每次插入记录id+5

  • 相关阅读:
    小程序 短信验证码 倒计时 变量作用域
    File syncing and sharing software with file encryption and group sharing, emphasis on reliability and high performance.
    图片合并与截断
    宽度分离
    无宽度准则
    linux系统/var/log目录下的信息详解
    Connection Phase Packets
    select version();desc mysql.user;
    mysql user password plugin
    Please read "Security" section of the manual to find out how to run mysqld as root!
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9673202.html
Copyright © 2020-2023  润新知