常用命令
1 | # 打包: |
IDEA集成
POM 文件中 alt+insert快捷键,选择dependence选项,方便关键字快捷搜索所需库
Scope
- 默认是compile类型,不写或特殊指定即是默认
- 运行环境类型的依赖,基本都是provided ,仅用于编译通过及查看源码,不用打进包里,实际的类在环境中已经有。
1 |
|
如果连接远端 Mysql报 - Host ‘xxx.xx.x.x‘ is not allowed to connect to this MySQL server
,这是数据库操作权限问题,可以通过
1 | mysql -u root -proot |
查看所有数据库: show databases;
创建数据库: create database if not exists 数据库名;
删除数据库: drop database if exists 数据库名;
查看当前使用的数据库: select database();
选择数据库:use 数据库名;
查询当前数据库下(use 选定数据库)
查看所有表:show tables;
查看某一特定表结构信息:desc table1
table1 为表名,desc 即description含义。
创建表:
1 | create table 表名(字段名1 数据类型1,字段名2 数据类型2); |
char(0~255 bytes),当username 如果小于20字符,仍然占20个字符,当大于20个字符时,则报错。
因为常见固定长度,所以存储性能高,但浪费空间。
varchar(0~65535 bytes),当username 如果小于20字符,只占实际字符.大于也同样报错。性能差点,但节约空间。
删除表:drop table if exists 表名;
改表名:alter table 表名 rename to 新表名;
新增列:alter table 表名 add 列名 数据类型(字段名约束);
新增多列:ALTER table 表名 add CLOUMN 数据类型(字段名约束) AFTER 想放的字段名后面如果需要;
1 | -- int(11)只影响int的显示位数(跟数据库客户端有关),不影响它所占空间大小和所能存储的数值范围。且11代表的不是2进制下几位,而是10进制下几位 |
修改数据类型:alter table 表名 modify 列名 新数据类型;
修改列名和数据类型:alter table 表名 change 列名 新列名 新数据类型;
删除列:alter table 表名 drop 列名;
// TODO Navicat or DBeaver
给指定列添加数据: insert into 表名(列名1,列名2,...) values(值1,值2...);
给全部列添加数据: insert into 表名 values(列名1,列名2,...);
批量添加数据:
1 | insert into 表名(列名1,列名2,...) values(值1,值2...),(值1,值2...),(值1,值2...)...; |
删除: delete from 表名 [where 条件];
修改表数据: update 表名 set 列名1=值1,列名2=值2,...[where 条件];
非空约束:NOT NULL
唯一约束:UNIQUE
主键约束(自带非空且唯一):PRIMARY KEY
默认约束:DEFAULT
(不能传值,才为默认值,即使传null也会为null)
外键约束:FOREIGN KEY
检查约束:CHECK
(Mysql不支持)
//当列算是数字类型并且唯一约束 可以添加auto_increment
,即使传null也会自动自增
1 | -- 删除主键 |
1 | -- 创建表时添加外键约束 |
外键永远放于多的那边关联另一方
一对一:用于拆分表,经常用的放一张,不经常的放另外一张。其实就是简化版的一对多(多对一),
只需要将外键列多加个UNIQUE
约束
多对多:借助第3张中间表,中间2列(或多列)外键指向2张或多张主表主键,中间表还可以添加一些额外字段.
1 | -- 隐式内连 |
1 | -- 左外连(交集+左表) |
单行单列:SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询)
多行查询:SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询)
多行多列:SELECT 字段列表 FROM (子查询) WHERE 条件
1 | -- 开启事务 |
查询事务的默认提交方式:select @@autocommit; -- 1则是默认自动提交
修改默认提交方式:set @@autocommit = 0;
Mysql下载地址,以apt为例,下载对应版本后
1 | sudo apt-get install ./mysql-apt-config_0.8.24-1_all.deb |
在 Debian 系统中,使用 apt 命令安装 MySQL 服务器时,默认情况下 MySQL 的二进制文件、配置文件、数据文件等内容会安装在以下目录:/usr/bin
目录包含 MySQL 的客户端程序,如 mysql
等.MySQL 的环境变量和其他配置通常都已经在安装时自动配置好了。Windowns需要手动增加安装目录/bin
至环境变量
MySQL 在 Windows 和 Debian 系统中的配置文件格式和位置略有不同。以下是它们的具体区别:
在 Windows 中,MySQL 的配置文件名为 my.ini
。该文件通常位于 MySQL 安装目录下的 bin 子目录中。Windows 版本的 MySQL 的默认配置文件相对比较简单,只包含了少量的配置参数,如端口号、数据文件位置等。
在 Debian 系统中,MySQL 的配置文件名为 my.cnf
。该文件通常位于 /etc/mysql
目录下。与 Windows 版本相比,Debian 版本的 MySQL 的默认配置文件包含了更多的配置参数,如字符集、日志等级等。
此外,在 Debian 中,MySQL 还使用了一个名为 debian.cnf 的辅助配置文件,该文件包含了与 Debian 发行版相关的配置参数。
如果my.cnf
中有类似 !includedir /etc/mysql/conf.d/
的语句,则表明会去读取这个文件夹下的.cnf
配置文件来合并生成Mysql的配置,并且如果有相同配置项,以这些对应文件夹下的.cnf
为准(覆盖my.cnf
配置)
无论是在 Windows 还是 Debian 系统中,都可以使用文本编辑器打开配置文件,并根据需要进行修改。修改后,需要重启 MySQL 服务器才能使更改生效。
需要注意的是,MySQL 配置文件中的参数数量和名称可能会因 MySQL 的版本和安装方式而有所不同。您可以在 MySQL 官方文档中找到适合您版本和环境的配置文件文档,并根据文档中的说明进行配置。例如:
1 | [mysql] |
mysqld --initialize-insecure
和 mysql_secure_installation
是两个 MySQL 服务器安装和初始化的命令,它们的作用和使用场景略有不同。mysqld --initialize-insecure
是用于初始化 MySQL 数据库的命令。它可以在没有现成的 MySQL 数据库的情况下创建一个新的空数据库,并生成一个初始的 root 用户账号和密码,以供用户进行管理和操作。--initialize-insecure
选项表示该命令会创建一个没有密码的 root 用户账号,因此不会提示您输入密码,安全性较低。
mysql_secure_installation
是用于在已经安装好 MySQL 服务器的情况下对其进行安全配置的命令。该命令将提示用户进行一系列安全性设置,包括设置 MySQL root 用户的密码、删除测试数据库、禁止远程 root 登录等,从而提高 MySQL 服务器的安全性。
因此,如果您是第一次安装 MySQL 服务器,可以使用 mysqld --initialize-insecure
命令初始化 MySQL 数据库,并使用生成的 root 用户账号进行管理和操作。如果您已经安装好 MySQL 服务器,并且希望提高其安全性,请使用 mysql_secure_installation 命令进行安全性设置。
注册服务
mysqld --install
命令将 MySQL 注册为服务。执行以下命令即可:mysqld --install
该命令将安装 MySQL 服务,并自动将其添加到 Windows 服务列表中。mysqld --remove
sudo systemctl enable mysql
sudo systemctl disable mysql
启动服务(仅需在注册后第一次进行手动启动即可,后面都会因为4中,自动启动)
net start mysql
net stop mysql
sc query mysql
sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
sudo systemctl status mysql
sudo mysqld --help --verbose --no-defaults
设置admin密码: mysqladmin -u root password 1234
. Linux在apt安装时可能已经设置,则可不操作。 windows如果采用mysqld --initialize-insecure
命令初始化,此时需要设置下密码
登录 mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
eg:mysql -uroot -p1234
,退出exit
1 | $ hexo clean |
删除缓存 (db.json和生成的public文件)
More info: Clean
1 | $ hexo new "xxx" |
然后就会在 {hexo目录}/source/_posts生成xxx.md文件 eg: hexoBlog/source/_posts
More info: Writing
1 | $ hexo g |
生成对应静态文件
More info: Generating
1 | $ hexo s |
启动hexo服务器本地预览,打开 http://localhost:4000 即可查看效果
More info: Server
1 | $ hexo d |
发布到远端,以发布到github为例
npm install hexo-deployer-git --save
More info: Deployment
在过去的几年里,跨平台开发技术层出不穷,例如React Native、Flutter和Xamarin等。这些技术都试图解决在多个平台上共享代码的问题,以提高开发效率和降低维护成本。 然而,它们各自都有一定的优缺点:
React Native:基于JavaScript与原生组件映射调用,拥有庞大的社区支持,可实现较高的代码复用率。但JavaScript性能相较于原生开发略低(新架构仍未正式发布),且受原生组件平台特性和API的支持方面局限。
Flutter:使用Dart语言,拥有独特的UI框架,可以快速构建美观的界面。但是,它的生态系统相对较小,一些特定平台的功能可能需要编写原生代码。
Xamarin:基于C#,可以实现较高的代码复用率。然而,它的开发环境和工具相对较重,可能导致开发和调试过程中的困扰。
KMM的诞生离不开它的“母语”——Kotlin。Kotlin是一种基于JVM(Java虚拟机)的现代编程语言,旨在提供更简洁、安全和高效的代码编写体验。自2017年Google将Kotlin宣布为Android官方开发语言以来,Kotlin已在全球范围内迅速获得了广泛的认可和应用。
Kotlin团队也在积极推动多平台化, 2017年11月发布的Kotlin 1.2中,引入了实验性Kotlin Multiplatform Project(KMP),同时支持server(Java),web(JS),desktop,苹果系列(macOS,tvOS,watchOS,iOS)及android.
KMM(Kotlin Multiplatform Mobile)则相当于是KMP的在移动端(iOS及android)上的支持.
KMM通过Kotlin/Native编译器生成平台特定的二进制文件。对于iOS平台,Kotlin/Native将Kotlin代码转换为LLVM中间表示(Intermediate Representation,简称IR),然后编译为与Objective-C和Swift兼容的二进制文件(.o->.framework)。
对于Android来说就是.class字节码文件(jar->dex)。通过这种方式,KMM实现了在保留原生UI和性能优势的同时,在不同平台上共享业务逻辑代码。开发者可以在共享代码和平台特定代码之间灵活切换,根据项目需求进行调整,充分利用KMM的优势。
简单来说,就是编译器魔法,然后走各自平台的打包流程,与原生无异。所以KMM与原生有一摸一样的优缺点,但是共用了逻辑层.
1.我们可以通过在AndroidStudio选择安装官方提供的Kotlin Multiplatform Mobile
插件即可方便地创建KMM工程。
2.安装完插件后,打开Android Studio,选择Create New Project –> 在项目向导中选择KMM Application,点击Next –> 输入项目名称(如KMMdemo)和包名,然后点击Finish,即完成项目创建。
工程分层及项目结构如下:
从项目结构及目录上可以看出KMM与其它跨平台技术不一样,它更侧重同一的逻辑层,同时在逻辑层上提供对应平台目录,提供用户需要的平台特性自定义拓展。UI层开发者使用各自平台的原生UI体系。
由于Kotlin已经是Android官方推荐语言,所以KMM在Android端支持就不再赘述.
AFNetworking
,则可以在shared下的build.gradle文件下通过cocoapods
节点引入,代码如下1 | cocoapods { |
1 | package com.wonder.kmmdemo |
1 | package com.wonder.kmmdemo |
1 | package com.wonder.kmmdemo |
com.wonder.kmmdemo.getPlatform().name
即可实现统一跨平台调用.Kotlin Multiplatform is in Beta. It is almost stable, but migration steps may be required in the future. We'll do our best to minimize any changes you have to make.
通过以上分析我们可以发现,其实KMM目前相当于只实现了半跨平台(即仅在UI层实行统一共用).但通过特性及拓展支持,我们可以预见它完全有能力实现全跨平台支持(即剩余的UI层支持),个人觉得至少有2种方式,可以采用像RN一样的原生平台映射方式(但会受各自平台特性,UI风格,设备版本差异等影响),也可以采用像Flutter一样,重新定义一套UI架构,提供统一的新的API。
Kotlin团队明显选择了后者,他直接使用了Google jetpack compose作为对上层提供的新UI层API,然后添加iOS平台实现,从而达到跨平台UI效果,于是Compose Multiplatform横空出世,补齐了KMM跨平台最后一块版图。
于是项目结构就可以变为
目前为止Compose Multiplatform于今年4月14日发布alpha版(主要是iOS平台,android及desktop已经为稳定版)
并计划于明年发布稳定版,个人觉得beta版,应该今年内可完成
由于篇幅所限,届时如有机会将另起一篇为小伙伴们介绍Compose Multiplatform.