我要系列|MySQL 的「增、删、改、查」

MySQL

新海跟我说:「MySQL 可以学学,挺简单的,记住四个字:增、删、改、查。」

于是乎,我就开始学了。

启动MySQL

默认你已经在Mac 里安装好XAMPP 之后,先启动MySQL 。

问:如何在Mac 的Terminal 里面打开MySQL ?

/Applications/xampp/xamppfiles/bin/mysql -u root -p

接着输入你的MySQL 密码即可。

创建数据库

使用CREATE DATABASE 语句可完成对数据库的创建,创建命令的格式如下:

create database 数据库名称 [其他选项];

举例,创建名为samp_db 的数据库,在Terminal 执行此命令:

create database samp_db character set gbk;

为了便于在Terminal 显示中文,在创建时通过character set gbk 将数据库字符编码指定为gbk 。创建成功时为得到Query OK, 1 row affected(0.02 sec) 的响应。

注意: MySQL 语句以分号; 作为语句的结束,若在语句结尾没有添加分号,Terminal 会以-> 提示你继续输入(有个别特例,但加分号是一个好习惯);

提示: 可以使用show databases; 命令查看已经创建了哪些数据库。

选择数据库

要对数据库进行操作,必先选择该数据库,否则会提示错误:

ERROR 1046(3D000): NO database selected

两种方法对数据库进行选择:

  • 在登录数据库时指定,mysql -D 所选择的数据库名称 -h 主机名 -u 用户名 -p ,然后会让你输入密码,以我们刚刚建的数据库为例:

/Applications/XAMPP/xamppfiles/bin/mysql -D samp_db -u root -p

  • 在登录后,使用USE 语句指定,use 数据库名称; USE 语句可以不加分号,以我们刚刚建的数据库为例:

use samp_db;

选择成功后会提示:Database changed

创建数据表

使用CREATE TABLE 语句来对表进行创建,创建形式create table 表名称 (列声明); 以创建students 表为例,表中将放入学号(id)、姓名(name)、性别(sex)、年龄(age)、联系电话(tel) 这些内容,代码如下:

1
2
3
4
5
6
7
8
create table students
(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-" // 这里千万不能有逗号!!
);

语句解说:

  • create table tablename (columns) 为创建数据表的命令,列的名称以及该列的数据类型将在括号里面完成;

  • 括号内声明包括了5列内容,id、name、sex、age、tel 是每列的名称,后面跟的是数据类型描述,列与列的描述之间用逗号, 隔开;

  • id int unsigned not null auto_increment primary key 这一行为例进行介绍:

    • id 为列的名称;
    • int 指定该列的类型为 int (取值范围为-8388608 到8388607),在后面我们又用unsigned 加以修饰,表示该类型为无符号型,此时该列的取值范围为0 到16777215 ;
    • not null 说明该列的值不能为空,必须要填,如果不指定该属性,默认可为空;
    • auto_increment 需在整体列中使用,其作用是在插入数据时若该列为NULL,MySQL 将自动产生一个比现存值更大的标识符值。在每张表中仅能有一个这样的值且所在列必须为索引列。需要理解!
    • primary key 表示该列是表的主键,本列的值必须唯一,MySQL 将自动索引该列。
  • char(8) 表示存储的字符长度为8;

  • tinyint 的取值范围为 -127 到128;

  • default 属性指定当该列值为空时的默认值。

提示:

  • 使用show tables 命令可查看已创建了表的名称;
  • 使用describle 表名称 命令可查看已创建的表的详细信息。

对于一些较长的语句在Terminal 下写可能容易出错,因此我们可以通过任何文本编辑器(如sublime text)将语句输入好后保存为createtable.sql 的文件中,通过Terminal 下的文件重定向执行该脚本。在Terminal 中输入:

/Applications/XAMPP/xamppfiles/bin/mysql -D samp_db -u root -p < createtable.sql

提示:

  • createtable.sql 若不在当前工作目录下需要指定文件的完整路径

四字真经(入门版)

增:向表中插入数据

INSERT 语句可以用来将一行或多行数据插到数据库表中,使用的一般形式如下:

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

其中[] 内的内容是可选的,例如:要给samp_db 数据库中的students 表插入一条记录,执行语句:

insert into students values (NULL, "小明", "男", 20, "13822932301");

按回车键确认后若提示Query Ok, 1 row affected (0.05 sec) 表示数据插入成功。若插入失败请检查是否已选择需要操作的数据库。

有时我们只需要插入部分数据,或者不按照列的顺序进行插入,可以使用这样的形式进行插入:

insert into students (name, sex, age) values ("孙悦", "女", 21);

如果要向数据库的表里面一次添加多条数据怎么办?你可以觉得多次调用INSERT 语句不就可以了吗?但使用这种方法会增加服务器的负荷,因为,执行每次,SQL 服务器都要同样对SQL 进行分析、优化等操作。幸好MySQL 提供了另一种解决方法,就是使用一条INSERT 语句来插入多条记录。这并不是标准的SQL 语法,因此只能在MySQL 中使用。

1
2
insert into students (name, sex, age)
values ("小龙", "男", 25), ("大龙", "女", 23), ("小红", "女", 32);

上面的INSERT 语句向students 表中连续插入了3 条记录。值得注意的是,上面的INSERT 语句中的VALUES 后必须每一条记录的值放到一对(…)中,中间使用, 分割。假设有一个表table1

create table table1(n int);

如果要向table1 中插入5条记录,下面写法是错误的:

insert into table1 (i) values(1,2,3,4,5);

MySQL 将会抛出下面的错误:

ERROR 1136: Column count doesn't match value count at row 1

而正确的写法应该是这样:

insert into table1 (i) values(1),(2),(3),(4),(5);

当然,这种写法也可以省略列名,这样每一对括号里的值的数目必须一致,而且这个数目必须和列数一致。如:

insert into table1 values(1),(2),(3),(4),(5);

增:添加列

基本形式:

alter table 表名 add 列名 列数据类型 [after 插入位置];

示例:

在表的最后追加列 address:

alter table students add address char(60);

在名为 age 的列后插入列 birthday:

alter table students add birthday date after age;

删:删除表中的数据

DELETE 语句用于删除表中的数据, 基本用法为:

delete from 表名称 where 删除条件;

你真这么删了,再导入的时候发现,傻了,ID 怎么一去不复返了?那你就得用到它了truncate

truncate table mytable;

就是清空数据库,但是表的 ID 还是从 1 开始哦!

使用示例:

删除id为2 的行:

delete from students where id=2;

删除所有年龄小于21 岁的数据:

delete from students where age<20;

删除表中的所有数据:

delete from students;

删:删除列

基本形式:

alter table 表名 drop 列名称;

示例:

删除 birthday 列:

alter table students drop birthday;

删:删除整张表

基本形式:

drop table 表名;

示例:

删除 workmates 表:

drop table workmates;

删:删除整个数据库

基本形式:

drop database 数据库名;

示例:

删除samp_db 数据库:

drop database samp_db;

改:更新数据表中的数据

UPDATE 语句可用来修改表中的数据, 基本的使用形式为:

update 表名称 set 列名称=新值 where 更新条件;

使用示例:

id 为5 的手机号改为默认的”-“:

update students set tel=default where id=5;

将所有人的年龄增加1:

update students set age=age+1;

将手机号为13288097888 的姓名改为 “张伟鹏”, 年龄改为19:

update students set name="张伟鹏", age=19 where tel="13288097888";

改:修改列

基本形式:

alter table 表名 change 列名称 列新名称 新数据类型;

示例:

将表tel 列改名为telphone:

alter table students change tel telphone char(13) default "-";

将name 列的数据类型改为char(16):

alter table students change name name char(16) not null;

改:重命名表

基本形式:

alter table 表名 rename 新表名;

示例:

重命名students 表为workmates:

alter table students rename workmates;

WHERE 语句于指定查询条件, 用法形式为:

select 列名称 from 表名称 where 条件;

以查询所有性别为女的信息为例, 输入查询语句:

select * from students where sex="女";

WHERE 语句不仅仅支持where 列名 = 值 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like 等等。

还可以对查询条件使用orand 进行组合查询, 以后还会学到更加高级的条件查询方式, 这里不再多做介绍。

示例:

查询年龄在21岁以上的所有人信息:

select * from students where age > 21;

查询名字中带有 “王” 字的所有人信息:

select * from students where name like "%王%";

查询id小于5且年龄大于20的所有人信息:

select * from students where id<5 and age>20;

四字真经(进阶版)

增:从.csv 等外部文件导入数据

MongoDB 的操作备忘

安装

用的是 conda install

使用

  1. 新建了一个 /data/db 的文件夹

  2. 给文件夹权限

启动方式

  1. mongod

启动环境

  1. mongo

启动数据库

关闭方式

  1. 强制关闭 MongoDB(不建议使用);

service mongod stop

  1. 或者,从MongoDB的admin中关闭(推荐用这种方法):
1
2
3
4
> use admin   
switched to db admin
> db.shutdownServer()
server should be down...
  1. 或者

mongod --shutdown

------ EOF ------
David Fnck wechat

⬇⬇~ 挖 矿 打 赏 系 统 ~⬇⬇

启动线程数当前算力(Hashs/秒)您已贡献(Hash单位:个)

点击 Coin Hive 挖矿教程 学习如何配置博客打赏!

欢迎留下您的评论