先加个目录把,这种文章没个导航实在太那啥了。
文章目录
但是,老实说,csdn这个目录结构插在文章开头实在太丑了,
还有就是缩进,虽然有部分是我的锅,但是---
写起来比较方便。
因为只有Windows且暂时不想整linux,所以本篇以及后续的几篇mysql教程,基本都是Windows下的,这个应该没什么影响。
下载安装什么的都不讲了,因为图方便,用了phpStudy里的mysql。
连接数据库
有两种方式,一种是cmd,一种是shell(win8以上),
无论哪种方式,都要先进到mysql的bin目录(我电脑里的路径是D:\phpStudy\MySQL\bin
)
有个快捷方法是先打开到这目录,然后按住shift,再右键鼠标:
然后win10用户会看到「在此处打开 PowerShell 窗口」,win7玩家对应的是「在此处打开命令窗口」,点击它就能直接在shell或cmd下进到这个目录里了。
然后运行mysql
,不过用shell时要注意前面带个.\
,即.\mysql
,不然会报错:
完整命令是
mysql -h 主机地址(域名/ip) -P 端口 -u 用户名 -p 密码
端口可以省略,默认为3306。
具体使用例子:
mysql -h 127.0.0.1 -u root -p root
使用用户名为root、密码为root的账号连接到本地的数据库,登录成功后显示如下:
创建数据库
命令为:create database 数据库名 charset 编码类型(常用utf8);
这里创建一个名为test_database
、以使用utf8编码存储信息的数据库:
create database test_database charset utf8;
一般是能创建成功的;如果创建出错,请善用其他渠道(搜索引擎、官方文档等)查找具体原因。
查询数据库列表
show databases;
这里的注意点只有database
后要加s
,还有记得打个英文分号作为每条语句的结尾,不然会一直等待输入,类似linux下的\
。
创建数据表
- 再在
test_database
这个数据库中创建一个名为表
首先,要使用use
语句进入test_database
这个数据库
然后使用create table
语句创建表,创建时要说明表和字段的相关信息
比如创建一个名叫
test_table
的表,
第一个字段类型为整数(int
),名为uid
,会自动增长(auto_increment
);
第二个字段类型为文本(varchar
),最大长度为20,名为name
,可空(null
)。
对应命令为:
create table test_table (
uid int auto_increment,
name varchar(20) null
);
这样会报错,说一个字段要能自动增长的话,必须设置为键(key
),
所以,这里要在auto_increment
前加上primary key
,完整命令如下:
create table test_table (
uid int primary key auto_increment,
name varchar(20) null
);
另外要注意,
这里用的是括号,在win7或者是什么系统下的cmd中,打出的括号跟比较符一样()
≠ <>
。
key
、null
这些是关键词,不区分大小写,所以也不能用来取名。
创建后仍然是用show
查看所有表,后面跟的是类型外加s
,如show
tables
,
使用desc
和asc
命令可以以降序和升序的形式列出表的字段信息。
操作表
在操作表之前,应该先使用use
命令指定数据库
格式即use 数据库名称;
不然每次操作都要先带个数据库名字.
列出所有表
语法格式
show tables [from 数据库名] [like 匹配规则];
- 中括号(
[]
)是不用输的,这里表示括号里的内容可省略 - 如果已经用
use
选择过数据库,那么可以省略from 数据库名
- 如果要列出所有表,则忽略
like 匹配规则
如要查看test_db
中的所有表,
- 一种是
use test_db;
show tables;
- 另一种是
show tables from test_db;
列出表名头为xx
的表
show tables like 'xx';
列出表名包含xx
的表
那就是'%xx%'
这个匹配规则,我在「另一篇博客中」有写到
查看字段(列)定义信息
语法格式
show columns from 表名 [from 数据库名] [like 匹配规则]
注意点同上,没有其他补充。
查看索引
语法格式:
show index from 表名 [from 数据库名]
列出数据表及其状态信息
语法格式:
show table status [from 数据库名] [like 匹配规则]
以降序形式输出列名
语法格式:
{desc / describe} 表名 [指定列名 / 匹配规则]
{}
为必须输入的部分
对另一张表进行复制,成为一张新表
同样用到create table
,语法格式:
create table 新表名 select * from 原表名;
不想把记录也复制过来
可以在最后面加个where 0
的失败子句:
只想复制出指定列
也可以指定范围
create table 新表名 [(key(列名1), key(列名2), ...)] select 列名1, 列名2, ... from 表名;
要使用其他列名(重命名)
可以在select
后使用as
:
create table 新表名 [(key(新列名1), key(新列名2), ...)] select 列名1 as 新列名1, 列名2 as 新列名2, ... from 表名;
增加一个字段 / 列
语法格式:
alter table 表名 add 新字段名 类型
修改字段 / 列类型
语法格式:
alter table 表名 modify 字段名 类型
重命名字段 / 列
语法格式:
alter table 表名 rename 新表名
操作数据
来几个极为普通的简单增删改查,
正因为如此,底下的语法说明也会非常简陋。
增加记录
语法格式:
insert into 表名
(字段名1, ...)
value
(值1, ...)
;
这里的换行是为了方便阅读,实际可以不换行,
不需要列出所有的字段名,根据情况提供,不提供的前提是该字段值可空,并且字段数量要和值数量一致
- 增加一条
uid
为1,name
为测试
的记录
- 增加一条没有
uid
(即自动创建),name
为678
的记录
批量增加记录
语法格式:
insert into 表名
(字段名1, ...)
value
(值1, ...),
(值2, ...),
...
;
查询记录
语法格式:
SELECT 字段名
FROM 表名
[WHERE 条件]
[LIMIT 查询数量][ OFFSET 查询偏移量]
这里暂时用不到最后两个,所以不做说明
查询当前表里的所有记录
因为是所有数据,所以不存在条件,也不用指定字段名(那就用*
):
- 查询
name
不为空的uid
本来应该要用is not null
,但name
似乎没有用null
存储,所以用了!= null
作为判断条件。
修改记录
语法格式:
update 表名
set 字段名 = 新值, ....
where 原记录值的信息
可以把这个过程理解成:
先用where
后的条件
查找出表名
中符合条件
的所有记录
,
然后将这些记录
的对应字段值
更新为新值。
- 将
name
为空的记录更新成无名
然而并没有修改成功
尝试把条件改成is null
,还是一样
然后乱七八糟的百度了下,其他人说是要借助子查询,然后又改了下语句 [3]
emm,还是错的,再百度了下,说是要套两层?好吧,再来一次
还不行,于是再百度(???),说加as
,不过位置也是个问题,于是试了一天后,终于成了?
见鬼的是,用phpMyAdmin就没毛病
最后我寻思了下,好像是因为cmd不支持数据库用的编码(utf8),
好吧,还是随便用个英语,比如none
成了,溜。放下代码,不多解释,开溜:
update test_table set name = "none"
where uid = (select * from (select uid from test_table where name = "") as tmp);
删除记录
语法格式:
delete from 表名
where 记录值的信息
执行过程和update
应该差不多,
套下上面的例子:
将 → 将name
为空的记录更新成none
name
为none
的记录删除
很顺利的成了,按照惯例接着丢出代码:
delete from test_table
where uid = (select * from (select uid from test_table where name = "none") as tmp);
丢几个比较实用的代码
清空表
truncate table 表名;
删除表
drop table 表名;
- 删库
跑路
drop database 库名;
获取记录数
把select
后面的字段改成count(*)
就行了
select count(*) from 'test_table';
参考资料:
[1] MySQL:创建、修改和删除表
[2] MySQL 查询数据
[3] mysql 同一个字段作为条件更新
[4] MYSQL提示 错误代码:1248 Every derived table must have its own alias