创建数据库
语法为:
CREATE DATABASE 数据库名;
1 | mysql> create database dsq_mysql; |
删除数据库
语法为:
drop database <数据库名>;
1 | mysql> drop database test; |
选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。
1 | mysql> show databases; |
创建数据表
创建MySQL数据表需要 表名、表字段名、表字段定义:
CREATE TABLE table_name (column_name column_type);
1 | mysql> create table dsq_table( |
删除数据表
语法为:
DROP TABLE table_name ;
1 | mysql> drop table test; |
插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据。
语法为:
1 | INSERT INTO table_name ( field1, field2,...fieldN ) |
1 | mysql> insert into dsq_table (title,name,sex,date) |
查询数据
MySQL 数据库使用SQL SELECT语句来查询数据。
以下为在MySQL数据库中查询数据通用的 SELECT 语法:
1 | SELECT column_name,column_name |
- 查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 可以使用 WHERE 语句来包含任何条件。
- 可以使用 LIMIT 属性来设定返回的记录数。
- 可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
1 | mysql> select * from dsq_table; |
where子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
语法如下:
1 | SELECT field1, field2,...fieldN FROM table_name1, table_name2... |
- 查询语句中可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 可以在 WHERE 子句中指定任何条件。
- 可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
- WHERE 子句的字符串比较是不区分大小写的。 使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的
1 | mysql> select * from dsq_table |
Update查询
需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作
1 | UPDATE table_name SET field1=new-value1, field2=new-value2 |
- 可以同时更新一个或多个字段。
- 可以在 WHERE 子句中指定任何条件。
- 可以在一个单独表中同时更新数据。
1 | mysql> update dsq_table set name = 'zxc',date = '2000-01-01' |
可以看到第二行已经更新
delect 语句
使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录
1 | DELETE FROM table_name [WHERE Clause] |
如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
1 | mysql> delete from dsq_table |
like子句
有时候我们需要根据某个字符去匹配某个字段(field)中的所有记录,即模糊查询、模式匹配,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
语法为:
1 | SELECT field1, field2,...fieldN |
1 | mysql> select * from dsq_table |
排序(order by)
如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定按哪个字段哪种方式来进行排序,再返回搜索结果
语法为:
1 | /*ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列*/ |
下面读取dsq_table表,按照升序和降序的方式排列
1 | mysql> select * from dsq_table |
GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
语法为:
1 | SELECT column_name, function(column_name) |
创建表emplotee_tbl,并插入数据,使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录
1 | mysql> SELECT * FROM employee_tbl; |
GROUP BY子句 WITH ROLLUP ,可以实现在分组统计数据基础上再进行相同的统计
1 | mysql> select name,sum(singin) as singin_count |
与上表相比多了一行对每人登录次数的统计,可以使用coalesce设置一个取代Null的名称
语法为:
1 | select coalesce(a,b,c); |
返回第一个非零参数或者NULL(Returns the first non-NULL value in the list, or NULL if there are no non-NULL values.)
1 | mysql> SELECT COALESCE(NULL,1); |
MySQL连接表
可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):两边表同时有对应的数据,即任何一边缺失数据就不显示。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
有如下两个表:
1 | mysql> select * from dsq_tbl; |
接下来使用 inner join(也可以省略 inner 使用 join,效果一样)来连接两张表并显示
1 | mysql> select * from dsq_tbl inner join dsq_tbl2 |
left join 与 join 有所不同。 left join 会读取左边数据表的全部数据,即便右边表无对应数据
1 | mysql> select * from dsq_tbl left join dsq_tbl2 |
right join 会读取右边数据表的全部数据,即便左边边表无对应数据。
1 | mysql> select * from dsq_tbl right join dsq_tbl2 on dsq_tbl.author = dsq_tbl2.author; |
下面为一个left join 的应用场景
1 | 查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工 |
https://www.cnblogs.com/leochenliang/p/7364665.html(left join on and 与 left join on where的区别)
关于NULL值
运算符操作:
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
1 | select * , columnName1 + ifnull(columnName2,0) from tableName; |
下面为一个left jion 与 null值判断的组合使用
1 | 获取所有非manager的员工emp_no |
ALTER
修改数据表名或者修改数据表字段时,需要使用到MySQL ALTER命令
1.删除,添加或修改表字段
如果数据表中只剩余一个字段则无法使用DROP来删除字段
1 | mysql> describe dsq_table; |
添加列,并定义字段数据类型
1 | mysql> alter table dsq_table add sex varchar(5); |
如果需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)
1 | mysql> alter table dsq_table add hobby varchar(100) after name; |
2.修改字段类型及名称
如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句
语法为:
1 | ALTER TABLE testalter_tbl MODIFY c CHAR(10); #把字段 c 的类型从 CHAR(1) 改为 CHAR(10) |
3.关于Null 值和默认值
如果不设置默认值,MySQL会自动设置该字段默认为 NULL,如下所示
1 | mysql> describe dsq_tbl; |
当进行修改字段时,可以指定是否包含值或者是否设置默认值。需要设置not null ,默认值才会有效。语法为 :
1 | mysql> ALTER TABLE tablename |
如下,将字段date 默认值更改为当前日期
1 | mysql> alter table dsq_tbl modify date timestamp not null default CURRENT_timestamp; |
4.修改字段默认值
语法为:
1 | ALTER TABLE tbl_name ALTER col_name {SET DEFAULT literal | DROP DEFAULT} |
1 | mysql> alter table dsq_tbl alter author set default 10; |
5.修改表名
如果需要修改表名,可以在 ALTER TABLE 语句中使用 RENAME 子句 ,或者RENAME TABLE语句
语法:
1 | RENAME TABLE |
RENAME TABLE重命名一个或多个表。但是必须具有ALTER与 DROP原始表的权限,以及CREATE与 INSERT新表的权限
1 | RENAME TABLE old_table TO new_table; |
RENAME TABLE 与 ALTER TABLE 的不同在于,RENAME TABLE 可以在一个语句中重命名多个表
1 | 交换两个表的名称 |
使用RENAME TABLE将表从一个数据库移动到另一个数据库:
1 | RENAME TABLE current_db.tbl_name TO other_db.tbl_name; |
表的显示
在进入MYSQL时,提示的第二行有这样一句话” Commands end with ; or \g.”
1 | mysql> select * from dsq_table \g |
1 | 使用 \G 是垂直显示结果(ego (\G) Send command to mysql server, display result vertically.)。 |