Dos相关命令
# 需要进入MYSQL的bin目录下执行
# 连接到MYSQL服务,注意-P为大写
mysql -h 主机IP -P 端口 -u 用户名 -p密码
# 主机IP为本地localhost,端口3306,用户名root,密码admin
mysql -h localhost -P 3306 -u root -padmin
1. 创建数据库
# 可以往“数据库名”后面空格添加其他一些设置属性
create database 数据库名;
-
character set 字符集
:设置数据库编码字符集,默认为utf8
-
collate utf8 字符集校对规则
:设置字符集校对规则,常用的有utf8 bin
【区分大小写】,utf8 general ci
【不区分大小写,默认为此】
2. 查看、删除数据库
# 查看当前使用的数据库
select database();
# 查看数据库
show databases;
# 查看创建这个数据库时使用的语句
show create database 数据库名称;
# 删除一个数据库
drop database 数据库名;
3. 数据库备份
同样需要在管理员身份运行
DOS
并进入bin
目录才能执行语句
# 备份数据库到指定文件夹
mysqldump -u 用户名 -p密码 -B 数据库1 数据库2 数据库n > D:\文件名.sql
# 备份具体数据库中的某些表
mysqldump -u 用户名 -p密码 数据库 表1 表2 表n > D:\文件名.sql
# 在mysql服务下使用,可以将sql文件的内容全部执行即恢复数据
source sql文件路径;
4. 创建表
# 如果变量中有关键字需要用''将关键字圈起来
create table 表名(
变量名 类型,
# 若要添自增(auto_increment)等附加功能可以添加在同一行
……
)[character set 字符集 collate 校对规则 engine 存储引擎];
建表关键字
用法都是在建表时,加在变量类型后边,顺序没啥要求
default xxx
:设置默认值,当插入数据无此列值时,会自动用默认值xx
填充not null
:标注了此关键字的列插入数据时列值不允许为NULL
【其可以的default
配合,不传数据时就用default
填充】auto_increment
自增长
- 一般来说自增长是和
primary key
配合使用的 - 自增长也可以单独使用【但是需要配合
unique
】 - 自增长修饰的字段为整数型的
- 自增长默认从
1
开始,也可以通过如下命令修改起始值
alter table 表名 auto increment = 新的开始值;
- 如果添加数据时,给自增长字段【列】指定的有值,则以指定的值为准。不过一般来说如果指定了自增长就按照自增长的规则来添加数据
5. 数据类型
5.1 数值型
在能满足需求的情况下,尽量选择存储空间小的,
int
和double
可以满足现实绝大多数要求
数据类型 | 含义 | 对应范围 |
tinyint | 极小整数 | |
smallint | 小整数 | |
mediumint | 中等整数 | |
int | 大整数 | |
bigint | 超大整数 | |
float | 单精度浮点数 | |
double | 双精度浮点数 | |
decimal | 精确小数 | 小数点前可以指定不大于65的位数,小数点后可以指定不大于30的位数,不产生误差 |
5.2 字符型
数据类型 | 含义 | 对应范围 |
char | 固定长度字符串 | 长度 |
varchar | 可变长度字符串 | 1-65532字节,字符数取决于编码 |
text | 长文本字符串 | 长度 |
longtext | 极长的文本字符串 | 长度 |
字符型使用细节
char(4)
里的4
表示字符数【最大255
】,而不是字节数,不管是中文还是字母都是放4
个,按字符计算varchar
是按照字节编码的,不同的字符集对应的字节数量不同,因此size
最大不一定为65532
char(4)
是定长的,即使只插入aa
,也会占用分配的4
个字符的空间.varchar(4)
是变长的,就是说,如果你插入了aa
,实际占用空间大小并不是4
个字符,而是按照实际占用空间来分配。同时varchar
本身还需要占用1-3
个字节来记录存放内容长度,所以实际大小会多上1-3
字节- 查询速度
char > varchar
如果数据是定长,推荐使用char
,比如md5
的密码,身份证号码等
如果一个字段的长度是不确定,我们使用varchar
,比如留言,文章 - 在存放文本时,也可以使用
Text
数据类型。可以将Text
列视为varchar
列,注意Text
不能有默认值【即不需要在定义时加小括号填数值】,如果希望存放更多字符,可以选择longtext
5.3 日期型
日期常用类型数据有三种:
-
date
:形如2023-03-29
-
datetime
:形如2023-03-29 11:55:33
-
timestamp
:形如形如2023-03-29 11:55:33
【形式与datetime
一样,目前不清楚使用上二者有何差别】
CREATE TABLE t(
birthday DATE, #生日
job_time DATETIME, #年月日时分秒
#时间戳,默认为当前时间,表每次insert和update后时间戳也更新
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO t(birthday,job_time) VALUES('2020-01-01','2022-01-01 10:10:10');
SELECT * from t;
6. 操作表
# 查看当前表结构
desc 表名;
6.1 修改表结构
# 表改名
Rename table 原名 to 新名;
# 改表字符集
alter table 表名 character set 字符集;
# 删除表
drop table 表名;
# 修改表编码
alter table 表名 convert to character set utf8;
# 查询数据库的所有表名
select table_name from information_schema.`TABLES` where TABLE_SCHEMA = '数据库名';
6.1.1 增列结构
# 默认新列加在最后一列位置
alter table 表名 add 列名 列类型 列参数;
# 新列加在指定列后
alter table 表名 add 列名 列类型 列参数 after 指定列名;
# 新列加在第一列位置
alter table 表名 add 列名 列类型 列参数 first;
6.1.2 修改列类型
# 修改列类型
Alter table 表名 modify 列名 新类型 新参数;
# 修改列名及列类型
Alter table 表名 change 旧列名 新列名 新类型 新参数;
6.1.3 删除列结构
alter table 表名 drop 列名;
6.1.4 修改列位置
# 将列位置修改到指定列之后
alter table 表名 add 列名 列类型 列参数 after 指定列名;
# 将列位置修改到第一列
alter table 表名 add 列名 列类型 列参数 first;
6.2 增删改查
6.2.1 增insert
# 若不声明列名,则默认插入所有列
insert into 表名 (列名) values (对应列名数据,可一次加多行数据);
6.2.2 删delete
# 删除满足条件的【整行】数据,若无表达式则删除所有记录
delete from 表名 where 表达式;
6.2.3 改update
# 若没有where语句则会修改所有列内容
update 表名 set 列名1=新值1,列名2=新值2 where 表达式(限定范围);
6.2.4 查select
# 列名为*则选择所有列,在列名前加distinct可以去重【完全一样才去重】
select 列名 from 表名 where 表达式;
# select中的列名可看作变量,因此可以进行运算,运算后的结果加as可以产生新列名
# 将stu表中的 score列值与score2列值相加,为其命名为temp并和name一起显示
select name,(score+score2) as temp from stu;
6.3 where过滤
where
可以根据条件过滤掉不符合条件的内容
6.4 like模糊查询
like
是模糊查询,%
表示0
到多个任意字符,_
表示单个任意字符
# 查看stu表中姓 张 的所有同学
select * from stu where name like '张%';
6.5 order by结果排序
order by
指定排序的列,排序的列既可以是表中的列名,也可以是select
语句后指定的列名。
order by
可以按照多列排序,用逗号隔开
# 将stu表按照score列逆序排序【默认为asc,即顺序】
select * from stu order by score desc;
6.6 group by分组统计
group by 列名
会把同样列值的分为一组,同时我们应该想到,分组后其余非分组条件的列会被压缩,因此需要用聚合函数【比如sum
求和】对这些列值进行处理
group by
同样可以按照多列分组,用逗号隔开
# 查看stu表中生日相同的学生中的得分平均值
select avg(score) from stu group by birthday;
6.7 having二次过滤
having
是对过滤结果的补充过滤,通常放在group by
后面
# 查看stu表中生日相同的学生中的得分平均值超过60的分数
select avg(score) as mean_score from stu
group by birthday
having mean_score>60;
6.8 limit分页显示
limit length
:从头开始取length
条数据
limt startIndex,length
:从startIndex
【开头为0
】开始取length
条数据
limit length offset startIndex
:含义同上