数据库的五个概念

  1. 数据库服务器
  2. 数据库
  3. 数据表
  4. 数据字段
  5. 数据行

那么这里下面既是对上面几个概念进行基本的日常操作。

数据库引擎使用

这里仅仅只介绍常用的两种引擎,而InnoDB是从MySQL 5.6.版本以后InnoDB就是作为默认启动使用的存储引擎。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(1) InnoDB
a,支持ACID,简单地说就是支持事务完整性、一致性;
b,支持行锁,以及类似ORACLE的一致性读,多用户并发;
c,独有的聚集索引主键设计方式,可大幅提升并发读写性能;
d,支持外键;
e,支持崩溃数据自修复;
InnoDB设计目标是处理大容量数据库系统,它的CPU利用率是其它基于磁盘的关系数据库引擎所不能比的。
它是一个可靠地事务处理引擎,不支持全文本搜索

(2) MyISAM
a,不支持 每次查询具有原子性
b,只支持表所
c,强调的是性能,其执行数 度比InnoDB类型更快,但是不提供事务支持
d,如果执行大量的SELECT,MyISAM是更好的选择
e,缺点:就是不能在表损坏后恢复数据。(是不能主动恢复)

既然知道了这俩种引擎的优缺点,那么写一下几个常用的API操作。

1
2
3
4
5
6
7
8
9
show engines;   --显示所有可用的引擎

show table status from myDB; --查看myDB数据库下的所有表使用的引擎

show create table 表名; --指定查看表名的所有段名以及引擎

create table 表名(id int primary key, name varchar(50)) engine=MyISAM; --建表的时候指定引擎

alter table 表名 Engine= MyISAM; --建完表后修改引擎为MyISAM

当然,也可以通过修改配置文件my.ini在[mysqld]最后添加为上default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB。

Node使用mysql示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var mysql  = require('mysql');  

var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});

connection.connect();

var sql = 'SELECT * FROM websites';
//查
connection.query(sql,function (err, result) {
if(err){
console.log('[SELECT ERROR] - ',err.message);
return;
}

console.log('--------------------------SELECT----------------------------');
console.log(result);
console.log('------------------------------------------------------------\n\n');
});

connection.end();

query方法第一个参数是sql语句,第二参数是callback

数据库操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>net start mysql  //启动数据库和停止net stop mysql

>mysql -u root -p //默认登陆本机(-h是主机地址)

>SELECT USER(); //显示当前用户

>create database 数据库名; //创建数据库

>SELECT DATABASE(); //显示当前使用数据库

>SHOW DATABASES //显示所有数据库列表

>USE DATABASE 库名; //使用该数据库

>DROP DATABASE 库名 //删除数据库

>CMD终端:mysqladmin -u用户名 -p旧密码 password 新密码 //修改密码

>mysql语句:set password for 用户名@localhost = password('新密码');

数据表操作

1
2
3
4
5
6
7
8
9
10
11
>SHOW TABLES;   //列出库中所有的表

>DESCRIBE table1; //查看表结构

>show columns from 数据表; //显示表的所有段名以及类型

>CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1)); //增加数据表和字段名

>DROP TABLE 表名; //删除表

>alter table stu rename as students; //将旧表明stu改为新表明students。

表字段操作

添加字段

1
2
3
4
语法:ALTER TABLE 表名 ADD COLUMN 字段名 字段类型 DEFAULT NULL;

示例:ALTER TABLE dictionary ADD COLUMN calss VARCHAR(10) DEFAULT NULL;
-- dictionary是表名

修改字段名称

1
2
3
语法:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段类型 DEFAULT NULL;

示例:ALTER TABLE dictionary CHANGE calss class VARCHAR(10) DEFAULT NULL;

删除字段

1
2
3
语法:ALTER TABLE 表名 DROP COLUMN 字段名

示例:ALTER TABLE dictionary DROP COLUMN calss;

批量增加字段

1
2
3
4
5
6
bagin;                                           //事务开始
alter table em_day_data add f_day_house7 int(11);
alter table em_day_data add f_day_house8 int(11);
alter table em_day_data add f_day_house9 int(11);
alter table em_day_data add f_day_house10 int(11);
commit; //提交事务,事务结束

数据增删改查

MySQL语句忽略大小写的。每张数据表只能存在一个主键。

Tip: 由于数据表的首个字段名(就是主键,假如是id)是不能重复命名的(建议使用id,因为每张表只能存在一个主键),所以建议删除的时候使用(where id=1)键名来定位匹配更好。

1
2
var  sql = 'SELECT * FROM websites';   --查询整个websites表所有数据
var sql = 'SELECT name FROM websites'; --查询整个websites表name字段数据

1
2
3
4
-- websites表必须存在(Id,name,url,alexa,country)这些字段名
var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(2,"taobao","http://wwww.taobao.com","3","CN")';

insert into table1(id,name,url,country) values(6,"lucas","https://wwww.lucas.com","CN");

1
2
3
4
-- where是定位到上面的增加数据(可以使用任何"字段名=值"来匹配),并更改俩个数据
var modSql = 'UPDATE websites SET name = "facebook",url = "http://www.facebook.com" WHERE Id = 2';

var modSql = 'update websites SET alexa="12" where name="taobao"'; --定位name字段为taobao并更新了alexa字段的值

1
2
3
4
var delSql = 'DELETE FROM websites where id=2';  -- 删除id=2的数据(当然)

-- 删除name=lucas的数据(建议使用id,因为每张表只能存在一个主键),因为他会将表中所有name=lucas的值全部删除
delete from websites where name="lucas";