跳至主要内容

数据库(MySQL)编程之数据库和表的基本操作

http://ift.tt/2gOXg6X

 
 

数据库和表的基本操作

  1. 操作前的基本知识
    1. 基本
      1. sql语句不区分大小写(关键字建议用大小写),但字符串常量区分大小写
      2. sql语句可单行或多行书写,以; 结尾
      3. 关键字不能跨行或简写
      4. 可以用空格或者缩进来提高可读性
    2. 注释
      1. sql标准
        1. /**/ :多行注释
        2. "--":单行注释
      2. mysql标准:
        1. "#":单行注释
        2. "COMMENT":为字段或列添加注释
  2. 创建和查看数据库
    1. 创建数据库
      1. 模板

CREATE DATABASE [IF NOT EXISTS ] db_name

create_specification:

  1. IF NOT EXITSTS :检查数据库是否存在,如果存在就不创建
  2. creat_specification:创建条件
    1. CHARACTER SET:制定数据聚采用的字符集
    2. COLLATE:制定数据库字符集的比较方式
    3. DEFAULT:表示默认内容,即使没有制定该项,也有默认的值

#创建数据库使用字符集为UTF-8,使用规则为uftf_bin

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE uft8_bin;

  1. 一般默认的数据库就是utf8 和utf8_bin的比较方式,因此一般创建数据库的时候都用

CREATE DATABASE db_name

mysql> create database testdb;

Query OK, 1 row affected (0.02 sec)

  1. 查看数据库
    1. 命令
      1. SHOW DATABASES

         
         

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sakila |

| sys |

| testdb |

| world |

+--------------------+

7 rows in set (0.00 sec)

  1. 这是查看所有的数据库
  1. SHOW CREATE DATABASE db_name

mysql> show create database testdb;

+----------+-----------------------------------------------------------------+

| Database | Create Database |

+----------+-----------------------------------------------------------------+

| testdb | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+----------+-----------------------------------------------------------------+

1 row in set (0.00 sec)

  1. 这是查看创建db_name这个数据库的时候进行的操作,可以看到默认都是用了set utf8字符集
  1. 修改数据库
    1. 修改数据库编码格式语句
      1. ALTER DATABASE [ IF NOT EXITSTS ] 数据库名 DEFAULT CHARACTER SET 编码方式 COLLATE 编码方式_bin

mysql> alter database testdb DEFAULT CHARACTER SET GBK;

Query OK, 1 row affected (0.01 sec)

 
 

需要修改数据的地方 就用alter

  1. 删除数据库
    1. 数据库删除语句格式
      1. DROP DATABASE [IF EXISTS ] db_name

mysql> drop database testdb;

Query OK, 0 rows affected (0.00 sec)

  1. drop 是整个都删除, 后面还有delete是删除内容,但是结构并没有删除

 
 

  1. 数据类型


  2. 数据表
    1. 创建或者使用表的时候,都要选择好数据库
      1. 使用语句:use db_name来选择数据库

mysql> use testdb;

Database changed

  1. 创建数据表
    1. 格式
      1. CREATE TABALE 表名(

        字段名 1,数据类型 [完整性约束条件],

        字段名2,数据类型[完整性约束条件],

        ...

        字段名n,数据类型[完整性约束条件]

        );

      2. 例子:

mysql> CREATE TABLE TANKINFO(tankID int ,direciton int COMMENT'朝向',posX int,posY int );

Query OK, 0 rows affected (0.06 sec)

  1. 查看数据表
    1. 语句
      1. SHOW TABLES; 显示所有的数据表

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| tankinfo |

+------------------+

1 row in set (0.00 sec)

 
 

  1. 显示数据表创建语句(show create table 表名;)

mysql> show create table tankinfo;

+----------+----------------------------------------------------------------------------

| Table | Create Table

|

 
 

+----------+----------------------------------------------------------------------------

| tankinfo | CREATE TABLE `tankinfo` (

`tankID` int(11) DEFAULT NULL,

`direciton` int(11) DEFAULT NULL COMMENT '朝向',

`posX` int(11) DEFAULT NULL,

`posY` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+----------+----------------------------------------------------------------------------

1 row in set (0.01 sec)

  1. 查看数据表
    1. DESCRIBE 表名; -->简写 DESC 表名;

mysql> describe tankinfo;

+-----------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| tankID | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

+-----------+---------+------+-----+---------+-------+

4 rows in set (0.00 sec)

 
 

 
 

mysql> desc tankinfo;

+-----------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| tankID | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

+-----------+---------+------+-----+---------+-------+

4 rows in set (0.00 sec)

 
 

  1. 修改数据表
    1. 修改表名称
      1. 格式
        1. RENAME TABLE 表名 TO 新表名

mysql> rename table tankinfo to tank_test;

Query OK, 0 rows affected (0.02 sec)

 
 

mysql> show tables;

+------------------+

| Tables_in_testdb |

+------------------+

| tank_test |

+------------------+

1 row in set (0.00 sec)

  1. 添加新的字段
    1. 格式
      1. ALTER TABLE 表名 ADD 新字段 数据类型 [类型][FIRST | AFTER 已存在的字段名];
        1. FIRST :将新添加的字段放在第一个字段
        2. AFTER:将新添加的字段放在已存在的字段之后
    2. 示例1

mysql> alter table tank_test add name varchar(10);

Query OK, 0 rows affected (0.07 sec)

Records: 0 Duplicates: 0 Warnings: 0

 
 

mysql> desc tank_test;

+-----------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+-------------+------+-----+---------+-------+

| tankID | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

| name | varchar(10) | YES | | NULL | |

+-----------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

  1. 添加字段默认是放在最后一个的

 
 

  1. 示例2

mysql> alter table tank_test add blood int first;

Query OK, 0 rows affected (0.08 sec)

Records: 0 Duplicates: 0 Warnings: 0

 
 

mysql> desc tank_test;

+-----------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+-------------+------+-----+---------+-------+

| blood | int(11) | YES | | NULL | |

| tankID | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

| name | varchar(10) | YES | | NULL | |

+-----------+-------------+------+-----+---------+-------+

6 rows in set (0.00 sec)

 
 

  1. first是把字段加到第一个位置
  1. 示例3

mysql> alter table tank_test add isCrash int after tankID;

Query OK, 0 rows affected (0.08 sec)

Records: 0 Duplicates: 0 Warnings: 0

 
 

mysql> desc tank_test;

+-----------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+-------------+------+-----+---------+-------+

| blood | int(11) | YES | | NULL | |

| tankID | int(11) | YES | | NULL | |

| isCrash | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

| name | varchar(10) | YES | | NULL | |

+-----------+-------------+------+-----+---------+-------+

7 rows in set (0.00 sec)

  1. after 是在某个字段的后面添加
  1. 修改字段名称
    1. 格式
      1. ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型

mysql> alter table tank_test change name TankName varchar(10);

Query OK, 0 rows affected (0.01 sec)

Records: 0 Duplicates: 0 Warnings: 0

 
 

mysql> desc tank_test;

+-----------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+-------------+------+-----+---------+-------+

| blood | int(11) | YES | | NULL | |

| tankID | int(11) | YES | | NULL | |

| isCrash | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

| TankName | varchar(10) | YES | | NULL | |

+-----------+-------------+------+-----+---------+-------+

7 rows in set (0.00 sec)

  1. 修改字段的数据类型
    1. 格式
      1. ALTER TABLE 表名 MODIFY 字段名 数据类型;

mysql> alter table tank_test modify TankName int ;

Query OK, 0 rows affected (0.09 sec)

Records: 0 Duplicates: 0 Warnings: 0

 
 

mysql> desc tank_test;

+-----------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| blood | int(11) | YES | | NULL | |

| tankID | int(11) | YES | | NULL | |

| isCrash | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

| TankName | int(11) | YES | | NULL | |

+-----------+---------+------+-----+---------+-------+

7 rows in set (0.00 sec)

  1. 删除字段
    1. 格式
      1. ALTER TABLE 表名 DROP 字段名;

mysql> alter table tank_test drop blood;

Query OK, 0 rows affected (0.08 sec)

Records: 0 Duplicates: 0 Warnings: 0

 
 

mysql> desc tank_test;

+-----------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-----------+---------+------+-----+---------+-------+

| tankID | int(11) | YES | | NULL | |

| isCrash | int(11) | YES | | NULL | |

| direciton | int(11) | YES | | NULL | |

| posX | int(11) | YES | | NULL | |

| posY | int(11) | YES | | NULL | |

| TankName | int(11) | YES | | NULL | |

+-----------+---------+------+-----+---------+-------+

6 rows in set (0.00 sec)

  1. 删除数据表
    1. 格式
      1. DROP TALBE 表名;

mysql> drop table tank_test;

Query OK, 0 rows affected (0.02 sec)

 
 

<

p style="margin-left: 54pt"> 
 

The post 数据库(MySQL)编程之数据库和表的基本操作 appeared first on cole.

http://ift.tt/eA8V8J sql September 08, 2017 at 09:29PM

评论

此博客中的热门博文

反Hook 之自己实现GetProcAddress和LoadLibraryA(c++ version)

http://ift.tt/2AocAD0 // 课上练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //要实现的功能: /* 自己实现GerProcAddress LoadLibraryA */ //思路: /* GerProcAddress和LoadLibraryA都是在Kernel32.dll中的 首要的任务就是找到Kernel32.dll,然后遍历IAT就能找到这两个函数 现在首要的难点就是如何找到kernel32.dll() 通过dll的加载顺序可以找到,而且虽然需要使用未文档化的API,但是好在windgb可以直接看,而且用到的也并不是很多 懒得去晚上搜了,直接自己实现一个得了,作为演示,能用就行(最好还是搜一个正规的结构体) */ /* 0: kd> dt _TEB /a nt!_TEB +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //首先实现部分TEB结构体,因为只需要用的PEB的部分,所以实现到这就ok了 */ //构建 TEB typedef struct _TEB { //保证0x30是peb的结构体就ok了 struct _tem { DWORD a1; DWORD a2; DWORD a3; DWORD a4; DWORD a5; DWORD a6; DWORD a7; DWORD a8; DWORD a9; DWORD a10; ...

IDA动态调试ELF中遇到的问题(1)

https://ift.tt/2Gxnf2F 遇到 got SIGCHLD singal(child status has changed)...这种提示 singal fork了子进程 直接点yes,然后继续单步执行,出来提示 pass to application就行了 内存查看 用od习惯了之后,凡事都想右键看一下内存,但是IDA中好像没有那么如意, 目前只是在栈中右键发现有查看hex的选项 动态调试的时候的nop ida保存动态调试的时候修改的数据 方法一:在程序运行的时候保存 The post IDA动态调试ELF中遇到的问题(1) appeared first on cole . https://ift.tt/2q9Qf5g WHATEVER April 05, 2018 at 09:44AM