美文网首页
SQL学习十四、创建和操纵表

SQL学习十四、创建和操纵表

作者: 沐左 | 来源:发表于2018-10-24 10:49 被阅读0次

    多数 DBMS都具有交互式创建和管理数据库表的工具,表也可以直接用 SQL语句操纵。这里我主要结合移动端数据库SQLite 来讲解相关的表操作。

    SQLite 的操作方式可以看做是一种更简单的文件操作方式。


    SQL

    创建表

    对于不同的 DBMS,要编写不同的表创建脚本,因为有些DBMS数据类型的支持不一样。

    • 建表,允许为Null 和不允许为Null的字段
    CREATE TABLE `oderlist_new` (
        `id`    INTEGER NOT NULL,
        `goodsName` TEXT,
        `quantity`  integer,
        `item_price`    real,
        `orderNo`   text,
        `userId`    INTEGER,
        `userName`  TEXT,
        `orderTime` TEXT,
        `supplierId`    INTEGER,
        PRIMARY KEY(`id`)
    );
    
    • 建表的时候指定默认值
    CREATE TABLE `oderlist_new` (
        `id`    INTEGER NOT NULL,
        `goodsName` TEXT,
        `quantity`  integer default 1,
        `item_price`    real,
        `orderNo`   text,
        `userId`    INTEGER,
        `userName`  TEXT,
        `orderTime` TEXT,
        `supplierId`    INTEGER,
        PRIMARY KEY(`id`)
    );
    

    更新表

    1、应该尽量避免在表中包含数据时对其进行更新,而应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动;
    2、可以新增字段,但是不要删除和修改字段。

    ALTER TABLE 表名
    ADD 字段 字段类型(字段长度限制)
    
    • 对新的订单表增加一个supplierName字段,长度设为255
    alter table oderlist_new
    add supplierName text(255)
    
    执行结果

    注意:
    使用 ALTER TABLE 要极为小心,应该在进行改动前做完整的备份(表 结构和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的 列,也许无法删除它们。类似地,如果删除了不应该删除的列,可能 会丢失该列中的所有数据。


    删除表

    DROP TABLE 表名 
    
    • 删除刚才创建的订单表
    DROP TABLE oderlist_new
    
    执行结果

    重命名表

    每个 DBMS对表重命名的支持有所不同。
    DB2、MariaDB、MySQL、Oracle和 PostgreSQL用户使用 RENAME 语句;
    SQL Server用户使用sp_rename 存储过程;
    SQLite用户使用 ALTER TABLE 语句。


    SQLite in Android

    SQLiteDatabase

            //1、SQLiteDatabase 数据库对象的操作
            //创建或打开数据库
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase();
            //打开数据库
            SQLiteDatabase.openDatabase();
            //执行SQL,没有返回值
            db.execSQL();
            //插入数据
            db.insert();
            //更新数据
            db.update();
            //删除数据
            db.delete();
            //查询
            Cursor cursor = db.query();
            Cursor rawCursor = db.rawQuery();
            //开启事务
            db.beginTransaction();
            //结束事务
            db.endTransaction();
            //当前上下文是否处于事务中
            db.inTransaction();
    
            //2、Cursor 游标对象的操作
            //游标的移动,正数向下移动,负数向上移动
            cursor.move();
            //移动到第一行
            cursor.moveToFirst();
            //移动到最后一行
            cursor.moveToLast();
            //移动到下一行
            cursor.moveToNext();
            //移动到上一行
            cursor.moveToPrevious();
            //移动到指定行
            cursor.moveToPosition();
            //游标移动到对应行之后,就可以通过游标实体的get方法去获取对应列的值了
    

    SQLiteOpenHelper

    https://developer.android.google.cn/reference/android/database/sqlite/SQLiteOpenHelper

    用于创建、升级、打开SQLiteDatabase

            //3、SQLiteOpenHelper 管理数据库的工具类
            SQLiteOpenHelper helper = new MySQLiteOpenHelper();
            //以读写的方式打开数据库
            SQLiteDatabase readableDatabase = helper.getReadableDatabase();
            //以写的方式打开数据库
            SQLiteDatabase writableDatabase = helper.getWritableDatabase();
            //关闭打开的SQLite数据库
            helper.close();
    ...
    
        /**
         * 1、实际项目中很少使用SQLiteDatabase的方法来打开数据库
         * 2、一般都是继承SQLiteOpenHelper类,来管理SQLiteDatabase
         * 3、通过SQLiteOpenHelper来获取SQLiteDatabase实例来进行相关数据库操作
         */
        private class MySQLiteOpenHelper extends SQLiteOpenHelper{
    
            public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
                super(context, name, factory, version);
            }
    
            @Override
            public void onCreate(SQLiteDatabase db) {
                //初次生成数据库时的回调
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                //数据库版本发生改变时的回调
    
            }
        }
    

    相关文章

      网友评论

          本文标题:SQL学习十四、创建和操纵表

          本文链接:https://www.haomeiwen.com/subject/ijfwzftx.html