澳门新葡萄京娱乐网站-澳门新葡萄京888官网-所有平台

热门关键词: 澳门新葡萄京娱乐网站,澳门新葡萄京888官网

SQL命令

作者: MySQL数据库  发布:2020-01-04

INSERT VALUE,INSERT SELECT,INSERT SET

INSERT INTO mytest.students
VALUES(1320,'王丽','1',22,'计算机专业','138?????');*//按行插入,也可多行插入 ( ),(),以逗号隔开。
or
VALUES(0,'李明',DEFAULT,22,'数学专业',NULL);
or 
VALUES('李明‘,DEFAULT,22,’数学专业');* //id,NULL值可省略,系统自动生成。
or
SET name='李明',sex=DEFAULT,age=22,major='数学专业';*//按字段(列)插入
or
(name,sex,age,major)
SELECT name,......
FROM mytest.student_copy;*//从其他表拿出来插入当前表,按顺序对应字段插入(数目类型一致即可,不要求字段一致)
/*
使用数据库的准备工作
1.导入libsqlite3.dylib静态库
2.导入sqlite3.h头文件         #import <sqlite3.h>

使用数据库注意事项
1.使用数据库时,要保证数据库文件存在
2.使用数据库前,要保证数据库是打开状态
3.使用数据库后,要关闭数据库
 */



#import "ViewController.h"
#import <sqlite3.h>
@interface ViewController ()
{
    sqlite3 *_db;
}
@property (retain, nonatomic) IBOutlet UITextField *nameText;
@property (retain, nonatomic) IBOutlet UITextField *ageTextField;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%@",NSHomeDirectory());
}

- (void)dealloc {
    [_nameText release];
    [_ageTextField release];
    [super dealloc];
}
#pragma mark -- 创建数据库文件并打开数据库
-(BOOL)openDatabase
{
    //数据库文件路径
    NSString *filePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/student.sqlite"];
    //UTF8String把oc的字符串转化成c的字符串
    const char *filename = [filePath UTF8String];
    // sqlite3_open 打开数据库的方法; 如果有数据库文件就直接打开,如果没有数据库文件系统会自动创建一个数据库文件,并打开
    //参数1.数据库文件的路径 2.数据库对象,要打开的数据库
    //返回值表示操作的状态码
    int result = sqlite3_open(filename, &_db);
    if (result == SQLITE_OK)
    {
        NSLog(@"数据库打开成功");
        return YES;
    }
    else
    {
        NSLog(@"数据库打开失败");
        //sqlite3_close 关闭数据库的方法
        sqlite3_close(_db);
        return NO;
    }
}
#pragma mark --创建表
- (IBAction)createTable:(id)sender
{
    //1.打开数据库
    if (![self openDatabase])
    {
        return;
    }
    //2.创建表
    NSString *str = @"CREATE TABLE IF NOT EXISTS student (student_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT , age INTEGER)";
    char *error = nil;
    //sqlite3_exec对数据库的操作:创建表,增删改,都是用这个方法
    //参数 1.数据库对象 2.sql语句 3.回调函数nil 4.回调函数的参数nil
    if (sqlite3_exec(_db, [str UTF8String], nil, nil, &error)==SQLITE_OK)
    {
        NSLog(@"创建表成功");
    }
    else
    {
        NSLog(@"创建表失败:%s",error);
    }
    //3.关闭数据库
    sqlite3_close(_db);
}
#pragma mark -- 添加数据
- (IBAction)insertInto:(id)sender
{
    //1.打开数据库2.执行增删改查的操作3.关闭数据库
    if (![self openDatabase])
    {
        return;
    }
    NSString *str = [NSString stringWithFormat:@"insert into student (name , age) values ('%@',%d)",_nameText.text,_ageTextField.text.intValue];
    char *error = nil;
    if (sqlite3_exec(_db, [str UTF8String], nil, nil, &error)==SQLITE_OK)
    {
        NSLog(@"插入数据成功");
    }
    else
    {
        NSLog(@"插入数据失败:%s",error);
    }
    sqlite3_close(_db);
}
#pragma mark -- 删除数据
- (IBAction)delete:(id)sender
{
    if (![self openDatabase])
    {
        return;
    }
    NSString *str =@"delete from student where student_id = 6";
    char *error = nil;
    if (sqlite3_exec(_db, [str UTF8String], nil, nil, &error)==SQLITE_OK)
    {
        NSLog(@"删除成功");
    }
    else
    {
        NSLog(@"删除失败:%s",error);
    }
    sqlite3_close(_db);
}
#pragma mark -- 修改数据
- (IBAction)upData:(id)sender
{
    if (![self openDatabase])
    {
        return;
    }
    NSString *str = [NSString stringWithFormat:@"update student set name = '%@' where student_id =%d",@"马云",2];
    if (sqlite3_exec(_db, [str UTF8String], nil, nil, nil)==SQLITE_OK)
    {
        NSLog(@"修改数据成功");
    }
    else
    {
        NSLog(@"修改数据失败");
    }
    sqlite3_close(_db);
}
#pragma mark --查询数据
- (IBAction)select:(id)sender
{
    //先打开数据库,查询,关闭数据库
    if (![self openDatabase])
    {
        return;
    }
    NSString *str = @"select * from student";
    //缓存区
    sqlite3_stmt *stmt = nil;
    //sqlite3_prepare 把sql语句放入缓存区
    //参数1.数据库对象2.sql语句 3.sql语句的长度,-1全部的sql语句 4.缓存区 5.剩余部分的sql语句
    if (sqlite3_prepare(_db, [str UTF8String], -1, &stmt, nil)==SQLITE_OK)
    {
        //sqlite3_step 单步查询数据,一次只查询一条数据
        //SQLITE_ROW表示数据库中还有数据继续下一个查询
        //SQLITE_DONE 表示数据查询完毕
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            //sqlite3_column_text 查询字符串的方法
            //参数1.缓存区 2.字段所在的列号
            char *cname = (char *)sqlite3_column_text(stmt, 1);
            int age = sqlite3_column_int(stmt, 2);
            //stringWithUTF8String 把c的字符串转化成oc的字符串
            NSString *name = [NSString stringWithUTF8String:cname];
            NSLog(@"%@---%d",name,age);
        }
        //查询结束,释放缓存区
        sqlite3_finalize(stmt);
    }
    sqlite3_close(_db);
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}
@end

SELECT name myname, age myage FROM t_student;

UPDATE <表名> SET 字段=值 | [,字段2=值,...] [WHERE子句] [ORDER BY子句] [LIMIT 子句]

UPDATE students
SET contact='139????',sex='1'
WHERE name='张三';

UPDATE tb1,tb2
SET tb1.name='李明',tb2.name='王伟'
WHERE tb1.id=tb2.id;

ORDER BY语句用于对结果集进行排序
根据指定列对结果集进行排序 默认按照升序对记录进行排序,降序DESC,升序ASC
desending 降序
asending 升序
语法:
SELECT 字段名 FROM 表名称 ORDER BY 字段名 条件(DESC或ASC)
SELECT 字段名,字段名 FROM 表名称 ORDER BY 字段名 条件,字段名 条件(DESC或ASC)

17>表连接查询

ALTER TABLE <表名> [修改项]

修改项包含:

ADD COLUMN <列名> <类型> //位置AFTER or FIRST <列名>
CHANGE COLUMN <旧列名> <新列名> <新列类型>
ALTER COLUMN <列名> {SET DEFAULT <默认值> |DROP DEFAULT}
MODIFY COLUMN <列名> <类型>
DROP COLUMN <列名>
RENAME TO <列名>

列:

RENAME TABLE <表明> TO <新表名>;
CREATE TABLE mytest.students_copy LIKE(or AS) mytest.students;
DROP TABLE student_copy;
SHOW TABLES;
SHOW COLUMN FROM students; = DESC mytest.students;

语法:
DELETE FROM 表名称 WHERE 列名称 = 值

表连接的类型

表:

SELECT * FROM Students WHERE number<10
SELECT * FROM Students WHERE number<10 OR sex=1
SELECT * FROM Students WHERE number<10 AND number>5
SELECT * FROM Students WHERE age BETWEEN 10 AND 100

示例:UPDATE t_student SET name =‘jack’,age = 20;

REPLACE(替换主键重复的行数据)

列:

REPLCAE INTO mytest.student
VALUES(1320,'李方','1',26,'会计专业','137????');//id 重复

DELETE FROM Students WHERE name = '小芳'
DELETE FROM Students WHERE number > 25

例如t_student可以增加一个id 字段作为主键,相当于人的身份证

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT子句]

DELETE FROM students
WHERE name='王丽';

DELETE FROM tb1,tb2,tb3
WHERE tb1.id=tb2.id AND tb2.id=tb3.id

TRUNCATE TABLE <表名> (先删表,再建表) = DELETE FROM 语句不带WHERE

1.创建表

SELECT name ,age FROM t_student;

数据库:

CREATE DATABASE [IF NOT EXIST] *<数据库名称>;

USE *<数据库名称>;

DROP DATABASE [IF EXIST]* <数据库名称>;

SHOW DATABASE; SHOW DATABASE LIKE 'mytest';

SELECT * FROM Students ORDER BY name DESC, age DESC
SELECT * FROM student ORDER BY student_age ASC

SELECT s.name , s.age FROM t_student s;

创建表

CREATE TABLE students(
id INT,NOT NULL AUTO_INCREMENT,
name CHAR(50) NOT NULL,
sex CHAR(1) NOT NULL ,DEFAULT 0,
contact CHAR(50) NULL,
PRIMARY KEY(id) //主键组(一列或多列)
) ENGINE=InnoDB;

count() 查询表中数据的条数。
SELECT count(
) FROM student

格式:SELECT * FROM 表名 LIMIT 数值1,数值2;

SELECT max(student_age) FROM student

SELECT count (age) FROM t_student;

SELECT * FROM Students

示例:DELETE FROM t_student;

like 匹配
SELECT * FROM Students WHERE name like 'zhang%'
SELECT * FROM Students WHERE name like 'zhang_'
LIKE(搜索某种模式 %可以代表任意一串字符 代表一个任意字符)
%通配 多个字符,
通配一个字符

示例:查询20130901班的所有学生

当值为文本时 需要加单引号;当值为整型不需要加引号

如果想要让主键自动增长 ( 必须是 integer 类型 ) ,增加AUTOINCREMENT 约束

语法2: 下方形式必须值跟字段一一对应 一个都不能少
INSERT INTO 表名 VALUES (值1,值2,值3,值4,值5)

给name起个叫做 myname 的别名,给age起个叫做myage 的别名;

LIMIT 限制
从第六条开始 往后的15条
SELECT * FROM Students LIMIT 5,15

注意:上行示例代码执行完毕之后,会将表中的name值UPDATE为 jack age 的值 20.

语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE 表名称 SET 列名称 = 新值,列名称 = 新值 WHERE 列名称 = 某值

格式:(字段和表都可以起别名)

INSERT INTO Students VALUES('张三','男', 23,175,70)

14>简单的约束

5.删除数据
DELETE 删除用于删除表中的行

常见格式:

语法:
SELECT 字段名 FROM 表名
SELECT 字段名,字段名,字段名,…… FROM 表名
SELECT * FROM 表名

外键的一般情况是:一张表的某个字段,引用着另一张表的主键字段

SQLite3的使用

t_student 表中有一个叫做fk_t_student_class_id_t_class_id的外键

语法:
CREATE TABLE 表名 (字段名1 字段类型,字段名2 字段类型,……)

WHERE 字段1 = 某个值 AND 字段2 > 某个值; // AND相当于C语言中的&&

CREATE TABLE Teacher1 (teacher_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, teacher_name TEXT,teacher_sex BOOLEAN)

SELECT count ( * ) FROM 表名;

4.修改数据
UPDATE 更新语句用来修改表中的数据
set 设置

也可以用多个字段进行排序

数据库提供内置函数:MAX(最大值), MIN(最小值), AVG(平均值)SUM(总值)
语法:
SELECT MAX(字段名) FROM 表名
max(列名) min(列名) 查询这一列的最大,最小值.

示例:

2.插入数据
INSERT 插入 用于表中数据的增加

SELECT *FROM t_student;

  • 全部 (表示查询表中所有数据)
    FROM

示例:

UPDATE Students SET age = 20 WHERE name = '李雷'
UPDATE Students SET age = 20,height = 190.5 WHERE name = '李雷'
UPDATE Students set name='lisi',sex=1 where number < 10 AND number>5

示例: CREATE TABLE IF NOT EXISTS t_student ( id integer PRIMARY KEY AUTOINCREMENT , name text NOT NULL ,age integer NOT NULL DEFAULT 1.0);

CREATE 创建
TABLE 表

SELECT *FROM t_student WHERE age > 10;

语法1:字段和值对应
INSERT INTO 表名 (字段1,字段2,字段3,字段4)VALUES (值1,值2,值3,值4)

新建一个外键

语法:
在SELECT查询语句后+WHERE 字段名 运算符 值
WHERE语句用于有条件地从表中选取数据,也可将WHERE子句添加到SELECT语句

SELECT * FROM t_student ORDER BY age;

嵌套:
SELECT * FROM student WHERE student_age = (SELECT max(student_age) FROM student)

在创表的时候用PRIMARY KEY 声明一个主键

提供运算符有=,!=,>,<,>=,<=,BETWEEN(在某个范围内 前闭后闭)
AND和OR运算符 用于基于一个或多个条件对数据进行过滤
如果两个条件都成立 AND运算符返回一条数据
只要一个条件成立 OR运算符就返回一条数据

1.主键应是对用户没有意义的 2.永远不要更新主键 3.主键不应包含动态变化的数据 4.主键应由计算机自动生成

3.查询数据
SELECT 查询

WHERE 字段 IS 某个值; // IS 相当于 =

SQL约束 用于限制加入表的数据的类型,在创建表时规定约束,主要有以下几种约束:
PRIMARY KEY主键 每个表中都应有且只能有一个主键 主键列不能为NULL值
AUTOINCREMENT自动增长
NOT NULL 非空 约束强制列不接受空值 空值无法插入新纪录或更新纪录
UNIQUE 唯一的 约束唯一标识数据库表中的某个字段

主键字段

CREATE TABLE Teacher2 (teacher_id INTEGER PRIMARY KEY AUTOINCREMENT, teacher_name TEXT,teacher_sex BOOLEAN)

UPDATE t_student SET age = 5 WHERE age > 10 AND name != ‘jack’;

INSERT INTO Students (name,sex) VALUES ('zhangsan',0)

删除t_student表中年龄小于等于10或者年龄大于30的记录

WHERE 字段 = 某个值; //切记不是两个 =

4>删表(DROP)

LIMIT 常做为分页查询,比如每页固定显示5条数据,那么应该这样取数据

主键: Primary Key 简称PK 用来唯一地标示某一条记录

SELECT 字段1 别名, 字段2 别名,...FROM 表名 别名;

5>插入数据(INSERT INTO)

给t_student表起个别名叫做s ,利用s来引用表中的字段

SELECT * FROM t_student ORDER BY age ASC; //升序 (默认)

DEFAULT : 指定字段的默认值

将表中的某个字段的值就行修改(必须在特定的条件上)

格式:

什么是表连接查询

判断表是否存在,不存在时再创建 CREAT TABLE IF NOT EXISTS 表名(字段1 字段类型1,字段名2  字段类型2...);

注意:尽量给字段设定严格的约束,以保证数据的规范性

WHERE 字段 != 某个值;

10>起别名

默认是按照升序排序 (由小到大) ,也可以变为降序 (由大到小)

UPDATE 表名 SET 字段1 = 字段1的值,字段2 = 字段2的值,...;

示例:

示例:SELECT * FROM t_student LIMIT 4,8;

直接删除 DROP TABLE 表名;

CREAT TABLE IF NOT EXISTS t_student ( id integer PRIMARY KEY , name text NOT NULL ,age integer NOT NULL DEFAULT 1.0 ); integer 类型作为t_student表的主键

示例:DROP TABLE t_student;

SELECT count ( * ) FROM t_student WHERE score >= 60;

NOT NULL :规定字段的值不能为NULL

内连接 : INNER JOIN 或者JOIN 显示的是左右表都有完整字段的记录

主键字段默认就包含了NOT NULL 和 UNIQUE这两个约束

WHERE 字段 IS NOT 某个值; // IS NOT 相当于 !=

9>DQL语句

主键可以是一个字段或多个字段

WHERE 字段1 = 某个值;

12>排序

查询出来的结果可以使用OEDER BY 进行排序

UPDATE t_student SET score = age WHERE name = ‘jack'

SELECT s.name , s.age FROM t_student s ,t_class c WHERE s.class_id = c.id AND c.name = ‘10230901’;

需要联合多张表才能查到想要的数据

CREATE TABLE IF NOT EXISTS t_student ( id integer PRIMARY KEY AUTOINCREMENT , name text ,age integer ,class_id integer ,CONSTRAINT fk_student_class FOREIGN KEY ( class_id ) REFERENCES t_class ( id ) );

6>更新数据(UPDATE)

格式:

表示取最前面的7条记录

SELECT * FROM t_student ORDER BY 字段;

建表时可以指定特定的约束条件,常见的约束:

DELETE FROM 表名;

示例:

3>创表(CREAT)

示例:INSERT INTO t_student(name,age)VALUES(‘ZY’,18);

主键的设计原则:

DELETE FROM t_student WHERE age <= 10 OR age > 30;

SELECT 字段1,字段2,...FROM 表名;

判断是否存在,存在直接删除 DROP TABLE IF EXISTS 表名;

INSERT INTO 表名(字段1,字段2,...)VALUES (字段1的值,字段2的值,...);

利用外键约束可以用来建立与表之间的联系

第 n 页:LIMIT: 5* (n - 1) , 5;

SELECT 别名.字段1 ,别名.字段2,...FROM 表名 别名;

8>条件语句,用于只是要修改或删除某些记录的限制语句

UNIQUE : 指定字段的值必须唯一

示例:

第二页:LIMIT 5 , 5;

SELECT * FROM 表名; // 查询所以字段

SELECT 字段1 别名, 字段2 AS 别名,..FROM 表名 AS 别名;

注意:LIMIT后面的数值1不写的话,默认是第一个记录

11>计算记录的数量

示例:CREAT TABLE t_stdent ( id integer,name text,age inetger,score real);

SELECT *FROM t_student LIMIT 7;  相当于 SE;ECT * FROM t_student LIMIT 0 , 7;

这个外键的作用是用 t_student 表中的 class_id 字段引用t_class表的 id 字段

13>LIMIT

注意:数据库的字符用单引号’ ‘;

注意:上行示例代码会将t_student表中所以记录都删掉.

上行代码执行完查询的结果是:跳过最前面的4条记录,然后取8条记录

7>删除数据(DELETE)

SELECT count (字段) FROM 表名;

将t_student表中名字等于jack的记录的score字段在的值都改为age字段的值

第一页:LIMIT 0 , 5;

第三页:LIMIT 10 , 5;

15>主键

SELECT * FROM t_student ORDER BY age DESC; // 降序

WHERE 字段1  = 某个值 OR 字段2 = 某个值; // OR相当于C语言中的|

将t_student表中年龄大于10并且姓名不等于 jack 的记录的年龄都改成 5

左外连接: LEFT OUTER JOIN 保证左表数据的完整性

CREATE TABLE t_student ( id integer , name text NOT NULL UNUQUE ,age integer NOT NULL DEFAULT 1);  name 字段不能为NULL ,并且唯一  age 字段不能为NULL ,并且默认为1

1>SQLite语句的关键字: select insert update delete from create where desc order by group table alter view index...

16>外键约束

只要声明为PRIMARY KEY ,就说明是一个主键字段

2>SQLite数据存储的类型integer :整型值real :浮点值text :文本字符串blob :二进制数据 ( 比如文件 )

直接创建  CREAT TABLE 表名 (字段名1 字段类型1,字段名2 字段类型2,...);

使用LIMIT可以精确的控制查询结果的数量,比如每次只查询10条数据

SELECT * FROM t_student ORDER BY age, height DESC;

本文由澳门新葡萄京娱乐网站发布于MySQL数据库,转载请注明出处:SQL命令

关键词: