Mysql-CURD
常用登陆参数
# 常用参数: -h:--host=name 服务器名称 -D:--database=name 打开指定数据库 -p:--password[=name] 密码 -u:--user=name 用户名 -P:--port=# 端口号 -V:--version 输出版本信息 --prompt=name 设置提示符 # 常用命令: mysql -u root -p # 默认登陆本机部署的数据库 mysql -u root -p -h 127.0.0.1 -P 3306 # 指定数据地址并指明端口
数据库操作
# 创建库 mysql> create database test; Query OK, 1 row affected (0.17 sec) # 查看库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | | zabbix | +--------------------+ 6 rows in set (0.00 sec) # 删除库 mysql> drop database test; Query OK, 0 rows affected (0.04 sec) # 修改库 # 举例:修改test数据库的字符编码 mysql> alter database test character set 'gbk'; Query OK, 1 row affected (0.01 sec) # 查看数据仓库的编码 mysql> show create database test; +----------+-------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+-------------------------------------------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+-------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) # 切换数据库 mysql> use test; Database changed # 查看当前数据库 mysql> select database(); +------------+ | database() | +------------+ | test | +------------+ 1 row in set (0.00 sec)
Mysql数据类型
数值类型
日期时间类型
字符串类型
数据表CURD
创建数据表
语法: CREATE TABLE table_name (column_name column_type); 例: CREATE TABLE `user` ( `id` int(11) NOT NULL, `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(80) NOT NULL COMMENT '密码', `describe` text COMMENT '描述', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime COMMENT '修改时间', `is_banned` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否禁用', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否逻辑删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # 查询当前数据库所有数据表 mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | user | +----------------+ 1 row in set (0.01 sec) # 查询表结构 mysql> desc user; +------------+-------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+-------------------+-------------------+ | id | int | NO | PRI | NULL | | | username | varchar(50) | NO | | NULL | | | password | varchar(80) | NO | | NULL | | | describe | text | YES | | NULL | | | created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | datetime | YES | | NULL | | | is_banned | tinyint(1) | NO | | 0 | | | is_deleted | tinyint(1) | NO | | 0 | | +------------+-------------+------+-----+-------------------+-------------------+ 8 rows in set (0.00 sec)
修改表结构
语法: ALTER TABLE <表名> [修改选项] # 增加字段 语法:ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST|AFTER 已存在的字段名] 例: mysql> alter table user add iphone int(11) AFTER `password`; Query OK, 0 rows affected, 1 warning (0.05 sec) Records: 0 Duplicates: 0 Warnings: 1 mysql> desc user; +------------+-------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+-------------------+-------------------+ | id | int | NO | PRI | NULL | | | username | varchar(50) | NO | | NULL | | | password | varchar(80) | NO | | NULL | | | iphone | int | YES | | NULL | | | describe | text | YES | | NULL | | | created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | datetime | YES | | NULL | | | is_banned | tinyint(1) | NO | | 0 | | | is_deleted | tinyint(1) | NO | | 0 | | +------------+-------------+------+-----+-------------------+-------------------+ 9 rows in set (0.01 sec) # 修改字段 语法:ALTER TABLE <表名> MODIFY <字段名> <数据类型> 例: mysql> alter table user modify iphone varchar(11); Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc user; +------------+-------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+-------------------+-------------------+ | id | int | NO | PRI | NULL | | | username | varchar(50) | NO | | NULL | | | password | varchar(80) | NO | | NULL | | | iphone | varchar(11) | YES | | NULL | | | describe | text | YES | | NULL | | | created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | datetime | YES | | NULL | | | is_banned | tinyint(1) | NO | | 0 | | | is_deleted | tinyint(1) | NO | | 0 | | +------------+-------------+------+-----+-------------------+-------------------+ 9 rows in set (0.00 sec) # 删除字段 语法:ALTER TABLE <表名> DROP <字段名>; 例: mysql> alter table user drop iphone; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc user; +------------+-------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+-------------------+-------------------+ | id | int | NO | PRI | NULL | | | username | varchar(50) | NO | | NULL | | | password | varchar(80) | NO | | NULL | | | describe | text | YES | | NULL | | | created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | datetime | YES | | NULL | | | is_banned | tinyint(1) | NO | | 0 | | | is_deleted | tinyint(1) | NO | | 0 | | +------------+-------------+------+-----+-------------------+-------------------+ 8 rows in set (0.00 sec) # 修改字段名 语法:ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>; 例: mysql> alter table user change `describe` `desc` text COMMENT '描述'; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc user; +------------+-------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+-------------------+-------------------+ | id | int | NO | PRI | NULL | | | username | varchar(50) | NO | | NULL | | | password | varchar(80) | NO | | NULL | | | desc | text | YES | | NULL | | | created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | datetime | YES | | NULL | | | is_banned | tinyint(1) | NO | | 0 | | | is_deleted | tinyint(1) | NO | | 0 | | +------------+-------------+------+-----+-------------------+-------------------+ 8 rows in set (0.00 sec) # 修改表名称 语法:ALTER TABLE <旧表名> RENAME [TO] <新表名>; 例: mysql> alter table `user` rename to `users`; Query OK, 0 rows affected (0.01 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | users | +----------------+ 1 row in set (0.00 sec)
添加表数据
语法1: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 例: mysql> insert into `users` (`id`, `username`, `password`, `desc`) values (1, 'zabbix', 'pwd0', 'zabbix用户'); Query OK, 1 row affected (0.00 sec) mysql> insert into `users` (`id`, `username`, `password`, `is_deleted`) values (2, 'xiaoming', 'pwdxiaoming', 1); Query OK, 1 row affected (0.00 sec) 语法2: INSERT INTO table_name VALUES ( value1, value2,...valueN ); mysql> insert into `users` values (3, 'xiaoli', 'pwdxiaoli', '小丽用户', '2022-03-23 10:40:35', '2022-03-23 10:40:35', 0, 0); Query OK, 1 row affected (0.00 sec) 注意:两种方式的语法都可以执行,语法2注意写全
查看表数据
语法:select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句]; # 查看users表所有数据 mysql> select * from users; +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ | id | username | password | desc | created_at | updated_at | is_banned | is_deleted | +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ | 1 | zabbix | pwd0 | zabbix用户 | 2022-03-23 11:23:15 | NULL | 0 | 0 | | 2 | xiaoming | pwdxiaoming | NULL | 2022-03-23 11:25:13 | NULL | 0 | 1 | | 3 | xiaoli | pwdxiaoli | 小丽用户 | 2022-03-23 10:40:35 | 2022-03-23 10:40:35 | 0 | 0 | +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ # 查询全部的某几个字段 mysql> select username, password from users; +----------+-------------+ | username | password | +----------+-------------+ | zabbix | pwd0 | | xiaoming | pwdxiaoming | | xiaoli | pwdxiaoli | +----------+-------------+ 3 rows in set (0.00 sec) # distinct 去重 mysql> select distinct is_deleted from users; +------------+ | is_deleted | +------------+ | 0 | | 1 | +------------+ 2 rows in set (0.00 sec) 注意:多字段用,间隔开 # where语句 # where语句 基于值: where 字段 =值 ;查找出对应字段等于对应值的记录。(相似的,<是小于对应值,<=是小于等于对应值,>是大于对应值,>=是大于等于对应值,!=是不等于),例如:where name = 'lilei' like:where 字段 like 值 ;功能与 = 相似 ,但可以使用模糊匹配来查找结果。例如:where name like 'li%' 基于值的范围: in: where 字段 in 范围;查找出对应字段的值在所指定范围的记录。例如:where age in (18,19,20) not in : where 字段 not in 范围;查找出对应字段的值不在所指定范围的记录。例如:where age not in (18,19,20) between x and y :where 字段 between x and y;查找出对应字段的值在闭区间[x,y]范围的记录。例如:where age between 18 and 20。 条件复合: or : where 条件1 or 条件2… ; 查找出符合条件1或符合条件2的记录。 and: where 条件1 and 条件2… ; 查找出符合条件1并且符合条件2的记录。 not : where not 条件1 ;查找出不符合条件的所有记录。 &&的功能与and相同;||与or功能类似,!与not 功能类似。 例 mysql> select * from users where username='zabbix'; +----+----------+----------+--------------+---------------------+------------+-----------+------------+ | id | username | password | desc | created_at | updated_at | is_banned | is_deleted | +----+----------+----------+--------------+---------------------+------------+-----------+------------+ | 1 | zabbix | pwd0 | zabbix用户 | 2022-03-23 11:23:15 | NULL | 0 | 0 | +----+----------+----------+--------------+---------------------+------------+-----------+------------+ mysql> select * from users where id>1; +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ | id | username | password | desc | created_at | updated_at | is_banned | is_deleted | +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ | 2 | xiaoming | pwdxiaoming | NULL | 2022-03-23 11:25:13 | NULL | 0 | 1 | | 3 | xiaoli | pwdxiaoli | 小丽用户 | 2022-03-23 10:40:35 | 2022-03-23 10:40:35 | 0 | 0 | +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ mysql> select * from users where is_banned=0 and is_deleted=1; +----+----------+-------------+------+---------------------+------------+-----------+------------+ | id | username | password | desc | created_at | updated_at | is_banned | is_deleted | +----+----------+-------------+------+---------------------+------------+-----------+------------+ | 2 | xiaoming | pwdxiaoming | NULL | 2022-03-23 11:25:13 | NULL | 0 | 1 | +----+----------+-------------+------+---------------------+------------+-----------+------------+
# SQL语句查询复杂性太多了,再次就不详细叙述了...
# 想要继续了解的同学,参考:https://www.cnblogs.com/progor/p/8786133.html
# 继续学习group by、order by、limit、having等句式语法
修改表数据
语法:UPDATE <表名> SET 字段1=值1[,..字段n=值n] [WHERE 子句] [ORDER BY 子句] [LIMIT 子句] 例: mysql> update users set username='zabbix1' where username='zabbix'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select username from users; +----------+ | username | +----------+ | zabbix1 | | xiaoming | | xiaoli | +----------+ mysql> update users set is_banned=1,is_deleted=0 where id=2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from users; +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ | id | username | password | desc | created_at | updated_at | is_banned | is_deleted | +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+ | 1 | zabbix1 | pwd0 | zabbix用户 | 2022-03-23 11:23:15 | NULL | 0 | 0 | | 2 | xiaoming | pwdxiaoming | NULL | 2022-03-23 11:25:13 | NULL | 1 | 0 | | 3 | xiaoli | pwdxiaoli | 小丽用户 | 2022-03-23 10:40:35 | 2022-03-23 10:40:35 | 0 | 0 | +----+----------+-------------+--------------+---------------------+---------------------+-----------+------------+
删除表数据
语法:DELETE FROM table_name [WHERE Clause] mysql> delete from users where id=3; Query OK, 1 row affected (0.01 sec) mysql> select * from users; +----+----------+-------------+--------------+---------------------+------------+-----------+------------+ | id | username | password | desc | created_at | updated_at | is_banned | is_deleted | +----+----------+-------------+--------------+---------------------+------------+-----------+------------+ | 1 | zabbix1 | pwd0 | zabbix用户 | 2022-03-23 11:23:15 | NULL | 0 | 0 | | 2 | xiaoming | pwdxiaoming | NULL | 2022-03-23 11:25:13 | NULL | 1 | 0 | +----+----------+-------------+--------------+---------------------+------------+-----------+------------+