MySQL

MySQL

启动myslq

service mysql start

初始化MySQL

mysql_secure_installation

往下一直Y 直到人家谢谢你 初始化完成

Thanks for using MariaDB!
image-20220323185031535

登录MySQL

mysql -u root -p

这里密码为空,直接回车就可登入

image-20220323191532614

创建数据库

这里是root用户,可以使用mysqladmin来创建database

mysqladmin -u root -p create tutorials
create database tutorials

创建完成后show databases

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| joeybase           |
| joeychamber        |
| mysql              |
| performance_schema |
| turorials          |
+--------------------+
6 rows in set (0.000 sec)

使用root登录后

CREATE DATABASE IF NOT EXISTS SPACE DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

该命令的作用

    1. 如果数据库不存在则创建,存在则不创建
    1. 创建SPACE数据库,并设定编码集为utf8

删除数据库

mysqladmin -u root -p drop joeychamber
drop databse joeychamber
image-20220323192849702

再来show一遍

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| joeybase           |
| mysql              |
| performance_schema |
| turorials          |
+--------------------+
5 rows in set (0.000 sec)

FLOAT和DOUBLE差异

(单精度与双精度有什么区别)

最本质的区别:

单精度(float)在 32 位机器上用4个字节来存储的
双精度(double)是用8个字节来存储的,由于存储位不同,他们能表示的数值的范围就不同,也就是能准确表示的数的位数就不同

1、所占的内存不同

单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位
而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位

2、所存的数值范围不同

单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围大约是:-2.23E308 ~ 1.79E308
E表示10的多少次方,如3.4E38指的是3.4乘以10的38次方

3、十进制下的位数不同

单精度浮点数最多有7位十进制有效数字,如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入
双精度浮点数可以表示十进制的15或16位有效数字,超出的部分也会自动四舍五入

创建/删除表

create/drop table table_name
MariaDB [mysql]> create table joey_tbl(
    -> joey_id int not null auto_increment,
    -> joey_title varchar(100) not null,
    -> joey_author varchar(40) not null,
    -> submission_date date,
    -> primary key(joey_id)
    -> );
Query OK, 0 rows affected (0.023 sec)

插入数据

insert into table_name(field1,f2,f3...)
					values
					(values1,v2,v3...);

如果数据是字符型,必须使用单引号( ' )或者双引号( " )

MariaDB [mysql]> insert into joey_tbl
    -> (joey_title,joey_author,submission_date)
    -> values
    -> ("joey","Eggy","3/28");

Query OK, 1 row affected (0.000 sec)

查询语句SELECT

select _column,_column from _table [where Clause] [limit N][offset M]
  • select * : 返回所有记录
  • limit N : 返回 N 条记录
  • offset M : 跳过 M 条记录, 默认 M=0, 单独使用似乎不起作用
  • limit N,M : 相当于 limit M offset N , 从第 N 条记录开始, 返回 M 条记录
MariaDB [mysql]> select * from joey_tbl; #读取数据表
+---------+------------+-------------+-----------------+
| joey_id | joey_title | joey_author | submission_date |
+---------+------------+-------------+-----------------+
|       1 | joey       | Eggy        | 2020-03-28      |
+---------+------------+-------------+-----------------+
1 row in set (0.000 sec)

limit 应用

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15   
  
//如果只给定一个参数,它表示返回最大的记录行数目:    
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行   
  
//换句话说,LIMIT n 等价于 LIMIT 0,n。

WHERE子句

SELECT field1, field2,...fieldN FROM table_name1,table_name2... [WHERE condition1 [AND [OR]] condition2.....
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以使用 AND 或者 OR 指定>=1个条件。
  • WHERE 可运用于 SQL 的 DELETE 或者 UPDATE 命令。
  • WHERE 类似于 if 条件,根据 MySQL 表中的字段值来读取指定的数据
MariaDB [mysql]> select * from joey_tbl where joey_title="JOEY";
+---------+------------+-------------+-----------------+
| joey_id | joey_title | joey_author | submission_date |
+---------+------------+-------------+-----------------+
|       1 | joey       | Eggy        | 2000-03-28      |
+---------+------------+-------------+-----------------+
1 row in set (0.000 sec)

特殊条件

空值判断:is null

select * from joey_tbl where country is null;
#查询joey_tbl表country列中的空值

between and

select * from joey_tbl where id between 1 and 5;
#查询joey_tbl表中id列1到5的值

in

select * from joey_tbl where id in (1,3,5)
#查询joey_tbl表id列等于1,3,5的值

更新/删除

UPDATE

用来修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作

#update 表名称 set 列名称=新值 where 更新条件;
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE clause]
MariaDB [mysql]> update joey_tbl set submission_date="2020-03-28" where joey_id=1;
Query OK, 1 row affected (0.005 sec)
Rows matched: 1  Changed: 1  Warnings: 0

select * from joey_tbl;
+---------+------------+-------------+-----------------+
| joey_id | joey_title | joey_author | submission_date |
+---------+------------+-------------+-----------------+
|       1 | joey       | Eggy        | 2020-03-28      |
+---------+------------+-------------+-----------------+
1 row in set (0.000 sec)

DELETE

#DELETE FROM 表名称 where 删除条件;
DELETE FROM table_name [WHERE Clause]
select * from joey_tbl;
+---------+------------+-------------+-----------------+
| joey_id | joey_title | joey_author | submission_date |
+---------+------------+-------------+-----------------+
|       1 | joey       | Eggy        | 2020-03-28      |
+---------+------------+-------------+-----------------+

MariaDB [mysql]> DELETE from joey_tbl where joey_id=1;
Query OK, 1 row affected (0.001 sec)

MariaDB [mysql]> select * from joey_tbl;
Empty set (0.000 sec)

LIKE子句

SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

%:多个字符

_ :1个字符

M%:模糊查询信息为M开头的

%M%:查询包含M的所有内容

%M_:查询

MariaDB [mysql]> select * from joey_tbl;
+---------+------------+-------------+-----------------+
| joey_id | joey_title | joey_author | submission_date |
+---------+------------+-------------+-----------------+
|       2 | JOEY       | EGGY        | 2022-03-28      |
|       3 | JOEY       | EGGY        | 2022-03-28      |
|       4 | JOEY       | EGGY        | 2022-03-28      |
|       5 | JOEY       | EGGY.com    | 2022-03-28      |
|       6 | JOEY       | JOEY.com    | 2022-03-28      |
+---------+------------+-------------+-----------------+
5 rows in set (0.000 sec)

#SQL LIKE 子句中使用百分号 % 字符来表示任意字符
#如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的

MariaDB [mysql]> select * from joey_tbl where joey_author like '%com';
+---------+------------+-------------+-----------------+
| joey_id | joey_title | joey_author | submission_date |
+---------+------------+-------------+-----------------+
|       5 | JOEY       | EGGY.com    | 2022-03-28      |
|       6 | JOEY       | JOEY.com    | 2022-03-28      |
+---------+------------+-------------+-----------------+
2 rows in set (0.000 sec)

UNION

UNION 语句:查询不同表中相同列中的数据(不包括重复数据)

ALL:返回所有结果(包括重复数据)

DISTINCT:删除重复数据(默认UNION已经删除了重复数据)

#这是"joey_game"表的数据
MariaDB [mysql]> select * from joey_game;
+----+-------------------+-------+---------+
| id | name              | value | country |
+----+-------------------+-------+---------+
|  1 | Apex Legend       | free  | USA     |
|  2 | League of Legend  | free  | USA     |
|  3 | Rainbow six Siege | $30   | USA     |
+----+-------------------+-------+---------+
#这是"Eggy_game"表的数据
MariaDB [mysql]> select * from Eggy_game;
+----+---------------------+-------+---------+
| id | name                | value | country |
+----+---------------------+-------+---------+
|  1 | Dying light         | $40   | USA     |
|  2 | Oxygen Not Included | $30   | USA     |
|  3 | Elden Ring          | free  | USA     |
+----+---------------------+-------+---------+
#union
MariaDB [mysql]> select value from joey_game
    -> union
    -> select value from Eggy_game
    -> order by value;

+-------+
| value |
+-------+
| $30   |
| $40   |
| free  |
+-------+

#union all
MariaDB [mysql]> select value from joey_game
    -> union all
    -> select value from Eggy_game
    -> order by value;
    
+-------+
| value |
+-------+
| $30   |
| $30   |
| $40   |
| free  |
| free  |
| free  |
+-------+

ORDER BY

order by就是对结果排序

select * from joey_game order by id asc,game desc 
#默认升序,asc可省,desc降序,不写明ASC DESC的时候,默认是ASC

ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序

posted @ 2022-07-16 14:42  HeadmasterEggy  阅读(65)  评论(2)    收藏  举报