Mysql基础命令笔记

MYSQL基础

1.DDL语句

数据库/表的创建、删除

--创建数据库
create database 数据库名 charset=utf8

--删除数据库
drop database test1

--创建表
CREATE TABLE tablename(
    column_name_1 column_type_1 constraints,
    column_name_2 column_type_2 constraints,)

--删除表
DROP TABLE tablename
  • column_name 是列的名字
  • column_type 是列的数据类型
  • constraints是这列的约束条件

修改表操作

--修改表类型
ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST\AFTER col_name]
	--修改表emp的ename字段,将archar(10)改为varchar(20)
	ALTER TABLE emp MODIFY ename varchar(20);

--增加表字段
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST\AFTER col_name]
    --在表emp中新增加字段age,类型为int(3)
    ALTER TABLE emp ADD  age int(3)
    
--字段改名
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition[FIRST\AFTER col_name]
	--将age 改名为age1,同时修改字段类型为int(4)
	ALTER TABLE emp CHANGE age age1 int(4)

--修改字段排列顺序
  使用[FIRST\AFTER col_name]来实现
  --将新增的字段birth date 加在ename之后
  ALTER TABLE emp ADD birth  DATE after ename
  
--更改表名
  ALTER TABLE tablename RENAME [TO] new_tablename

DML语句

DML操作是指对数据库中记录的操作,主要包括表记录的插入、更新、删除和查询

--插入记录
INSERT INTO tablename (field1,field2...) VALUES(value1,value2...)(value1,value2...)
  --也可以不指定字段名称,但是values后的顺序应该和字段的排列顺序一致

--更新记录
UPDATE tablename SET field1=value1,field2=value2... [WHERE CONDITION]

--删除记录
DELETE FROM tablename [WHERE CONDITION]
DELETE t1,t2... FROM t1,t2...[WHERE CONDITION]
  --delete a,b from emp a, dept b where a.deptno=b.deptno and a.deptno=3;

查询语句

查询不重复的记录 ,可以使用distinct关键字来实现

排序和限制,可以使用ORDER BY关键字来实现

​ DESC表示按照字段进行降序排列,ASC则表示升序排列,默认升序

聚合

集合操作的语法:
SELECT [field1,field2...] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,...fiedln]
[WITH ROLLUP]
[HAVING where_contition]
  • func_name表示要做的聚合操作,也就是聚合函数,常用的有sum、count、max、min
  • GROUP BY 关键字表示要进行分类聚合的字段
  • WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总
  • HAVING关键字表示对分类后的结果再进行条件的过滤

注意:having 和where的区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤

表连接

表连接分为内连接和外连接,主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。

--内查询:
select ename,deptname from emp,dept where emp.deptname=dept.deptname;
--左连接
select ename,deptname from emp left join dept on emp.deptname=dept.deptname;

子查询:

当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询。
用于子查询的关键字包括 in、not in、 =、!=、exists、not exists等。

记录联合

将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起,可以使用union 和union all 关键字来实现。

SELECT * FROM t1
UNION\UNION ALL
SELECT * FROM t2

UNION 和 UNION ALL的区别是UNION 会去重

Mysql支持的数据类型

数值类型

1.整数类型

--整数类型
TINYINT  SMALLINT  MEDIUMINT  INT  INTEGER BIGINT 
--浮点数
FLOAT  DOUBLE
--定点数类型
DEC(M,D)  DECIMAL(M,D)

在整数类型中,MySQL支持在类型名称后面的小括号内制定显示宽度,例如int(5)表示当数值宽度在小于5为的时候在数字前面填满宽度,如果不显示制定宽度则默认为int(11). 一般配合zerofill使用。

mysql> alter table t1 modify id2 int zerofill;
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+------------+
| id1  | id2        |
+------+------------+
|    1 | 0000000001 |
|    1 | 1111111111 |
+------+------------+
2 rows in set (0.01 sec)

所有的整数类型都有一个可选属性UNSIGEND(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值下限取0,上限取原值的2倍。如果一个列制定为zerofill,则Mysql自动为该列添加UNSIGEND属性。

mysql> create table t2(id tinyint, id2 tinyint UNSIGNED);
Query OK, 0 rows affected (0.01 sec)

mysql> desc t2;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id    | tinyint(4)          | YES  |     | NULL    |       |
| id2   | tinyint(3) unsigned | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into t2 values(127,127);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t2 values(129,129);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql> insert into t2 values(126,129);
Query OK, 1 row affected (0.01 sec)

整数类型还有一个属性:AUTO—INCREMENT。这个属性只能用与整数类型,一般从1开始,每行+1.

定义示例:

CREATE TABLE AI (ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
CREATE TABLE AI (ID INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(ID));
CREATE TABLE AI (ID INT AUTO_INCREMENT NOT NULL, PRIMARY UNIQUE(ID));

2.小数类型

MySQL分为两种:浮点数(float、double)和定点数(decimal)

浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示

  • M表示一共有多少位数字(整数位加小树位)
  • D表示位于小数点后面位数

浮点数后面跟"(M,D)"的用法是非标准用法。float和double在不制定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal在不制定精度时,默认的整数位为10,默认的小数位为0

3.日期时间类型

日期和时间类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001(s) 2038年的某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

如果需要经常插入或者更新日期为当前系统时间,通常使用TIMESTAMP来表示,TIMESTAMP值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽定固定为19个字符。如果想要获得数字值,应该在TIMESTAMP列加"+0"。

mysql> create table t3 (id1 timestamp);

mysql> desc t3;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id1   | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+

mysql> insert into t3 values(null);

mysql> select * from t3;
+---------------------+
| id1                 |
+---------------------+
| 2021-01-23 21:50:08 |
+---------------------+
--插入
mysql> insert into t3 values(20210123220410);

注:

  • 一个表中只能给第一个TIMESTAMP字段设置默认值为系统日期。
  • TIMESTAMP和时区相关。当插入日期时,会先转换为本地时间后存放;从而数据库里面取出时,也同样需要将日期转换为本地时区后显示。

4.字符串类型

字符串类型 字 节 描述及存储需求
CHAR(M) M M为0~255之间的整数
VARCHAR(M) M为0~255之间的整数,值的长度+1个字节
TINYBLOB 允许长度0~255之间的整数,值的长度+1个字节
BLOB 允许长度0~65535之间的整数,值的长度+2个字节
MEDIUMBLOB 允许长度0~167772150之间的整数,值的长度+3个字节
LONGBLOB 允许长度0~4294967295之间的整数,值的长度+4个字节
TINYTEXT 允许长度0~255之间的整数,值的长度+1个字节
TEXT 允许长度0~65535之间的整数,值的长度+1个字节
MEDIUTEXT 允许长度0~167772150之间的整数,值的长度+1个字节
LONGTEXT 允许长度0~4294967295之间的整数,值的长度+1个字节
VARBINARY(M) 允许长度0~M个字节的变长字节字符串,值的长度+1个字节
BINARY(M) M 允许长度0~M个字节的变长字节字符串
CHARVARCHAR都是字符串类型,它们的具体区别为:

长度大小区别:

  • CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间;
  • VARCHAR(M)定义的列的长度为可变长,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用 的字符集确定。整体最大长度是65,532字节)。

存数据时的区别:

  • CHAR值存储时,如果字符数没有达到定义的位数,会在后面用空格补全,再存入数据库中。比如定义 CHAR(10),那么不论存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充;

  • VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充

取数据时的区别:

  • 数据库取CHAR值时,尾部的空格会被删除;
  • 数据库取VARCHAR值时,尾部的空格仍然保留。

总结:

  CHAR定长,一般用于固定长度的表单提交数据存储 ;例如:身份证号,手机号,电话,密码等;而VARCHAR不定长。  
从空间上考虑,VARCHAR更好,从效率上考虑,CHAR更好。

Mysql中的运算符

算术运算符

运算符 作用
+ 加法
- 减法
* 乘法
/,DIV 除法
%,MOD 取余

比较运算法

运算法 作用
= 等于
!= 不等于
<=> NULL安全的等于(NULL-safe)
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 存在于指定范围
IN 存在于指定集合
IS NULL 为NULL
IS NOT NULL 不为NULL
LIKE 通配符匹配
REGEXP或RLIKE 正则表达匹配
mysql> select 1<>1,1<>1,null<>null;
+------+------+------------+
| 1<>1 | 1<>1 | null<>null |
+------+------+------------+
|    0 |    0 |       NULL |
+------+------+------------+
1 row in set (0.00 sec)

mysql> select 1<=>1,1<=>1,null<=>null;
+-------+-------+-------------+
| 1<=>1 | 1<=>1 | null<=>null |
+-------+-------+-------------+
|     1 |     1 |           1 |
+-------+-------+-------------+
1 row in set (0.00 sec)

  • “IN”运算符的使用格式为 "a IN (value1,value2)", 当a的值存在于列表中时,则整个比较表达式返回的值为1,否则返回0.
mysql> select 1 in (1,2,3), 0 in (1,2);
+--------------+------------+
| 1 in (1,2,3) | 0 in (1,2) |
+--------------+------------+
|            1 |          0 |
+--------------+------------+

逻辑运算法

运算符 作用
NOT 或 ! 逻辑非
AND 或 && 逻辑与
OR 或 || 逻辑或
XOR 逻辑异或

"XOR"表示逻辑异或,当任意一个操作数为NULL时,返回值为NULL。对于非NULL的操作数,如果两个的逻辑真假值相异,则返回结果1,否则返回2.

mysql> select 1 xor 1, 0 xor 0, 1 xor 0, null xor 1;
+---------+---------+---------+------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | null xor 1 |
+---------+---------+---------+------------+
|       0 |       0 |       1 |       NULL |
+---------+---------+---------+------------+
posted @ 2021-02-18 15:39  better_feng  阅读(79)  评论(0编辑  收藏  举报