key number
oracle中constraint用法

oracle中constraint用法Oracle中Constraint用法在Oracle数据库中,Constraint(约束)是用于限制表中数据的完整性的规则。
它可以帮助我们保持数据的准确性和一致性。
下面是一些常用的Constraint用法。
1. NOT NULL Constraint(非空约束)NOT NULL约束用于确保某一列的值不为空。
当试图插入或更新该列中的值时,如果为空,则会触发一个错误。
示例:CREATE TABLE students (id NUMBER PRIMARY KEY,name VARCHAR2(50) NOT NULL,age NUMBER);2. UNIQUE Constraint(唯一约束)UNIQUE约束用于确保某一列中的值是唯一的,即不重复。
这可以用于避免重复数据的插入。
示例:CREATE TABLE employees (id NUMBER PRIMARY KEY,email VARCHAR2(50) UNIQUE,phone VARCHAR2(20),...);3. PRIMARY KEY Constraint(主键约束)PRIMARY KEY约束用于定义一列或一组列作为表的主键,主键的值在表中必须是唯一的,并且不能为空。
示例:CREATE TABLE customers (id NUMBER PRIMARY KEY,name VARCHAR2(50),email VARCHAR2(50),...);4. FOREIGN KEY Constraint(外键约束)FOREIGN KEY约束用于定义与其他表之间的关联关系,确保数据的一致性。
一个表的外键关联到另一个表的主键。
示例:CREATE TABLE orders (id NUMBER PRIMARY KEY,customer_id NUMBER,...CONSTRAINT fk_orders_customers FOREIGN KEY (customer_i d)REFERENCES customers(id));5. CHECK Constraint(检查约束)CHECK约束用于限制一列中的值必须满足特定的条件。
MFC计算器实现步骤和代码

MFC计算机程序步骤:1. 在进入VC++的第一个界面下,选择MFC AppWizard(exe),并设置工程名机器所在位置。
2. 在MFC AppWizard—step1 中选中Dialog based 选项,建立一个基于对话框的程序框架。
3. 使用资源编辑器建立对话框4. 编辑其中的各个控件的属性5. 插入菜单资源并编辑各项属性各属性为:Caption + * / ClearID ID_ADD_MENU ID_DIFFERENCE _MENU ID_MULTIPL Y_MENU ID_DEVIDE_MENU ID_CLEAR_MENUAbout ExitID_ABOUT_MENU ID_EXIT_MENU6. 添加代码使用Class Wizard 给编辑框连接变量(1)实现基本的加、减、乘、除的代码的添加。
(2)添加与菜单相关联的代码(3)填添加与滚动条相关联的代码在MFC AppWized(exe)项目下做。
界面自己做1.在对话框的头文件CalculatorDlg.h中添加#include<math.h>2.为CCalculatorDlg类添加成员数据和成员函数double number1,number2;int NumberState,OperationState;void cal();并在CCalculatorDlg类的构造函数中增加NumberState=1;3.添加消息按钮afx_msg void OnNumberKey(UINT nID);afx_msg void OnOperationKey(UINT nID);4.在CalculatorDlg.cpp文件中BEGIN_MESSAGE_MAP(CMy1Dlg, CDialog)和END_MESSAGE_MAP()间添加代码ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER10,OnNumberKey)ON_COMMAND_RANGE(IDC_NUMBER11,IDC_NUMBER20,OnOperationKey)5.为成员函数OnNumberKey和OnOperationKey添加代码void CCalculatorDlg::OnNumberKey(UINT nID){int n=0;switch(nID){case IDC_NUMBER1:n=1;break;case IDC_NUMBER2:n=2;break;case IDC_NUMBER3:n=3;break;case IDC_NUMBER4:n=4;break;case IDC_NUMBER5:n=5;break;case IDC_NUMBER6:n=6;break;case IDC_NUMBER7:n=7;break;case IDC_NUMBER8:n=8;break;case IDC_NUMBER9:n=9;break;case IDC_NUMBER10:n=0;break;}if(NumberState==1){m_result=m_result*10+n;number1=m_result;UpdateData(FALSE); // 更新编辑框中的值}else{m_result=m_result*10+n;number2=m_result;UpdateData(FALSE);}}void CCalculatorDlg::OnOperationKey(UINT nID){switch(nID){case IDC_NUMBER13: // "/"按钮OperationState=1;UpdateData(FALSE);m_result=0;NumberState=2;break;case IDC_NUMBER14: // "*"按钮OperationState=2;UpdateData(FALSE);m_result=0;NumberState=2;break;case IDC_NUMBER15: // "+"按钮OperationState=3;UpdateData(FALSE);m_result=0;NumberState=2;break;case IDC_NUMBER16: // "-"按钮OperationState=4;UpdateData(FALSE);m_result=0;NumberState=2;break;case IDC_NUMBER17: // "C"按钮,撤消用,不需要可以删除number1=number2=m_result=0;UpdateData(FALSE);NumberState=1;break;case IDC_NUMBER20: // "="按钮cal(); // 调用cal成员函数break;}}6.为成员函数cal()添加代码void CCalculatorDlg::cal(){switch(OperationState){case 1:m_result=(double)number1/number2;UpdateData(FALSE); // 更新编辑框中的结果number1=m_result; // 把此次的运算结果作为下一次运算的第一个操作数NumberState=2; // 下次输入的数作为第二个操作数break;case 2:m_result=number1*number2;UpdateData(FALSE); // 更新编辑框中的结果number1=m_result;NumberState=2;break;case 3:m_result=number1+number2;UpdateData(FALSE); // 更新编辑框中的结果number1=m_result;NumberState=2;break;case 4:m_result=number1-number2;UpdateData(FALSE); // 更新编辑框中的结果number1=m_result;NumberState=2;break;}OperationState=0;} 注意按钮的ID号要和程序中的ID号相同!!!!。
Lesson 6 Dial the wrong number(6)

Key Sentences
17.I'd like to make a collect call to Japan. 我要打对方付费的电话到日本。 18.Country code 81,area code 138,and the number is 864-8972. 国码是81,区域号码是138,电话号码是 864-8972。
Dialogue C
(A:Mrs. Charles B:Clerk) A:Hello.This is Mrs.Charles.I'd like to buy a new car.Could you offer me a new type of the car,please? B:Oh,Madam,buy what? A:A new car.And I've got a small family,two children, and I haven't got a lot of money and… B:Oh,oh,Madam,Madam.I'm afraid you have the wrong number. A:Isn't this the car store? B:No.It's Mike's Sporting Goods. A:Oh,sorry.Do you know the number for a car store, then? B:No.I don't.I suggest you look in the phone book. A:I'm sorry to have bothered you. B:No problem.
Key Sentences
7.What number are you trying to dial? 你要的电话是什么号码? 8.I'd like to make a person-to-person call to Beijing,China. 我想打一个通到中国北京的叫人电话。
公钥密码基础设施应用技术体系 基于SM2算法的密钥服务协议标准

2008-××-××发布 2008-××-××实施发布 ICS xx.xxx.xx Lxx中华人民共和国国家标准 GB/T XXXXX —200×公钥密码基础设施应用技术体系 基于ECC 算法的密钥服务协议标准Public Key Infrastructure Application Technology KeyService Message Syntax Standard Based SM2(草稿)红色部分需要进一步讨论国家质量监督检验检疫总局发布目次前言 (II)引言 (III)1 范围 (4)2 规范性引用文件 (4)3 术语和定义 (4)4 符号和缩略语 (4)5 有用的类型 (5)5.1 Version (5)5.2 EntName (5)5.3 DataEnvelope (5)5.4 CertificateSerialNumber (6)5.5 AlgorithmIndentifier (6)5.6 SubjectPublicKeyInfo (6)5.7 GeneralName (6)5.8 PKIFreeText (6)5.9 AppUserInfo (6)5.10 RetKeyRespond (7)6 通用语法 (7)7 CA请求 (8)7.1 ApplyKeyReq密钥申请请求 (9)7.2 RestoreKeyReq密钥恢复请求 (10)7.3 RevokeKeyReq密钥撤销请求 (10)8 KM响应 (10)8.1 ApplykeyRespond密钥申请响应 (11)8.2 RestorekeyRespond密钥恢复响应 (11)8.3 RevokekeyRespond密钥撤销响应 (11)8.4 ErrorPkgRespond 出错响应 (12)9 承载协议 (12)10 通讯安全 (12)I本标准是《公钥密码基础设施应用技术体系框架规范》系列规范之一。
链路聚合配置命令

目录1 链路聚合配置命令................................................................................................................................ 1-11.1 链路聚合配置命令............................................................................................................................. 1-11.1.1 description .............................................................................................................................. 1-11.1.2 display lacp system-id ............................................................................................................ 1-21.1.3 display link-aggregation member-port.................................................................................... 1-21.1.4 display link-aggregation summary.......................................................................................... 1-41.1.5 display link-aggregation verbose............................................................................................ 1-51.1.6 enable snmp trap updown...................................................................................................... 1-71.1.7 interface bridge-aggregation .................................................................................................. 1-81.1.8 lacp port-priority...................................................................................................................... 1-81.1.9 lacp system-priority................................................................................................................. 1-91.1.10 link-aggregation mode........................................................................................................ 1-101.1.11 port link-aggregation group ................................................................................................ 1-101.1.12 reset lacp statistics............................................................................................................. 1-111.1.13 shutdown ............................................................................................................................ 1-111 链路聚合配置命令●本手册中提到的三层以太网接口是指已经被配置为路由模式的以太网端口,有关以太网端口模式切换的操作,请参见接入分册的“以太网端口”部分。
数据一致性算法

数据⼀致性算法最近⼯作中遇到了数据⼀致性问题,为⽅便以后使⽤,特学习记录⼀下:⽬前遇到现象:(1)缓存与数据库数据不⼀致情况(2)分布式系统中各节点数据不⼀致情况原因:并发情况下,执⾏顺序会引起写请求和读请求拿到的数据不⼀致,导致脏读、幻读等。
解决⽅案:(1)针对本地缓存与数据库数据不⼀致问题,可以通过先更新数据库后删除缓存+读写分离来解决,具体可参考另⼀篇⽂章《》<1>缓存失效<2>请求A读缓存失败,读数据库<3>请求A写缓存<4>请求B写数据库,删除缓存<5>下个请求读缓存失败,写缓存为什么不会出现3/4步骤对调的情况,主要是数据库的读操作远快于写操作且读写分离的⼀个实现。
如果还有担⼼会对调可⽤消息中间件进⾏处理。
(2)针对分布式数据不⼀致问题,⼀致性哈希算法,将数据存储在不同的机器上原理1)⼀致性哈希将整个哈希值空间组织成⼀个虚拟的圆环,如某哈希函数H的值空间为0-2^32-1(即哈希值是⼀个32位⽆符号整形),整个哈希空间环起点和终点分别是0和2^32-1。
2)空间制定:整个空间按顺时针⽅向组织。
0和232-1在零点中⽅向重合。
3)服务器节点位置:将分布式各个服务器使⽤Hash进⾏⼀个哈希,具体可以选择服务器的ip或主机名作为关键字进⾏哈希,这样每台机器就能确定其在哈希环上的位置。
数据倾斜问题优化:可对每个服务器进⾏多个hash以保证机器节点的均衡分布。
4)数据节点位置:将数据key使⽤相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针“⾏⾛”,第⼀台遇到的服务器就是其应该定位到的服务器。
实操1. hash值计算:通过⽀持MD5与MurmurHash两种计算⽅式。
2. ⼀致性的实现:通过java的TreeMap来模拟环状结构,实现均匀分布 1.hash计算⽅法:MD5import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** 实现⼀致性哈希算法中使⽤的哈希函数,使⽤MD5算法来保证⼀致性哈希的平衡性*/public class HashFunction {private MessageDigest md5 = null;public long hash(String key) {if (md5 == null) {try {md5 = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {throw new IllegalStateException("no md5 algrithm found");}}md5.reset();md5.update(key.getBytes());byte[] bKey = md5.digest();//具体的哈希函数实现细节--每个字节 & 0xFF 再移位long result = ((long) (bKey[3] & 0xFF) << 24)| ((long) (bKey[2] & 0xFF) << 16| ((long) (bKey[1] & 0xFF) << 8) | (long) (bKey[0] & 0xFF));return result & 0xffffffffL;}}2.环的定义for (int i = 0; i < numberOfReplicas; i++) {// 对于⼀个实际机器节点 node, 对应 numberOfReplicas 个虚拟节点/** 不同的虚拟节点(i不同)有不同的hash值,但都对应同⼀个实际机器node* 虚拟node⼀般是均衡分布在环上的,数据存储在顺时针⽅向的虚拟node上*/circle.put(hashFunction.hash(node.toString() + i), node);}3.数据hash映射关系确定if (!circle.containsKey(hash)) {//数据映射在两台虚拟机器所在环之间,就需要按顺时针⽅向寻找机器SortedMap<Long, T> tailMap = circle.tailMap(hash);hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();}4.测试package erbuss;import java.util.*;public class ConsistentHash<T> {private HashFunction hashFunction;private int numberOfReplicas;// 节点的复制因⼦,实际节点个数 * numberOfReplicas = 虚拟节点个数private final SortedMap<Long, T> circle = new TreeMap<Long, T>();// 存储虚拟节点的hash值到真实节点的映射 public ConsistentHash(HashFunction hashFunction, int numberOfReplicas,Collection<T> nodes) {this.hashFunction = hashFunction;this.numberOfReplicas = numberOfReplicas;for (T node : nodes) {add(node);}}public void add(T node) {for (int i = 0; i < numberOfReplicas; i++)// 对于⼀个实际机器节点 node, 对应 numberOfReplicas 个虚拟节点/** 不同的虚拟节点(i不同)有不同的hash值,但都对应同⼀个实际机器node* 虚拟node⼀般是均衡分布在环上的,数据存储在顺时针⽅向的虚拟node上*/circle.put(hashFunction.hash(node.toString() + i), node);}public void remove(T node) {for (int i = 0; i < numberOfReplicas; i++)circle.remove(hashFunction.hash(node.toString() + i));}/** 获得⼀个最近的顺时针节点,根据给定的key 取Hash* 然后再取得顺时针⽅向上最近的⼀个虚拟节点对应的实际节点* 再从实际节点中取得数据*/public T get(Object key) {if (circle.isEmpty())return null;long hash = hashFunction.hash((String) key);// node ⽤String来表⽰,获得node在哈希环中的hashCodeif (!circle.containsKey(hash)) {//数据映射在两台虚拟机器所在环之间,就需要按顺时针⽅向寻找机器SortedMap<Long, T> tailMap = circle.tailMap(hash);hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();}return circle.get(hash);}public long getSize() {return circle.size();}/** 查看MD5算法⽣成的hashCode值---表⽰整个哈希环中各个虚拟节点位置*/public void testBalance(){Set<Long> sets = circle.keySet();//获得TreeMap中所有的KeySortedSet<Long> sortedSets= new TreeSet<Long>(sets);//将获得的Key集合排序System.out.println("[1]节点为: ----");for(Long hashCode : sortedSets){System.out.print(hashCode);System.out.print(",");}System.out.println("----");System.out.println("[2]节点间距为: ----");/** 查看⽤MD5算法⽣成的long hashCode 相邻两个hashCode的差值*/Iterator<Long> it = sortedSets.iterator();Iterator<Long> it2 = sortedSets.iterator();if(it2.hasNext())it2.next();long keyPre, keyAfter;while(it.hasNext() && it2.hasNext()){keyPre = it.next();keyAfter = it2.next();System.out.print(keyAfter - keyPre);System.out.print(",");}System.out.println("----");}//根据key查找对应的节点public String getNodeForKey(String key) {long hash = hashFunction.hash(key);if (!circle.containsKey(hash)) {//数据映射在两台虚拟机器所在环之间,就需要按顺时针⽅向寻找机器SortedMap<Long, T> tailMap = circle.tailMap(hash);hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();}return circle.get(hash)+",hash为:"+hash;}public static void main(String[] args) {Set<String> nodes = new HashSet<String>();nodes.add("A");nodes.add("B");nodes.add("C");ConsistentHash<String> consistentHash = new ConsistentHash<String>(new HashFunction(), 2, nodes); System.out.println("hash circle size: " + consistentHash.getSize());consistentHash.testBalance();System.out.println("[3]数据分配情况为: ----");for (int i = 0; i < 10; i++){String Key="user_" + i;System.out.println("Key:"+i+"分配到的Server为:"+consistentHash.getNodeForKey(Key));}//新加⼀节点consistentHash.add("D");System.out.println("hash circle size: " + consistentHash.getSize());consistentHash.testBalance();System.out.println("[3]数据分配情况为: ----");for (int i = 0; i < 10; i++){String Key="user_" + i;System.out.println("Key:"+i+"分配到的Server为:"+consistentHash.getNodeForKey(Key));}//删除⼀节点consistentHash.remove("A");System.out.println("hash circle size: " + consistentHash.getSize());consistentHash.testBalance();System.out.println("[3]数据分配情况为: ----");for (int i = 0; i < 10; i++){String Key="user_" + i;System.out.println("Key:"+i+"分配到的Server为:"+consistentHash.getNodeForKey(Key));}}}结果hash circle size: 6[1]节点为: ----748451404,769404186,1696944585,1830063320,3862426151,3864615324,----[2]节点间距为: ----20952782,927540399,133118735,2032362831,2189173,----[3]数据分配情况为: ----Key:0分配到的Server为:B,hash为:748451404Key:1分配到的Server为:B,hash为:1696944585Key:2分配到的Server为:A,hash为:1830063320Key:3分配到的Server为:A,hash为:3862426151Key:4分配到的Server为:A,hash为:3862426151Key:5分配到的Server为:B,hash为:748451404Key:6分配到的Server为:A,hash为:3862426151Key:7分配到的Server为:B,hash为:748451404Key:8分配到的Server为:B,hash为:748451404Key:9分配到的Server为:A,hash为:3862426151hash circle size: 8[1]节点为: ----748451404,769404186,1696944585,1830063320,3372629518,3766042698,3862426151,3864615324,----[2]节点间距为: ----20952782,927540399,133118735,1542566198,393413180,96383453,2189173,----[3]数据分配情况为: ----Key:0分配到的Server为:B,hash为:748451404Key:1分配到的Server为:B,hash为:1696944585Key:2分配到的Server为:A,hash为:1830063320Key:3分配到的Server为:D,hash为:3372629518Key:4分配到的Server为:D,hash为:3372629518Key:5分配到的Server为:B,hash为:748451404Key:6分配到的Server为:D,hash为:3766042698Key:7分配到的Server为:B,hash为:748451404Key:8分配到的Server为:B,hash为:748451404Key:9分配到的Server为:D,hash为:3372629518hash circle size: 6[1]节点为: ----748451404,769404186,1696944585,3372629518,3766042698,3864615324,----[2]节点间距为: ----20952782,927540399,1675684933,393413180,98572626,----[3]数据分配情况为: ----Key:0分配到的Server为:B,hash为:748451404Key:1分配到的Server为:B,hash为:1696944585Key:2分配到的Server为:D,hash为:3372629518Key:3分配到的Server为:D,hash为:3372629518Key:4分配到的Server为:D,hash为:3372629518Key:5分配到的Server为:B,hash为:748451404Key:6分配到的Server为:D,hash为:3766042698Key:7分配到的Server为:B,hash为:748451404Key:8分配到的Server为:B,hash为:748451404Key:9分配到的Server为:D,hash为:3372629518从上⾯执⾏结果可以看出哈希⼀致性算法的优势,对于删除节点或新增节点仅影响对于⽚区内的。
SQL语句常用约束类型
SQL语句常⽤约束类型常⽤五类约束: not null:⾮空约束,指定某列不为空 unique:唯⼀约束,指定某列和⼏列组合的数据不能重复 primary key:主键约束,指定某列的数据不能重复、唯⼀ foreign key:外键,指定该列记录属于主表中的⼀条记录,参照另⼀条数据 check:检查,指定⼀个表达式,⽤于检验指定数据 注意: MySQL不⽀持check约束,但可以使⽤check约束,⽽没有任何效果;根据约束数据列限制,约束可分为: 单列约束:每个约束只约束⼀列 多列约束:每个约束约束多列数据1、not null ⾮空约束⽤于确保当前列的值不为空值,⾮空约束只能出现在表对象的列上。
*Null类型特征:所有的类型的值都可以是null,包括int、float等数据类型空字符串””是不等于null,0也不等于nullcreate table temp(id int not null,name varchar(255) not null default ‘abc’,sex char null)上⾯的table加上了⾮空约束,也可以⽤alter来修改或增加⾮空约束增加⾮空约束 alter table temp modify sex varchar(2) not null;取消⾮空约束 alter table temp modify sex varchar(2) null;取消⾮空约束,增加默认值 alter table temp modify sex varchar(2) default ‘abc’;2、unique 唯⼀约束是指定table的列或列组合不能重复,保证数据的唯⼀性。
虽然唯⼀约束不允许出现重复的值,但是可以为多个null,同⼀个表可以有多个唯⼀约束,多个列组合的约束。
在创建唯⼀约束的时候,如果不给唯⼀约束名称,就默认和列名相同。
MySQL会给唯⼀约束的列上默认创建⼀个唯⼀索引;create table temp (id int not null,name varchar(25),password varchar(16),constraint uk_name_pwd unique(name, password));unique(name, password)表⽰⽤户名和密码组合不能重复 添加唯⼀约束 alter table temp add unique(name, password); 修改唯⼀性约束 alter table temp modify name varchar(25) unique; 删除约束 alter table temp drop index name;3、primary key 主键约束相当于唯⼀约束+⾮空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
微信小程序wx:key详细介绍
微信⼩程序wx:key详细介绍微信⼩程序 wx:key 在⾃⼰学习的时候不是多明⽩到底是怎么回事,经过上⽹查阅资料,整理下:个⼈感觉官⽅给出的例⼦不是很明确,官⽅解释如下:wx:key如果列表中项⽬的位置会动态改变或者有新的项⽬添加到列表中,并且希望列表中的项⽬保持⾃⼰的特征和状态(如 <input/>中的输⼊内容,<switch/> 的选中状态),需要使⽤ wx:key 来指定列表中项⽬的唯⼀的标识符。
wx:key 的值以两种形式提供字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯⼀的字符串或数字,且不能动态改变。
保留关键字 *this 代表在 for 循环中的 item 本⾝,这种表⽰需要 item 本⾝是⼀个唯⼀的字符串或者数字,如:当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,⽽不是重新创建,以确保使组件保持⾃⾝的状态,并且提⾼列表渲染时的效率。
如不提供 wx:key,会报⼀个 warning,如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。
⽰例代码:<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;"> {{item.id}} </switch><button bindtap="switch"> Switch </button><button bindtap="addToFront"> Add to the front </button><switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;"> {{item}} </switch><button bindtap="addNumberToFront"> Add to the front </button>Page({data: {objectArray: [{id: 5, unique: 'unique_5'},{id: 4, unique: 'unique_4'},{id: 3, unique: 'unique_3'},{id: 2, unique: 'unique_2'},{id: 1, unique: 'unique_1'},{id: 0, unique: 'unique_0'},],numberArray: [1, 2, 3, 4]},switch: function(e) {const length = this.data.objectArray.lengthfor (let i = 0; i < length; ++i) {const x = Math.floor(Math.random() * length)const y = Math.floor(Math.random() * length)const temp = this.data.objectArray[x]this.data.objectArray[x] = this.data.objectArray[y]this.data.objectArray[y] = temp}this.setData({objectArray: this.data.objectArray})},addToFront: function(e) {const length = this.data.objectArray.lengththis.data.objectArray = [{id: length, unique: 'unique_' + length}].concat(this.data.objectArray)this.setData({objectArray: this.data.objectArray})},addNumberToFront: function(e){this.data.numberArray = [ this.data.numberArray.length + 1 ].concat(this.data.numberArray)this.setData({numberArray: this.data.numberArray})}})这⾥写下个⼈的理解,有什么不对的地⽅希望⼤家指正:以<switch></switch>为例,如果没有wx:key,选中其中的某个按钮的时候,改变其顺序或添加选项的时,选中的按钮时不回跟随上个按钮改变顺序的,会⼀直在固定位⼦,如果如果有wx:key 则相反,适⽤于列表或其他标签可以改变顺序或添加项⽬的情况感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。
gp建表语句
gp建表语句在Oracle数据库中,可以使用CREATE TABLE语句来创建表。
下面是符合标题要求的10个CREATE TABLE语句示例:1. 创建学生表(Student):CREATE TABLE Student (id INT PRIMARY KEY,name VARCHAR2(50),age INT,gender VARCHAR2(10),class_id INT,FOREIGN KEY (class_id) REFERENCES Class(id));2. 创建班级表(Class):CREATE TABLE Class (id INT PRIMARY KEY,name VARCHAR2(50),teacher_id INT,FOREIGN KEY (teacher_id) REFERENCES Teacher(id));3. 创建教师表(Teacher):CREATE TABLE Teacher (id INT PRIMARY KEY,name VARCHAR2(50),department VARCHAR2(50));4. 创建课程表(Course):CREATE TABLE Course (id INT PRIMARY KEY,name VARCHAR2(50),credit INT);5. 创建成绩表(Grade):CREATE TABLE Grade (id INT PRIMARY KEY,student_id INT,course_id INT,score INT,FOREIGN KEY (student_id) REFERENCES Student(id), FOREIGN KEY (course_id) REFERENCES Course(id) );6. 创建订单表(Order):CREATE TABLE Order (id INT PRIMARY KEY,customer_id INT,order_date DATE,total_amount NUMBER(10, 2),FOREIGN KEY (customer_id) REFERENCES Customer(id) );7. 创建产品表(Product):CREATE TABLE Product (id INT PRIMARY KEY,name VARCHAR2(50),price NUMBER(10, 2));8. 创建订单商品表(OrderItem):CREATE TABLE OrderItem (id INT PRIMARY KEY,order_id INT,product_id INT,quantity INT,FOREIGN KEY (order_id) REFERENCES Order(id),FOREIGN KEY (product_id) REFERENCES Product(id));9. 创建部门表(Department):CREATE TABLE Department (id INT PRIMARY KEY,name VARCHAR2(50),manager_id INT,FOREIGN KEY (manager_id) REFERENCES Employee(id));10. 创建员工表(Employee):CREATE TABLE Employee (id INT PRIMARY KEY,name VARCHAR2(50),age INT,salary NUMBER(10, 2),department_id INT,FOREIGN KEY (department_id) REFERENCES Department(id) );这些CREATE TABLE语句可以用于创建不同类型的数据库表,涵盖了学生、班级、教师、课程、成绩、订单、产品、订单商品、部门和员工等不同领域。
限制input[type=number]的输入位数策略整理
限制input[type=number]的输⼊位数策略整理当我们使⽤类型number的input输⼊框的时候,我们可能需要限制输⼊的位数,这个时候通常会想到maxlength,但是maxlength是在number类型的时候是不⽀持的,下⾯是⼀些解决这种问题的⽅法。
1)max和minmax和min是number输⼊框所⽀持的,这样如果我们要限制输⼊11位的⼿机号码,就可以⽤如下代码<input type="number" max="99999999999" />这样不会限制⽤户输⼊,但会在⽤户提交的时候提⽰。
2)oninput事件对多余的位数进⾏slice处理,进⾏删除1 myInput.oninput = function () {2 if (this.value.length > 4) {3 this.value = this.value.slice(0,4);4 }5 }但是这还是和maxlength的逻辑略有不同,那就是当我们将光标挪到之前输⼊的数字之间的时候,我们就会发现,再输⼊数字,会导致最后⾯的数字被删除。
3)keydownkeydown事件可以帮助我们在按下数字之后,判断⼀下当前input中的value的位数,如果超过位数就return false,这样不管光标的位置在哪⾥,都不会输⼊新的数字。
<input type="number" onKeyDown="if(this.value.length==2) return false;" />但是这会导致在满⾜2个数字的时候,再按删除键(或者说是所有按键)失效。
╮(╯﹏╰)╭真的尴尬了4)借助keypress,keydown和oninput1 <input name="myInput_DRS" onkeypress="return isNumeric(event)" onkeydown="return isMoreThan(event)" oninput="maxLengthCheck(this)" type="number" placeholder="Type..." min="1" max="999" />23 <script>4 function maxLengthCheck(object) {5 if (object.value.length > object.max.length)6 object.value = object.value.slice(0, object.max.length)7 }89 function isNumeric(evt) {10 var theEvent = evt || window.event;11 var key = theEvent.keyCode || theEvent.which;12 key = String.fromCharCode(key);13 var regex = /[0-9]|\./;14 if (!regex.test(key)) {15 theEvent.returnValue = false;16 if (theEvent.preventDefault) theEvent.preventDefault();17 }18 }1920 function isMoreThan(evt) {21 var theEvent = evt || window.event;22 var target = theEvent.target;23 var keyID = event.keyCode;24 var isDelete = false;25 switch (keyID) {26 case 8:27 isDelete = true;28 // alert("backspace");29 break;30 case 46:31 isDelete = true;32 // alert("delete");33 break;34 default:35 break;36 }3738 if (!isDelete && target.value.length == target.max.length) {39 return false;40 }41 }4243 </script>5)input parttern<input type="text" pattern="\d*" maxlength="2">但是兼容性不好,Internet Explorer 10、Firefox、Opera 和 Chrome ⽀持 pattern 属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
101/102/104标准键盘对照表1、第一排:
Esc 键
VK_ESCAPE = 27;
F1 键
VK_F1 = 112;
F2 键
VK_F2 = 113;
F3 键
VK_F3 = 114;
F4 键
VK_F4 = 115;
F5 键
VK_F5 = 116;
F6 键
VK_F6 = 117;
F7 键
VK_F7 = 118;
F8 键
VK_F8 = 119;
F9 键
VK_F9 = 120;
F10 键
VK_F10 = 121;
F11 键
VK_F11 = 122;
F12 键
VK_F12 = 123;
2、第二排:
数字0 键
VK_0 = 48;
数字1 键
VK_1 = 49;
数字2 键
VK_2 = 50;
数字3 键
VK_3 = 51;
数字4 键
VK_4 = 52;
VK_5 = 53;
数字6 键
VK_6 = 54;
数字7 键
VK_7 = 55;
数字8 键
VK_8 = 56;
数字9 键
VK_9 = 57;
Back Space 键
VK_BACK = 8;
3、字母键
VK_A 到VK_Z 对应为'A' 到'Z' 数值为( 65 到90 )
4、功能键
Tab 键
VK_TAB = 9;
Shift 键
VK_SHIFT = $10;
Ctrl 键
VK_CONTROL = 17;
Alt 键
VK_MENU = 18;
Caps Lock 键
VK_CAPITAL = 20;
左win 键
VK_LWIN = 91;
右win 键
VK_RWIN = 92;
快捷菜单键
VK_APPS = 93;
VK_LSHIFT = 160;
右Shift 键
VK_RSHIFT = 161;
左Ctrl 键
VK_LCONTROL = 162; 右Ctrl 键
VK_RCONTROL = 163;
左Alt 键
VK_LMENU = 164;
右Alt 键
VK_RMENU = 165;
Enter 键
VK_RETURN = 13;
空格键
VK_SPACE = $20;
5、小键盘
Num Lock 键
VK_NUMLOCK = 144;
小键盘上‘0’
VK_NUMPAD0 = 96; 小键盘上‘1’
VK_NUMPAD1 = 97; 小键盘上‘2’
VK_NUMPAD2 = 98; 小键盘上‘3’
VK_NUMPAD3 = 99; 小键盘上‘4’
VK_NUMPAD4 = 100; 小键盘上‘5’
VK_NUMPAD5 = 101; 小键盘上‘6’
VK_NUMPAD6 = 102; 小键盘上‘7’
VK_NUMPAD7 = 103; 小键盘上‘8’
VK_NUMPAD8 = 104; 小键盘上‘9’
VK_NUMPAD9 = 105; 小键盘上‘乘’* VK_MULTIPL Y = 106; 小键盘上‘加’+ VK_ADD = 107;
小键盘上‘减’- VK_SUBTRACT = 109; 小键盘上‘.’
VK_DECIMAL = 110; 小键盘上‘除’/ VK_DIVIDE = 111;
6、编辑操作键
Scroll Lock 键
VK_SCROLL = 145;
Pause Break 键
VK_PAUSE = 19;
Insert 键
VK_INSERT = 45; Delete 键
VK_DELETE = 46;
Hong 键
VK_HOME = 36;
End 键
VK_END = 35;
Page Up 键
VK_PRIOR = 33; Page Down 键
VK_NEXT = 34;
‘左’方向键
VK_LEFT = 37;
‘上’方向键
VK_UP = 38;
‘右’方向键
VK_RIGHT = 39;
‘下’方向键
VK_DOWN = 40;。