【Mysql数据库从0到1】-入门基础篇--sql语句简单使用
- 🔻一、数据库创建、删除、选择
- 1.1 🍃 `create database` 创建数据库
- 1.2 🍃 使用 `mysqladmin` 创建数据库
- 1.3 🍃 drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令
- 1.4 🍃 mysqladmin 命令删除数据库--一般不建议在数据库执行delete、drop等命令
- 1.5 🍃 选择数据库
- 🔻二、数据库数据类型
- 2.1 🍃 数值类型
- 2.2 🍃 日期/时间类型
- 2.3 🍃 字符串(字符)类型
- 🔻三、数据库表创建、删除、数据插入
- 3.1 🍃 `create table` 创建表
- 3.2 🍃 表中新增列、删除列
- 3.3 🍃 表中插入数据
- 3.4 🍃 清除表数据---一般不建议操作
- 🔻四、`select` 查询数据
- 4.1 🍃 没有子句的`select`
- 4.2 🍃 `select ... from`
- 4.2.1 🍃 列别名
- 4.2.2 🍃 去重
- 4.2.3 🍃 空值参与运算
- 4.2.4 🍃 着重号
- 4.2.5 🍃 查询常数
- 4.2.6 🍃显示表结构
- 4.2.7 🍃 过滤数据
- 🔻五、`update` 更新数据
- 🔻六、总结—温故知新
🔻一、数据库创建、删除、选择
1.1 🍃 create database
创建数据库
登陆 mysql 服务后,使用 create
命令创建数据库。
###语法###
create database 数据库名;
mysql> create database test001; ##创建名为test001的数据库
Query OK, 1 row affected (0.01 sec)
mysql>
1.2 🍃 使用 mysqladmin
创建数据库
root
用户拥有最高权限,可以使用 mysqladmin
命令在服务器终端来创建数据库。
###语法###
[root@db-server ~]# mysqladmin -u root -p create 数据库名
[root@db-server ~]# mysqladmin -u root -p create test002
Enter password:
[root@db-server ~]#
1.3 🍃 drop 命令删除数据库–一般不建议在数据库执行delete、drop等命令
因为在执行删除命令后,数据库里面所有数据都会消失
,删除数据库过程中,务必要十分谨慎。
###语法###
drop database 数据库名;
mysql> drop database test001; ##删除名为test001的数据库
Query OK, 0 rows affected (0.00 sec)
mysql>
1.4 🍃 mysqladmin 命令删除数据库–一般不建议在数据库执行delete、drop等命令
除了登录mysql 执行drop 命令外,还可以使用mysqladmin
命令在终端来执行删除命令。
###语法###
mysqladmin -u root -p drop 数据库名;
[root@db-server ~]# mysqladmin -u root -p drop test001
Enter password:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'test001' database [y/N] y
Database "test001" dropped
[root@db-server ~]#
1.5 🍃 选择数据库
连接到 MySQL 数据库后,可能有多个可以操作的数据库,可使用use
命令选择你要操作的数据库。
###语法###
use 数据库名;
mysql> use test01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> use dbtest01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
🔻二、数据库数据类型
mysql 数据类型大致可以分为三类:数值、日期/时间和字符串(字符)类型。
mysql 数据类型 | 说明 |
---|---|
整数类型 | tinyint、smallint、 mediumint、int(或integer)、 bigint |
浮点类型 | float、double |
定点数类型 | decimal |
位类型 | bit |
日期时间类型 | year、 time、date、datetime、timestamp |
文本字符串类型 | char、 varchar、tinytext、 text、 mediumtext、 longtext |
枚举类型 | enum |
集合类型 | set |
二进制字符串类型 | binary、varbinary、tinyblob、blob、mediumblob、longblob |
JSON类型 | json对象、json数组 |
空间数据类型 | 单值类型: geometry、 point、 linestring、polygon;集合类型: multipoint、multilinestring、multipolygon 、geometrycollection |
2.1 🍃 数值类型
mysql 中常见的数值类型存储大小和范围。
2.2 🍃 日期/时间类型
mysql 中常见的日期/时间类型存储大小及格式。
2.3 🍃 字符串(字符)类型
mysql 中常见的字符串数据类型及存储大小。
🔻三、数据库表创建、删除、数据插入
3.1 🍃 create table
创建表
###语法###
CREATE TABLE table_name (column_name column_type);
mysql> CREATE TABLE `t_user01`(
-> `id` INT UNSIGNED AUTO_INCREMENT, ##id自增
-> `name` VARCHAR(100) NOT NULL,
-> `author` VARCHAR(40) NOT NULL,
-> `create_date` DATE,
-> PRIMARY KEY ( `id` ) ##定义列为主键
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8; ##设置存储引擎,CHARSET 设置编码。
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show tables;
+------------------------+
| Tables_in_dbtest01 |
+------------------------+ |
| t_user01 |
+------------------------+
25 rows in set (0.00 sec)
3.2 🍃 表中新增列、删除列
###语法###
alter table 表名 add column_name column_type;
alter table 表名 drop column_name column_type;
#在t_user01 表后增加age列
mysql> alter table t_user01 add age varchar(12);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
#在t_user01 表中删除age列
alter table t_user01 drop column age;
mysql> alter table t_user01 drop column age;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
3.3 🍃 表中插入数据
###语法###
INSERT INTO 表名( 字段名1, 字段名2,...字段名n ) VALUES ( value1, value2,...valuen );
#### dbtest01.t_user01 插入一条数据
mysql> INSERT INTO `dbtest01`.`t_user01` (`id`, `name`, `author`, `create_date`) VALUES ('2', '李四', '李四', '2023-06-06');
Query OK, 1 row affected (0.00 sec)
mysql>
3.4 🍃 清除表数据—一般不建议操作
######语法####
delete from 表名 where 条件;
###表清空,删除全部数据
delete from 表名;
###清空数据,保留表结构
truncate table 表名;
###表结构包括数据一起删除
drop table 表名;
mysql> delete from t_user01 where id =2; ###删除id为2的数据
Query OK, 1 row affected (0.01 sec)
mysql>
🔻四、select
查询数据
4.1 🍃 没有子句的select
###语法###
select 1+3,2*3 from dual; ###dual --伪表
mysql> select 1+3,2*3;
+-----+-----+
| 1+3 | 2*3 |
+-----+-----+
| 4 | 6 |
+-----+-----+
1 row in set (0.00 sec)
mysql>
4.2 🍃 select ... from
###语法---查询指定字段###
select 字段1 ,字段2 ,字段n from 表名 where 条件;
###语法---查询所有字段###
select * from 表名 where 条件;
mysql> select id ,name ,sex,email from t_user;
+----+-----------------+------+---------+
| id | name | sex | email |
+----+-----------------+------+---------+
| 46 | 超级管理员 | 1 | abc@123 |
| 48 | 系统管理员 | 1 | abc@124 |
| 49 | test02 | 1 | abc@125 |
| 50 | 学生1 | 1 | abc@126 |
| 51 | 学生2 | 1 | abc@127 |
| 52 | 老师1 | 1 | abc@128 |
+----+-----------------+------+---------+
6 rows in set (0.00 sec)
mysql>
4.2.1 🍃 列别名
查询字段用别名表示(AS全称–alias(别名)可以省略),别名可以使用“”,引起来 ,如:字段1 AS "字段别名"
,不要使用单引号''
。
###语法--- ###
select 字段1 字段别名,字段2 字段别名 ,字段n 字段别名 from 表名 where 条件;
select 字段1 AS 字段别名,字段2 AS 字段别名 ,字段n AS 字段别名 from 表名 where 条件;
mysql> select id user_id ,name user_name,sex,email from t_user;
+---------+-----------------+------+---------+
| user_id | user_name | sex | email |
+---------+-----------------+------+---------+
| 46 | 超级管理员 | 1 | abc@123 |
| 48 | 系统管理员 | 1 | abc@124 |
| 49 | test02 | 1 | abc@125 |
| 50 | 学生1 | 1 | abc@126 |
| 51 | 学生2 | 1 | abc@127 |
| 52 | 老师1 | 1 | abc@128 |
+---------+-----------------+------+---------+
6 rows in set (0.00 sec)
mysql>
4.2.2 🍃 去重
使用 selct
语句查询数据的时候返回的是所有匹配的行,distinct
关键字用于消除重复的记录值。
distinct
关键字时需要注意以下几点:
-
distinct
关键字只能在select
语句中使用。 -
在对一个或多个字段去重时,
distinct
关键字必须在所有字段的最前面。 -
如果
distinct
关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。
select distinct 字段1 from 表名 where 条件;
mysql> select distinct utype from t_user;
+--------+
| utype |
+--------+
| 101003 |
| 101002 |
| 101001 |
+--------+
3 rows in set (0.00 sec)
mysql> select id ,name ,utype from t_user;
+----+-----------------+--------+
| id | name | utype |
+----+-----------------+--------+
| 46 | 超级管理员 | 101003 |
| 48 | 系统管理员 | 101003 |
| 49 | test02 | 101002 |
| 50 | 学生1 | 101001 |
| 51 | 学生2 | 101001 |
| 52 | 老师1 | 101002 |
+----+-----------------+--------+
6 rows in set (0.00 sec)
mysql>
错误语法:
mysql> select id , name ,distinct utype from t_user;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct utype from t_user' at line 1
mysql>
4.2.3 🍃 空值参与运算
- 空值:即某个字段值为
null
,空值表示值未知或者不知道
。 - null 不等同于
0
,''
,'null'
。 - 空值参与运算,值一定也为空。
###将所有年龄加一####
mysql> select id ,name ,age "年龄" , (1+age) "年龄加一" from t_user;
+----+-----------------+--------+--------------+
| id | name | 年龄 | 年龄加一 |
+----+-----------------+--------+--------------+
| 46 | 超级管理员 | 16 | 17 |
| 48 | 系统管理员 | NULL | NULL |
| 49 | test02 | 18 | 19 |
| 50 | 学生1 | NULL | NULL |
| 51 | 学生2 | 20 | 21 |
| 52 | 老师1 | NULL | NULL |
+----+-----------------+--------+--------------+
6 rows in set (0.00 sec)
mysql>
解决:使用IFNULL
关键字
IFNULL(age,0) ----如果age为null,则以0计算,否则以实际值计算。
mysql> select id ,name ,age "年龄" , (1+IFNULL(age,0)) "年龄加一" from t_user;
+----+-----------------+--------+--------------+
| id | name | 年龄 | 年龄加一 |
+----+-----------------+--------+--------------+
| 46 | 超级管理员 | 16 | 17 |
| 48 | 系统管理员 | NULL | 1 |
| 49 | test02 | 18 | 19 |
| 50 | 学生1 | NULL | 1 |
| 51 | 学生2 | 20 | 21 |
| 52 | 老师1 | NULL | 1 |
+----+-----------------+--------+--------------+
6 rows in set (0.00 sec)
mysql>
4.2.4 🍃 着重号
-
着重号: `` (键盘上数字1的左边的符号)。
-
解决关键字冲突 ,在sql语句中使用``(着重号)将冲突的名字括起来。
##order 为数据库关键字 表名与关键字冲突,查询会报错##
mysql> select * from order;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order' at line 1
mysql>
解决:使用``(着重号)
4.2.5 🍃 查询常数
- 在
select
语句的结果集增加一列或者几列固定的常数。
mysql> select '2023',id ,name ,age from t_user;
+------+----+-----------------+------+
| 2023 | id | name | age |
+------+----+-----------------+------+
| 2023 | 46 | 超级管理员 | 16 |
| 2023 | 48 | 系统管理员 | NULL |
| 2023 | 49 | test02 | 18 |
| 2023 | 50 | 学生1 | NULL |
| 2023 | 51 | 学生2 | 20 |
| 2023 | 52 | 老师1 | NULL |
+------+----+-----------------+------+
6 rows in set (0.00 sec)
mysql>
4.2.6 🍃显示表结构
- 创建完表之后,如何查看表结构,显示表中字段的详细信息 。
DESCRIBE
表名 —简写DESC
表名。show create table 表名\G
—查看创建表的具体语句,\G参数相当于格式化输出,使其输出内容具有较高的易读性。。
###显示t_user表中字段的详细信息###
mysql> DESCRIBE t_user;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id | varchar(32) | NO | PRI | NULL | |
| username | varchar(45) | NO | UNI | NULL | |
| password | varchar(96) | NO | | NULL | |
| salt | varchar(45) | YES | | NULL | |
| name | varchar(45) | NO | | NULL | |
| userpic | varchar(255) | YES | | NULL | |
| utype | varchar(32) | NO | | NULL | |
| birthday | datetime | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| email | varchar(45) | YES | | NULL | |
| phone | varchar(45) | YES | | NULL | |
| qq | varchar(32) | YES | | NULL | |
| status | varchar(32) | NO | | NULL | |
| create_time | datetime | NO | | NULL | |
| update_time | datetime | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
16 rows in set (0.00 sec)
4.2.7 🍃 过滤数据
使用where
关键字,根据过滤条件查询指定数据,将其声明在from
关键字后面。
limit n
---------表示输出前n行order by
字段名---------按字段名的首字母升序排序(默认升序)desc
--------降序排序,desc
只针对位于其前的字段降序- 大于(
>
)、小于(<
)、等于(=
)、大于等于(>=
)、小于等于(<=
)、不等于(!=或者<>
) AND
,OR
运算符---------AND
运算符(需要同时满足2个条件),OR
运算符(只需要满足1个条件即可)IN
或者NOT IN
运算符---------查询属于/不属于
列表的数据BETWEEN...AND
运算符 --------查询满足区间条件的数据LIKE
运算符-----------与%
或者_
组合使用,模糊查询,其中下划线_
只能代表一个字符,下划线_
匹配任意单个字符,百分号%
匹配任意数目的字符REGEXP
正则表达式--------用于搜索字符串数据,与LIKE
运算符相比,适用场景更加广泛
符号 | 作用 |
---|---|
^X | 匹配以 X 开头的数据 |
%X | 匹配以 X 结尾的数据 |
[X$] | 匹配结尾是X的数据 |
[a-c] | 匹配含a到c之间的数据(包含a和c) |
[a-c] l [d-h] | 匹配含a到c之间的数据(包含a和c)或者d到h之间的数据(包括d和h) |
NULL
运算符----------用于搜索空数据,用IS NULL
运算符就能找出空值
#### 查找 name 字段以 ’超’或着’系’字开头的数据
mysql> select id ,name ,age from t_user where name regexp '^[超系]';
+----+-----------------+------+
| id | name | age |
+----+-----------------+------+
| 46 | 超级管理员 | 16 |
| 48 | 系统管理员 | NULL |
+----+-----------------+------+
2 rows in set (0.00 sec)
mysql>
🔻五、update
更新数据
##语法###
update 表名 set 列名1=new-value1, 列名2=new-value2,... where 条件
mysql> update t_user set name='test' where id ='49';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
🔻六、总结—温故知新
❓ 数据库创建、删除、选择
❓ 数据库数据类型
❓ 表创建、删除、数据插入
❓ `select` 查询条件过滤数据
👈【上一篇】 |
💖The End💖 点点关注,收藏不迷路💖
| 【下一篇】👉 |