- 不区分大小写
一、ISQL指令
1.desc
查看表信息
DESC table_name;
2.create table
在数据库中创建一张新的表
CREATE TABLE table_name
{
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
...
};
eg.
CREATE TABLE Persons
{
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
};
数据类型 | 对照 |
---|---|
varchar(20) | RTDB_KEY |
varchar(size) | 容纳可变长度的字符串,size为字符串的长度 |
char(size) | 容纳固定长度的字符串,size为字符串的长度 |
numeric(size,d) | 容纳带有小数的数字,'size'为数字的最大位数,'d'为小数点右侧的最大位数 |
日期 | date |
3.select
SELECT * FROM 表名; //查看表中所有字段的字段数据
SELECT 字段 FROM 表 WHERE 筛选条件; //根据筛选条件查看数据
eg.
//查看表号101,域号4的所有列的内容
SELECT *FROM sys_column_info WHERE table_id=101 AND column_id=4;
//从flight表中取'flight_id','destination'列的内容
SELECT flight_id,destination FROM flights;
//从flight表中取所有列的内容
SELECT * FROM flights;
4.update(*)
更新表中的原有数据,保存该条记录之前的ID值。
UPDATE 表名称 SET 列名称 = 新值 WHERE 筛选条件;
eg.
UPDATE table_name SET column_name=new_value WHERE colunm_name=some_value;
UPDATE table_name SET column_name1=value1,column_name2=value2 WHERE column_name=value3;
5.insert(*)
INSERT INTO table_name(column1,column2,...,column_n)VALUES(value1,value2,...,value_n);
eg.
//插入一行
INSERT INTO dependents(first_name,last_name,relationship,employee_id)VALUES('Max','Su','Chid',176);
//插入多行
INSERT INTO dependents(first_name,last_name,relationship,employee_id)VALUES('Max','Su','Chid',176),('Michelle','Lee','Chid',192);
6.alter
修改表内容
ALTER TABLE table_name [改变方式];
方式 | 内容 |
---|---|
ADD | 增加新列和完整性约束 |
DROP | 删除指定列或指定的完整性约束 |
CHANGE | 修改某些列 |
MODIFY | 修改某些列的数据格式 |
ALTER TABLE table_name ADD 列定义|完整性约束;
ALTER TABLE table_name DROP COLUMN 列名;
ALTER TABLE table_name CHANGE 原列名 TO 新列名 新列的数据类型;
ALTER TABLE table_name MODIFY 列名 数据类型;
eg.
CREATE TABLE flights
(
flight_id SERIAL PRIMARY KEY,
origin VARCHAR(255),
destination VARCHAR(255),
departure_time TIMESTAMP,
arrival_time TIMESTAMP
);
//添加新的列alliance
ALTER TABLE flights ADD COLUMN alliance VARCHAR(255);
//重命名:将destination列重命名为destination_city
ALTER TABLE flights RENAME COLUMN destination TO destination_city;
//添加非空约束
ALTER TABLE flights ALTER COLUMN departure_time SET NOT NULL;
//删除origin
ALTER TABLE flights DROP COLUMN origin;
7.删除
7.1 delete
保留表,删除表中的内容
DELETE FROM table_name;//删除表中全部内容
DELETE FROM table_name WHERE 筛选条件;
eg.
DELETE FROM table_name WHERE sale_price>=400;
7.2 drop
删除表的内容和定义,释放空间
DROP TABLE table_name;
8.commit
对商用库进行修改完毕后,执行commit保存,否则不生效。
COMMIT;
***筛选条件(where语句):
(1)比较运算符:>,>=,=,<,<=,<>,!>,!<
(2)范围运算符,判断表达式是否在指定范围: BETWEEN...AND....;NOT BETWEEN...AND....
WHERE age BETWEEN 10 AND 30; //age >=10 AND age<=30
(3)列表运算符,判断表达式是为列表中的指定项:IN(); NOT IN();
WHERE country IN ('Germany','China');
(4)模式匹配运算符:LIKE、NOTLIKE
常用于模糊查找,判断列值是否与指定的字符串格式相匹配。
选项 | 说明 |
---|---|
% | 匹配任意类型和长度的字符(英文) |
%% | 匹配任意类型和长度的字符(中文) |
[字符集合] | 匹配字符集合中的任何一个字符 |
[^] | 匹配不在括号中的任何字符 |
* | 匹配0个或多个在它前面的字符 |
_ | 匹配1个字符 |
<字符串> | 匹配包含指定字符串的文本 |
eg.
SELECT * FROM table_name WHERE u_name LIKE '%三%'; //把u_name中含有'三'的记录找出来,比如'张三','三脚猫','唐三藏'
SELECT * FROM table_name WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'; //把u_name中含有'三'和'猫'的记录找出来,即'三脚猫'
SELECT * FROM table_name WHERE u_name LIKE '_三_'; //找u_name为三个字,且中间一个字是'三'的记录,即'唐三藏'
SELECT * FROM table_name WHERE u_name LIKE '三__'; //找u_name为三个字,且第一个字是'三'的记录,即'三脚猫'
SELECT * FROM table_name WHERE u_name LIKE '[张李王]三'; //找出'张三','李三','王三'
SELECT * FROM table_name WHERE u_name LIKE '老[1-9]'; //找出'老1','老2'...'老9';[abcd]可略写为'a-e';[01234]可略写为'0-4'
SELECT * FROM table_name WHERE u_name LIKE '[^张李王]三'; //找出不姓'张李王'的'x三'
(5)空值判断符:IS NULL、IS NOT NULL
WHERE age IS NULL;
(6)逻辑运算符:NOT、AND、OR
二、程序读写商用库
调用平台提供的接口,对商用库数据进行读取和写入。
数据类型 | 占位符 |
---|---|
int | %d |
long | %ld |
string | ’%s‘ |
float | %.2f |
1.读取商用库
int ReadFromHisDbByWhereStr(const std::string &table_name, const std::string &field_name, const std::string &where_str, std::vector<DATA_STRUCT> &result_vec)
/*
table_name:商用库中需要读取的表名
field_name:需要读的域名
where_str:筛选条件,where语句
result_vec:取回的数据放入此vector中
*/
2.将数据写入商用库
包含更新原有数据和插入新数据两种方式
int SqlExecuteBySp(const std::vector<string> &sql_vec)
/*
sql_vec:写商用库的sql语句vector
*/
2.1 update
更新表中的原有数据,保存该条记录之前的ID值。
eg.
string table_name;
string name_temp;
char area_sql_str[1024];
sprintf(area_sql_str,
"UPDATE '%s' SET load_name = '%s', load_area = %ld, resp_level = %d, current_p = %.2f, up_cap = %.2f, dn_cap = %.2f where id = %ld and load_type = %d",table_name.c_str(), name_temp.c_str(), load_area, resp_level, it2->second.area_current_p, it2->second.area_up_cap, it2->second.area_dn_cap, area_resp_id_map[load_area][resp_level],1007);
sql_vec.push_back((string(area_sql_str)));
2.2 insert
向表中一行或多行插入数据,记录表中最大ID值,创建新的ID
eg.
long maxid = 0;
keyno = GetNewKeyidByTable(table_no, maxid);
sprintf(area_sql_str,
"INSERT %s(id,load_name,load_area,resp_level,current_p,up_cap,dn_cap,load_type)"
"VALUSE(%ld,'%s',%ld,%d,%.2f,%.2f,%.2f,%d)",
table_name.c_str(),keyno, name_temp.c_str(), load_area, resp_level, it2->second.area_current_p, it2->second.area_up_cap, it2->second.area_dn_cap,1007);
sql_vec.push_back((string(area_sql_str)));
2.3 delete
删除表中的内容
char sql_string[1024];
sprintf(sql_string,"DELETE FROM %S","TABLE_NAME");
cout<<sql_string<<endl; //打印检查sql语句是否正确
sql_vec.push_back(sql_string);