在ios项目中使用sqlite需要添加 libsqlite3.dylib库
SQL语句的特点
不区分大小写(比如数据库认为insert和InSerT是一样的)
每条语句都必须以分号 “ ; ” 结尾。
SQL中常用关键字
select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等
注意:数据库中不可以使用关键字来命名表、字段
SQL 语句中除过
SELECT语句都可以称之为更新操作。包括CREATE,UPDATE,INSERT,ALTER,COMMIT,BEGIN,DETACH,DROP,END,EXPLAIN,VACUUM,REPLACE等。一般只要不是以SELECT开头的 SQL 语句,都是更新语句。
二、SQL语句的种类
1.数据定义语句(DDL:Data Definition Language)
包括create和drop等操作
在数据库中创建新表或删除表(create table或 drop table)
2**.数据操作语句**(DML:Data Manipulation Language)
包括insert、update、delete等操作
上面的3种操作分别用于添加、修改、删除表中的数据
3**.数据查询语句**(DQL:Data Query Language)
可以用于查询获得表中的数据
关键字select是DQL(也是所有SQL)用得最多的操作
其他DQL常用的关键字有where,order by,group by和having
一、创建(删除)表
1、创建
create table 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
create table if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
示例:
1 | create table t_student (id integer, name text, age inetger, score real) |
1 | CREATE TABLE IF NOT EXISTS -- 创建表 |
创建新表(create table) 删除表(drop table)
注意事项:
1、创建表格时, 最好加个表格是否已经存在的判断, 这个防止语句多次执行时发生错误。
if not exists: 判断表不存在时才创建表.。2、SQL不区分大小写,编写SQL规范,最好关键字都使用大写.表名最好加上
t_前缀。3、
PRIMARY KEY: 约束为主键。4、
AUTOINCREMENT: 自动递增。
创建表推荐写法:
1 | CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text, age integer, score integer); |
2、删除表
格式:
DROP TABLE IF EXISTS 表名;
删除表示例
1 | DROP TABLE IF EXISTS t_student; |
3、修改表(重命名表)
格式:
ALTER TABLE 旧表名 RENAME TO 新表名;
重命名表示例
1 | ALTER TABLE t_student RENAME TO t_person; |
4、数据表添加字段
格式:
ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 限定符
数据表添加字段示例
1 | ALTER TABLE t_student ADD COLUMN address text; |
SQLite数据类型类型
SQLite将数据划分为以下几种存储类型:
integer : 整型值
real : 浮点值
text : 文本字符串
blob : 二进制数据(比如文件)
实际上SQLite是无类型的
就算声明为integer类型,还是能存储字符串文本(主键除外)
建表时声明啥类型或者不声明类型都可以,也就意味着创表语句可以这么写:
create table t_student(name, age); 为了保持良好的编程规范,编写建表语句的时候最好加上每个字段的具体类型
二、DML数据库操作操作(增删改)
1、增
插入数据(insert)
格式: insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;
SQL插入数据示例
1 | insert into t_student (name, age) values (‘mj’, 10) ; |
注意:数据库中的字符串内容应该用单引号 ’ 括住
1.字段和值一定要对应,否则也会添加错误的数据进表里
2.TEXT类型需要添加引号’’
2、删
格式: delete from 表名 ;
格式: delete from 表名 where 条件;
删除表示例
1 | delete from t_student ; |
3、改
更新数据(update)
格式: update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
SQL更新数据示例
1 | /* |
三、DQL数据库查询语句(查询)
查询数据(select)
- 1.查询数据格式
格式1:
select * from 表名;,*:通配符,表示所有字段.
格式2:select 字段1, 字段2, … from 表名;
格式3:select 字段1, 字段2, … from 表名 where 条件;
1 | /* |
排序查询
1、ASC 升序(默认的排序方法) 2、DESC 降序
格式:
SELECT 字段1(或*) FROM 表名 ORDER BY 要排序的字段名 ASC;格式:
SELECT 字段1(或*) FROM 表名 ORDER BY 要排序的字段名 DESC;格式:
SELECT * FROM 表名 ORDER BY 字段名1 排序类型, 字段名2 排序类型;
1 | ● select * from t_student order by age desc ; //降序 |
limit分页查询
格式:
select * from 表名 limit 数值1, 数值2 ;
● 使用limit可以精确地控制查询结果的数量,比如每次只查询10条数据
1 | select * from t_student limit 4, 8 ;// 可以理解为:跳过最前面4条语句,然后取8条记录 |
对数据进行统计
1 | 取出所有数据的总数目 |
四、约束
1、简单约束
建表时可以给特定的字段设置一些约束条件,常见的约束有
not null:规定字段的值不能为null
unique:规定字段的值必须唯一
default:指定字段的默认值(建议:尽量给字段设定严格的约束,以保证数据的规范性)
示例
1 | create table t_student (id integer, name text not null unique, age integer not null default 1) ; |
说明:如果想要让主键自动增长(必须是integer类型),应该增加autoincrement
2、主键 primary key
1 | // integer类型的id作为t_student表的主键 |
SQL语句的基本使用
条件语句
- 1.条件语句的常见格式
where 字段 = 某个值 ; // 不能用两个 =
where 字段 is 某个值 ; // is 相当于 =
where 字段 != 某个值 ;
where 字段 is not 某个值 ; // is not 相当于 !=
where 字段 > 某个值 ;
where 字段1 = 某个值 and 字段2 > 某个值 ; // and相当于C语言中的 &&
where 字段1 = 某个值 or 字段2 = 某个值 ; // or 相当于C语言中的 ||
iOS 更新
1 | char *update = "INSERT OR REPLACE INTO PERSIONINFO(NAME,AGE,SEX,WEIGHT,ADDRESS)""VALUES(?,?,?,?,?);"; |
FMDB的使用
Github:https://github.com/ccgus/fmdb
FMDB是iOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言API。
优点:
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
提供了多线程安全的数据库操作方法,有效地防止数据混乱
相关文章