mysql基础操作

先加个目录把,这种文章没个导航实在太那啥了。

但是,老实说,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中,打出的括号跟比较符一样()<>
keynull这些是关键词,不区分大小写,所以也不能用来取名

创建后仍然是用show查看所有表,后面跟的是类型外加s,如show tables
使用descasc命令可以以降序和升序的形式列出表的字段信息。


操作表

在操作表之前,应该先使用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(即自动创建),name678的记录
批量增加记录

语法格式:

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 → 将namenone的记录删除

很顺利的成了,按照惯例接着丢出代码:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值