有关数据库的DML操作
-insert into
-delete、truncate
-update
-select
-条件查询
-查询排序
-聚合函数
-分组查询
1.约束是在表上强制执行的数据检验规则,约束主要用于保证数据库的完整性。
2.当表中数据有相互依赖性时,可以保护相关的数据不被删除。
3.大部分数据库支持下面五类完整性约束:
- NOT NULL非空
- UNIQUE Key唯一值
- PRIMARY KEY主键
- FOREIGN KEY外键
- CHECK检查
4.约束作为数据库对象,存放在系统表中,也有自己的名字
5.创建约束的时机:
-在建表的同时创建
-建表后创建(修改表)
6.有单列约束和多列约束
列级约束直接跟在列后面定义,不再需要指定列名,与列定义之间用空格分开
表级约束通常放在所有的列定义之后定义,要显式指定对哪些列建立列级约束,与列定义之间采用英语逗号,隔开
如果是对多列建联合约束,只能使用表级约束语法
SQL——结构化查询语言(Structured Query Language)
SQL语言不区分大小写,建议关键字用大写,但是字符串常量区分大小写
字符集
1 | character_set_client:服务器将系统变量character_set_client作为客户端发送语句时使用的字符集。 |
MySQL5.7的默认字符集character和排序字符集collation
1 | mysql> show variables like '%character%'; |
MySQL8.0的默认字符集
1 | mysql> show variables like '%character%'; |
查看mysql table字段的字符集
MySQL5.7
1 | mysql> create table user |
或者
1 | mysql > CREATE TABLE IF NOT EXISTS `t_user` (`username` varchar(64) NOT NULL,`password` varchar(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
MySQL8.0
1 | mysql> CREATE TABLE IF NOT EXISTS `t_user123` (`username` varchar(64) NOT NULL,`password` varchar(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
utf8(别名utf8mb3)utf8 是 MySQL 早期版本使用的字符集,它实际上是 UTF-8 的一种实现,只支持最多 3 字节来存储一个字符。utf8 是 utf8mb3 的别名。从 MySQL 8.0.28 版本开始,utf8 已经被明确标识为 utf8mb3,但在此之前,它们是同义的。utf8适用于大多数情况,但不能用于需要存储 4 字节 UTF-8 字符的场景(如表情符号)。
utf8mb4 是 MySQL 完整实现的 UTF-8 字符集,支持最多 4 字节来存储一个字符。支持所有 Unicode 字符,包括所有表情符号和扩展字符。
utf8mb4_general_ci 的 ci 表示 case-insensitive,即不区分大小写。
utf8mb4_bin 的 bin 表示 binary,这种排序规则是区分大小写的。
将字段类型修改成可区别大小写
1 | CREATE TABLE your_table_name (column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin); |
在创建表的时候指定可区别大小写
1 | CREATE TABLE user ( |
如果想区分case insensitive的字段,也可以使用binary函数将其转换成大小写敏感的,如下
1 | select * from user where binary username = 'mlinnockax' |
1 | SHOW DATABASES[LIKE wild]; |
语法:CREATE DATABASE[IF NO EXISTS]
confleunt提供了一些方法,可以将protobuf schema转换成avro schema,用于支持将kafka protobuf序列化的message落盘成avro格式的文件
1 | <repositories> |
定义一个protobuf schema
1 | syntax = "proto3"; |
编译java代码
1 | protoc -I=./ --java_out=./src/main/java ./src/main/proto/other.proto |
得到schema的java代码
confluent schema registry在处理处理protobuf,avro,json格式的数据的时候,会统一先将其转换成connect schema格式的数据,然后再将其写成parquet,avro等具体的文件格式
1 | import com.acme.Other; |
转换的avro schema输出如下
1 | { |
注意:confluent在具体实现的时候,比较严谨,在protobuf的uint32(0 到 2^32 -1)的时候,会统一转换成long(-2^63 ~ 2^63-1),不会出现越界的情况,参考源码
1 | https://github.com/confluentinc/schema-registry/blob/v7.1.1/protobuf-converter/src/main/java/io/confluent/connect/protobuf/ProtobufData.java#L1485 |
转换实现参考源码
1 | https://github.com/confluentinc/schema-registry/blob/v7.1.1/avro-data/src/test/java/io/confluent/connect/avro/AdditionalAvroDataTest.java |
hive client安装文档
1 | https://cwiki.apache.org/confluence/display/Hive/GettingStarted |
hive 配置官方文档
1 | https://cwiki.apache.org/confluence/display/hive/configuration+properties |
hive 配置中文文档
1 | https://www.docs4dev.com/docs/zh/apache-hive/3.1.1/reference/Configuration_Properties.html |
Hive学习笔记——执行计划
使用DatumWriter和DatumReader对avro进行序列化和反序列化
1 | public static <T> byte[] binarySerializable(T t) { |
使用Twitter 的 Bijection 类库来实现avro对象的序列化和反序列化
参考:Kafka 中使用 Avro 序列化框架(二):使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化
1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法。
即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet。
方法:
创建一个TestObject.java
在web.xml中的
再创建一个TestObject2.java,然后在web.xml中写
1>在Servlet的配置文件中,可以使用一个或多个
hexo的github主页地址: Hexo_Github
Markdown的中文语法: Hexo_Docs
可以通过在启动命令中添加
1 | --remote-debugging-port=9222 |
来开启chrome的debug端口,这样就可以通过这个端口来获取或者操作chrome,如下
macos
1 | /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 |
linux
1 | google-chrome --remote-debugging-port=9222 |
windows
1 | 右键点击 Chrome 的快捷方式图标,选择属性 |
可以打开另一个chrome浏览器B来监控开启了debug端口的chrome浏览器A
在Chrome浏览器B中打开
1 | chrome://inspect/#devices |
将其中的端口设置成开启了debug模式的chrome浏览器B的端口
这样就可以在浏览器A中看到浏览器B的浏览记录
1 | chrome://inspect/#pages |
也可以使用selenium来连接开启了debug端口的chrome
参考:Python爬虫——使用selenium和chrome爬取js动态加载的网页
如果想获取chrome用户的cookie的话,需要指定chrome的用户目录,如下
1 | /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=/Users/xxx/Library/Application\ Support/Google/Chrome |
vscode设置chrome远程调试
在控制台的启动栏那一栏右键,选中瀑布,可以添加waterfall用于查看接口和资源的请求和响应时间