MySQL操作命令

MySQL操作命令

优化配置

因为正常启动MySQL过于繁琐,所以使用前建议配置启动脚本

shell 复制代码
[root@server mysql]# vim /usr/lib/systemd/system/mysqld.service
shell 复制代码
[Unit]
Description=MySQL Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=notify
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535
LimitNPROC=65535
Restart=on-failure
RestartPreventExitStatus=1
TimeoutSec=0

[Install]
WantedBy=multi-user.target
shell 复制代码
[root@master mysql]# systemctl daemon-reload
[root@master mysql]# systemctl enable --now mysqld.service

配置完成后就可以所以systemctl开启MySQL服务端

shell 复制代码
[root@master mysql]# systemctl start mysqld.service

登录MySQL命令配置

shell 复制代码
[root@server mysql]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@server mysql]# vim /etc/profile
# 在该文件第二行添加下述内容
export PATH=$PATH:/usr/local/mysql/bin
[root@server mysql]# source /etc/profile
[root@server mysql]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr
/local/mysql/bin

配置完成后便可通过命令登录MySQL服务器

shell 复制代码
[root@server ~]# mysql -uroot -p
Enter password:

在创建用户的时候,会自动生成一个初始密码,但是初始密码难以记忆,所以通常我们在登录MySQL后会修改用户密码,所使用的命令为

以root为例

mysql 复制代码
alter user 'root'@'localhost' identified by '123456';

基础命令

MySQL通配符

%:匹配任意个任意字符

---:匹配一个任意字符

查看数据库/表--show

mysql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| student1                |
+-------------------------+
1 row in set (0.00 sec)

以为现实中数据库/表的数量非常多,所以可以搭配通配符进行筛选

mysql 复制代码
mysql> show databases like 's%';
+---------------+
| Database (s%) |
+---------------+
| sys           |
+---------------+
1 row in set (0.00 sec)

show 也可以查看数据库其他信息

mysql 复制代码
mysql> select now();   #查看数据库当前时间
mysql> select version();  #查看数据库版本
mysql> select user();  #查看数据库的登录用户

创建数据库/表--create

mysql 复制代码
create database #数据库名称;


create table #表名(表选项);
#实例
mysql> create table student1(id int,name varchar(30), sex char(2), age int unsigned, score float, addr varchar(50));

配合show可以查看创建数据库/表使用的语句

mysql 复制代码
#数据库
mysql> show create database testdb;
#或
mysql> show create database testdb\G
#表
mysql> show create table student1\G

通过反引号可以创建特殊名称的数据库

mysql 复制代码
mysql> create database `database`;

查看当前数据库

mysql 复制代码
mysql> select database();

切换数据库--use

mysql 复制代码
mysql> use #数据库名称;

删除数据库/表--drop

mysql 复制代码
mysql> drop database #数据库名称;
mysql> drop table #表名;

查看表格式--desc

复制代码
desc #表名
mysql 复制代码
mysql> desc student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | YES  |     | NULL    |       |
| name  | varchar(30)  | YES  |     | NULL    |       |
| sex   | char(2)      | YES  |     | NULL    |       |
| age   | int unsigned | YES  |     | NULL    |       |
| score | float        | YES  |     | NULL    |       |
| addr  | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

查看表内容

复制代码
select * from 表名

写入内容

复制代码
insert into 表名  value(每一列内容);

insert into 表名(指定列)  value(指定列内容);

修改表名

复制代码
alter table #旧表名 rename #新表名
或
rename table #旧表名 to #新表名
mysql 复制代码
mysql> alter table student2 rename student3;

mysql> rename table student3 to student4;

新增列

复制代码
alter table #表名 add #新列名 #选项 #目标列名
mysql 复制代码
mysql> alter table student1 add passwrod char(8);  #默认从后面添加

mysql> alter table student1 add notes varchar(30) after age;  #指定列前

mysql> alter table student1 add aa int first;  #新增第一列

删除列

复制代码
alter table 表名 drop 列名;

修改列名

复制代码
alter table 表名 change 旧列名 新列名 列类型;

修改列类型

复制代码
alter table 表名 modify 列名 新列类型;

修改列位置

复制代码
alter table 表名 modify 列名 列类型 after 某列;

alter table 表名 modify 列名 列类型 first;

与新增列类似

复制表

复制表结构

复制代码
create table 新表名 like 源表名

复制表内容

复制代码
insert into 表名 select * from 源表名;

复制表内容加结构

复制代码
create table 新表名 select * from 源表名;

语法约束

约束分为表级约束和列级约束:

列级约束:在列信息的后面写入

复制代码
create table 表名(列名 类型 约束);

#修改
alter table 表名 modify 列名 类型 约束(!!!若不添加约束即为删除)

表级约束:所有列信息后添加

复制代码
create table 表名(列信息, constraint 约束 约束类型(要约束的列名))
#添加
alter table 表名 add [constraint 约束名] 约束类型(要约束的列名)
 #删除
alter table 表名 drop 约束类型 约束名

不能直接修改表级约束,需删除后在添加

非空约束

列级约束,输入不能为空

复制代码
not null

null或不写即为删除该约束

默认值约束

列级约束,当输入为空时,默认写入的值

复制代码
default '默认的值'

列描述--comment

列级约束,没有实际意义,单纯描述列信息

复制代码
comment '信息'

主键约束

但设置主键约束,那么该列的数据便具有唯一性,切不能为空。

一张表只能有一个主键

但可以添加复合主键,同时约束多列

一般主键为列级约束,符合主键为表级约束

复制代码
primary key

主键自增长

给主键添加自增长的数值;系统会从已经有的最大值+1,得到一个新的不同的值。

自增长必须是整数,如果不设置初始值,默认从1开始递增

约束的字段必须具备NOT NULL属性

设置自增长的命名

复制代码
auto_increment

指定自增长的起始值:如果第一个记录设置了字段的初始值那么新增的自增长会从他那个初始值+1,例如第一条记录的序号为100,那么再插入记录会从100往上加

唯一性约束

因为一张表中有很多字段需要唯一性,但是一张表中只能有一个主键,唯一键可以解决表中有多个字段需要唯一性约束的问题

作用:限制某个字段/某列的值不能重复

唯一键和主键的关系:

主键只能有一个,唯一键可以有多个

主键和唯一键不是对立关系而是补充关系,一张表中可以有一个主键,也可以同时具有多个唯一键

示例

复制代码
create table t4( id int primary key, name varchar(20) unique comment '名子
不能重名,可以为空' );

如果插入数据的过程中两个人的名字一致会提示插入失败,这个是唯一键的作用

注意:就算唯一键冲突,他的自增长字段值不连续。

例如A,B,C,D,B,C重名,依次填入A为1,B为2,C填不进去后去改了个名字又能填入了但是C为4,D为5

外键约束

外键约束也是为了表的完整性存在

概念

主表(父表):被引用的表、被参考的表

从表(子表):引用别人的表,参考别人的表

外键:从表中的某个字段引用自主表的某个字段或多个字段

引用键:主表被引用的字段

外键约束主要定义在从表上,主表则必须是有主键约束或唯一键约束.当定义外键后要求外键列数据必须在主表的主键列存在或为null.

代码关联:主在后从在前

复制代码
foreign key (从表的字段名称) references 主表名字(主表的字段名称)

注意:

  1. 规则:外键值要么在主表主键存在,要么为NULL;主表主键不能空
  2. 要求:主表先建好、被引用字段是主键/候选键;外键和主表主键数量、类型一致;支持自参照(自己引用自己)
  3. 作用:插入从表数据时自动校验,维护表关联完整性

检查约束

检查约束(check):校验字段值,限制取值范围,过滤无效数据。

非空、默认约束属于特殊check。

MySQL8.0.16前仅语法不生效,8.0.16后强制生效。

设置检查约束的代码

复制代码
check(salary>0 and salary<10000)

限制的取值范围为0~10000

复制代码
check_id check(id>0)

检查id一定要大于0的字段

删除表的约束

删除not null约束、default约束
复制代码
alter table 表名 modify 列名 类型; 
删除unique约束
复制代码
alter table 表名 drop index 惟一约束名; 
删除primary key约束
复制代码
alter table 表名 drop primary key; 
删除foreign key约束
复制代码
alter table 表名 drop foreign key 外键名; 
删除check约束
复制代码
alter table 表明 drop check 约束名;
相关推荐
鸢尾掠地平1 小时前
MySQL之DML(含例子)
数据库·mysql
香蕉大香蕉(06敬畏市场)2 小时前
MySQL 单点详解(06)
java·数据库·mysql·博客·实习
CodeHackerBhx2 小时前
MySQL 迁达梦踩坑实录:FIND_IN_SET、timestamp(6) 和一整批要改的函数
数据库·mysql·达梦·信创·数据库迁移
n 55!w !1082 小时前
MySQL笔记整理2
数据库·笔记·mysql
aiks_yuan2 小时前
MySQL 批量插入很慢怎么办:rewriteBatchedStatements 实测 10 万行从 4.5 秒到 1 秒(JDBC、MyBatis、LOAD DATA 对比)
mysql
用户60709759149062 小时前
AOSP 14 OTA 升级指导(三):三条升级链路——Java API、自研 HAL 与 TR069
android
企业数字化笔记3 小时前
业务单据怎样接入流程中心?启动条件、实例关联与失败回退
java·spring boot·mysql
betazhou3 小时前
MySQL Oracle官方备份工具
数据库·mysql·oracle
一万年太久。3 小时前
mysql主从复制
数据库·mysql