分类 数据库 下的文章

小编今天在使用Sqlalchemy连接不同数据库,生成两个相同的表名的时候,出现了这样的错误Table 'XXX' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object。导致第二个表无法生成,下面小编说下解决办法:

给第二个表使用一个新的metadata
代码示例:

from sqlalchemy import MetaData
 
class A(db.Model):
    __tablename__ = 'A'
 
    ···
 
class A(db.Model):
    __bind_key__ = 'newdb'
    __tablename__ = 'A'
    metadata = MetaData()
 
    ···

小编目前也米有发现比较好的卸载方式,只能删除mysql的相关目录。

 sudo rm /usr/local/mysql

 sudo rm -rf /usr/local/var/mysql

 sudo rm -rf /usr/local/mysql*

 sudo rm -rf /Library/StartupItems/MySQLCOM

 sudo rm -rf /Library/PreferencePanes/My*

 vim /etc/hostconfig and removed the line MYSQLCOM=-YES-rm -rf ~/Library/PreferencePanes/My*

 sudo rm -rf /Library/Receipts/mysql*

 sudo rm -rf /Library/Receipts/MySQL*

 sudo rm -rf /var/db/receipts/com.mysql.*

小编今天装了个mysql5.7最后一步直接点击了OK,然后就没记住密码。小编在这里提供下重置mysql密码的方法。

  • 首先关闭mysql服务器

    sudo /usr/local/mysql/support-files/mysql.server stop
  • 进入mysql的bin目录

    cd /usr/local/mysql/bin
  • 获取root权限

    sudo su
  • 重启mysql服务器

    ./mysqld_safe --skip-grant-tables &
  • 退出,直接按command+D
  • 配置短命令

    alias mysql=/usr/local/mysql/bin/mysql
  • 连接数据库

    mysql
  • 切换数据库

    use mysql
  • 获取权限

    flush privileges;
  • 重置密码

    set password for 'root'@'localhost'='root'('新密码');

    好了,大功告成,退出mysql,重新用新密码登录就可以了。

小编今天再给表加字段的时候,发现数据库报错,总是不能加入数据显示(Errcode: 28 - No space left on device), Time: 0.102000s这么一个错误。空间已满,这种情况一般是由于某个程序的日志较多造成的。
我们执行df -lh。查看写磁盘情况,发现/dev/vda1 40G 38G 0 100% /
达到了100%。
我们再执行du -sh /* .就可以发现哪个文件夹内容较多了。然后我们就可以一级一级的执行该方法,知道找到最终的日志文件就可以了。然后清理下我们不需要的日志文佳,数据库就正常了。

首先我们先来了解下spu和sku这两个的概念。
spu:指的是商品,spu属性就是不会影响到库存和价格的属性, 又叫关键属性,与商品是一对一的关系。
sku:指的是具体规格单品,sku属性就是会影响到库存和价格的属性, 又叫销售属性,与商品是多对一的关系。
我们就拿小米9来举例子
小米9
机身颜色:全息幻彩蓝,深空灰,全息幻彩紫
存储容量:6+128G,8+128G,8+256G
spu就是指商品:小米9
sku就是指具体规格单品:全息幻彩蓝 8+128G等
sku一共有33=9个(机身颜色种类存储容量种类)

下面我们来设计模型
一般情况下我们使用5张表就可以解决基本的需求了:

  • 商品分类表:category
  • 商品表(即:spu表):product
  • 商品规格表(即:sku表):product_specs
  • 属性key表:attribute_key
  • 属性value表:attribute_value

商品分类表:category

  • 该表主要是描述商品的分类。
  • 属性:id,parent_id,name等

商品表(即:spu表):product

  • 存储商品信息
  • 属性:id,category_id,name,attribute_lise等

商品规格表(即:sku表):product_specs

  • 存储商品的具体规格单品,即sku
  • 属性:id,product_id,product_specs等

属性key表:attribute_key

  • 用于存储sku的属性,比如:机身颜色,存储容量

属性value表:attribute_value

  • 用于存储sku的属性值,比如:6+128G,8+128G,8+256G

启动 Redis

redis-server

查看 redis 是否启动(链接redis):

redis-cli

出现下面内容:
redis 127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 ping 命令。
也就是:

redis 127.0.0.1:6379> ping
PONG

这就说明我们安装成功了。

操作远程redis: redis-cli -h host -p port -a password

redis支持5中数据类型

string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

出现这种情况首先检查你的SQL是否存在问题,确定没有问题的话,就是Mysql可能正在执行其他消耗资源的操作,在确保不会影响业务的情况下我们可以杀掉正在执行的任务。

  • 查看正在执行的任务:show full processlist; 可能会显示很多,不确定是哪一个的时候就全部停止。
  • 停止正在执行的任务:kill processid;processid就是刚才查出来的。

如果这样还是不能解决问题,那么你可以试着重启下mysql,这样所有的任务就会停止了。

  • linux的重启mysql命令:

    • 使用 service 启动:service mysql restart
    • 使用 mysqld 脚本启动:/etc/inint.d/mysql restart
  • windows的重启mysql

    • 停止MySQL:net stop mysql
    • 启动MySQL:net start mysql

mysql.jpeg

小编今天帮朋友解决了一个数据库出现了一个数据库时区的错误问题:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time
解决办法:
控制台执行以下命令

show variables like '%time_zone%';
set global time_zone='+8:00';

最近小编帮以好友解决了一个Mysql8.0版本安装之后出现MySQL服务无法启动请键入 NET HELPMSG 3534 以获得更多的帮助,下面小编把解决办法与大家分享一下。
因为不是出现的:服务名无效。的错误也就表明现在的服务已经属于系统服务了,不是环境变量的问题。小编就打开了mysql的安装目录,然后发现没有data文件夹以及my.ini文件。下面小编就给出相应的解决办法:

  1. 没有文件夹以及里面的内容。
    解决办法:

    • 以管理员的身份打开dos窗口;
    • 切换到mysql的bin目录里面;
    • 以此执行下面的命令:
    • 卸载服务:mysql -remove
    • 安装服务:mysql --initialize-insecuremysql -install
  2. 没有my.ini文件
    解决办法:

    • 新建my.ini文件
    • 输入以下内容(记得修改路径):
         [client]
         port=3306
         [mysql]
         default-character-set=utf8
    
         [mysqld]
         port=3306
         # 设置mysql的安装目录
         basedir="E:/MySQL/"
         # 设置mysql数据库的数据的存放目录
         datadir="E:/MySQL/data/"
         character-set-server=utf8
         default-storage-engine=MyISAM
         #支持 INNODB 引擎模式。修改为 default-storage-engine=INNODB 即可。
         #如果 INNODB 模式如果不能启动,删除data目录下ib开头的日志文件重新启动。
    
         sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
         max_connections=512
    
         query_cache_size=0
         table_cache=256
         tmp_table_size=18M
    
         thread_cache_size=8
         myisam_max_sort_file_size=64G
         myisam_sort_buffer_size=35M
         key_buffer_size=25M
         read_buffer_size=64K
         read_rnd_buffer_size=256K
         sort_buffer_size=256K
    
         innodb_additional_mem_pool_size=2M
    
         innodb_flush_log_at_trx_commit=1
         innodb_log_buffer_size=1M
    
         innodb_buffer_pool_size=47M
         innodb_log_file_size=24M
         innodb_thread_concurrency=8
         innodb_thread_concurrency=8
         innodb_thread_concurrency=8
         innodb_thread_concurrency=8
         innodb_thread_concurrency=8
    

delete删除的时候是一条一条的删除记录,它配合事务,可以将删除的数据找回。而且delete删除数据后,拥有自动增长约束的字段,将会自动增长,不会从1继续增长,而是继续以前的。
truncate删除,它是将整个表摧毁,然后再创建一张一模一样的表。它删除的数据无法找回。而且truncate删除数据后,拥有自动增长约束的字段,将会从1自动增长。