• 我以前网站放在国外vps上一直是备份到dropbox的,但是因为dropbox免费版只有2g的容量,所以我一直都是删除前一天的备份,一直有点拮据。现在把网站放到国内vps上来了,当然是要备份到国内的网盘了

    (更多…)

  • Error: connect ETIMEDOUT

    应该是mariadb默认只允许本地连接,修改 /etc/mysql/mariadb.conf.d/50-server.cnf 文件

    然后将 bind-address 127.0.0.1 改成 0.0.0.0 然后重启mysql

    Error: ER_HOST_NOT_PRIVILEGED: Host ‘xxx’ is not allowed to connect to this MariaDB server

    这种是你登录的用户只允许本地连接

    USE mysql;
    SELECT user,host FROM user;
    
    // 这样可以看到你的用户和权限,把localhost改成你的ip或者改成 % 允许所有ip登录
    
    GRANT ALL PRIVILEGES ON *.* TO username@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;

    上面该权限的代码要注意 用户名 不用加单引号,%要加,密码要加

    参见 Configuring database connection results in Error: Host ‘xxxxxxx’ is not allowed to connect to this MySQL server – Atlassian Documentation


  • ubuntu18.04下安装的mariadb无法远程连接

    修改 /etc/mysql/mariadb.conf.d/50-server.cnf 文件

    bind-address 127.0.0.1中的地址改成0.0.0.0

    参考地址 https://www.digitalocean.com/community/questions/can-t-connect-to-mysql-server-on-ipaddress-10061


  • 推荐阅读:

    基础篇 – 其他基本操作 – 实验楼


    索引

    索引是存放在模式(schema)中的一个数据库对象,索引的作用就是提高对表的检索查询速度,索引是通过快速访问的方法来进行快速定位数据,从而减少了对磁盘的读写操作。

    索引类似于书籍的目录,可以快速定位到相关的数据,一个表可以有多个索引。

    //创建索引
    create index idx_temp_name on temp(name);
    //组合索引
    create index idx_temp_name$pwd on temp(name, pwd);
    //删除索引
    drop index idx_temp_name on temp;
    

    视图

    视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。

    //创建、修改视图
    create or replace view view_temp as select name, age from temp;
    //通常不对视图的数据做修改操作,因为视图是一张虚拟的表,它并不存储实际数据。如果想让视图不被修改,可以用with check option来完成限制。
    create or replace view view_temp as  select *from temp with check option;
    //删除视图
    drop view view_temp;
    //显示创建语法
    show create view v_temp;
    

    导入

    导入操作,可以把一个文件里的数据保存进一张表。导入语句格式为:

    LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
    

    导出

    导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。导出语句基本格式为:

    SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;
    

    备份

    mysqldump 是 MySQL 用于备份数据库的实用程序。它主要产生一个 SQL 脚本文件,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT 等。

    使用 mysqldump 备份的语句:

    mysqldump -u root 数据库名>备份文件名;   #备份整个数据库
    mysqldump -u root 数据库名 表名字>备份文件名;  #备份整个表
    

    恢复

    source /tmp/SQL6/MySQL-06.sql
    // 把备份的 bak.sql 恢复到 test 数据库:
    mysql -u root test < bak.sql
    

  • 本文用来总结,推荐阅读


    SELECT 语句用于从表中选取数据。

    结果被存储在一个结果表中(称为结果集)。

    用法:

    SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;
    

    可用*代替可输出所有的列

    数学符号条件

    where限制条件可加入数学符号=,<,>,>=,<=

    例如:

    SELECT * FROM sstud WHERE age>=25;
    SELECT * FROM sstud WHERE name='join';
    

    AND OR

    WHERE后面可以有不止一条限制,而根据条件之间的逻辑关系,可以用OR(||)AND(&&)连接:

    例如:

    SELECT * FROM sstud WHERE age>=23 AND age<=25 ;
    SELECT * FROM sstud WHERE age=23 OR age=25;
    SELECT * FROM sstud WHERE age BETWEEN 23 AND 25;
    

    IN 和 NOT IN

    INNOT IN表示在或不在。例如下面的语句用来查询在in_dpt是dpt3或dpt4中的数据。

    SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
    

    NOT IN相反,用来查询某值不为某值中的数据。

    通配符

    关键字LIKE在SQL语句中和通配符一起使用,通配符代表未知字符。SQL中的通配符是_%。其中_代表一个未指定字符,%代表不定个未指定字符。

    比如,要只记得电话号码前四位数为1101,而后两位忘记了,则可以用两个_通配符代替:

    SELECT name,age,phone  FROM employee WHERE phone LIKE '1101__';
    

    排序

    SQL可以使用ORDER BY关键词对表进行排序。默认情况下,ORDER BY的结果是升序排列,而使用关键词ASCDESC可指定升序或降序排序。

    比如,我们按salary降序排列,SQL语句为:

    SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
    

    内置函数和计算

    SQL 允许对表中的数据进行计算。对此,SQL 有 5 个内置函数,这些函数都对SELECT的结果做操作:

    函数名:COUNTSUMAVGMAXMIN
    作用:计数求和求平均值最大值最小值

    其中 COUNT 函数可用于任何数据类型(因为它只是计数),而 SUM 、AVG 函数都只能对数字类数据类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。

    select count(Code) FROM Car 查询Car表中有多少条数据
    select max(Price) FROM Car  取Car表中价格的最大值
    select min(Price) FROM Car  取Car表中价格的最小值
    select sum(Price) FROM Car  取Car表中价格的总和
    select avg(Price) FROM Car  取Car表中价格的平均值
    

  • 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。

    MYSQL中,常用的几种约束:

    | 约束类型: | 主键 | 默认值 | 唯一 | 外键 | 非空|
    | 关键字:| PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY | NOT NULL|

    默认约束

    默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。

    添加默认约束

    CREATE TABLE student(
      joinTime DATETIME DEFAULT CURRENT_TIMESTAMP
     );
    

    CURRENT_TIMESTAMP为当前时间

    主键约束

    主键约束列不允许重复,即任意两行的主键值都不相同;每行都具有一个主键值,也不允许出现空值;

    添加主键

    CREATE TABLE student(
      id INT PRIMARY KEY,
      name VARCHAR(20),
    )
    

    为已存在的表添加主键

    alter table user
    add primary key(id),
    modify id bigint(20) AUTO_INCREMENT;
    

    删除主键

    alter table user
    drop primary key,
    modify id bigint(20);
    

    外键约束

    外键用来指定参照完整性约束,被指定为外键的列必需要有索引,外键参考列必需为另一个表的主键。

    创建外键约束

    例如表user(id,username)和表article(id,uid,title),其中article.uid是外键指向user.id主键

    CREATE TABLE article (
      id bigint(20),
      uid bigint(20),
      PRIMARY KEY (id),
      CONSTRAINT fk_user_article_uid FOREIGN KEY (uid) REFERENCES user(id)
    );
    

    为没有外键约束的表添加外键约束

    alter table article
    add constraint fk_user_article_uid FOREIGN KEY(uid) REFERENCES user(id);
    

    删除外键

    例如删除article表的外键fk_user_article_uid

    alter table article
    drop foreign key fk_user_article_uid;
    

    唯一约束

    唯一约束的列的值不能重复,使用UNIQUE KEY关键字指定

    创建表时添加唯一约束

    create table user(
      id bigint(20) PRIMARY KEY AUTO_INCREMENT,
      email varchar(255) UNIQUE KEY
    );
    

    为已存在的表添加唯一约束

    alter table user
    add constraint uk_user_email UNIQUE KEY(email);
    

    删除唯一约束

    alter table user
    drop key uk_user_email;
    

    非空约束

    指定为非空的字段不能取NULL

    创建表时添加非空约束

    create table user (
      id bigint(20) PRIMARY KEY AUTO_INCREMENT,
      email varchar(255) NOT NULL
    );
    

    为已存在的表添加非空约束

    alter table user
    modify column email varchar(255);
    

  • 首先启动mysql服务并登陆

    mysql -u root
    

    使用show databases;查看所有的数据库

    创建数据库

    CREATE DATABASE mysql_data;
    

    mysql不区分大小写,但为了区分保留字,所以建议关键字使用全大写

    定位到某个数据库

    use mysql_data;
    

    显示该数据库下的数据表

    show tables;
    

    创建数据表

    CREATE TABLE table1 (
      rowa int(10),
      rowb char(20),
      rowc int(20)
    );
    

    数据类型

    数据类型大小(字节)用途格式
    INT4整数
    FLOAT4单精度浮点数
    DOUBLE8双精度浮点数
    ENUM单选,比如性别ENUM(‘a’,’b’,’c’)
    SET多选SET(‘1′,’2′,’3’)
    DATE3日期YYYY-MM-DD
    TIME3时间点或持续时间HH:MM:SS
    YEAR1年份值 YYYY
    CHAR0~255定长字符串
    VARCHAR0~255 变长字符串
    TEXT0~65535长文本数据

    插入数据

    显示该数据表下的所有数据

    SELECT * FROM table1;
    

    插入数据

    INSERT INTO table1(rowname) VALUES(value)
    

    或者直接

    INSERT INTO table1 VALUES(value, value2)
    

    一些数据类型需要用单引号括起来,一些数字类型则不用

    没有指定的列的值为NULL