MySql-1 基础篇 sql语句操作

文章目录

  • MySql基础篇 sql语句操作
    • 1 Sql语句分类
    • 2 DDL语句
      • 2.1 数据库操作:database
      • 2.2 表操作:table
    • 3 DML语句
      • 3.1 插入语句:insert
      • 3.2 更新语句 :update
      • 3.3 删除语句:delete
    • 4 DQL语句
      • 4.1 简单查询
      • 4.2 排序
      • 4.3 聚合函数
      • 4.4 分组
      • 4.5 分页查询
      • 4.6 其他查询语句
    • 5 SQL执行语句解析顺序
    • 6 外键

MySql基础篇 sql语句操作

1 Sql语句分类

  • 数据定义语言:简称【DDL】(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等。
  • 数据操作语言:简称【DML】(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等。
  • 数据控制语言:简称【DCL】(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;关键字:grant等。
  • 数据查询语言:简称【DQL】(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等。

2 DDL语句

2.1 数据库操作:database

  • 创建数据库
create database 数据库名;
create database 数据库名 character set 字符集;

例:create database databaseName character set ‘utf8’;
databaseName为数据库名称

  • 查看数据库
  1. 查看所有数据库:show databases;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
  1. 查看某个数据库定义的信息:show create database 数据库名称;
mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)
  • 删除数据库(慎用,无法恢复)
drop database 数据库名名称;
  • 切换数据库
use 数据库名;
  • 查看当前使用的数据库:select database();
mysql> use test;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

2.2 表操作:table

  • 常用的字段类型
数字型:int
浮点型:double
字符型:varchar(可变长字符串)
日期类型:date(只有年月日,没有时分秒)
datetime(年月日,时分秒)
boolean类型:不支持,一般使用tinyint替代(值为0和1)
  • 创建表
create table 表名(
字段名 类型(长度) 约束,
字段名 类型(长度) 约束
);
  • 字段约束
1. 主键约束:primary key
2. 唯一约束:unique
3. 非空约束:not null

注意:主键约束 = 唯一约束 + 非空约束
例:

mysql> create table user(
    -> id int(16) primary key,
    -> name varchar(32),
    -> sex varchar(8) unique);                                                       
Query OK, 0 rows affected (0.02 sec)

  • 查看表:show tables;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)
  • 查看表:desc 表名;
mysql> desc user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(16)     | NO   | PRI | NULL    |       |
| name  | varchar(32) | YES  |     | NULL    |       |
| sex   | varchar(8)  | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
  • 删除表
drop table 表名;
  • 修改表
#修改表添加列.
1. alter table 表名 add 列名 类型(长度) 约束;
#修改表修改列的类型长度及约束.
2. alter table 表名 modify 列名 类型(长度) 约束;
#修改表修改列名.
3. alter table 表名 change 旧列名 新列名 类型(长度) 约束;
#修改表删除列.
4. alter table 表名 drop 列名;
#修改表名
5. rename table 表名 to 新表名;
#修改表的字符集
6. alter table 表名 character set 字符集;
#删除索引
7. alter table 表名 drop index 列名;

3 DML语句

3.1 插入语句:insert

  • 语法
#向表中插入某些列
1. insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..);
#向表批量插入
2. insert into 表 values (值1,值2,值3..),(值1,值2,值3..),(值1,值2,值3..); 
3. insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
4. insert into 表 values select * from 表
  • 注意
  1. 列名数与values后面的值的个数相等
  2. 列的顺序与插入的值得顺序一致
  3. 列名的类型与插入的值要一致.
  4. 插入值得时候不能超过最大长度.
  5. 值如果是字符串或者日期需要加引号’’ (一般是单引号)
  • 例子
1. insert into user (id ,name ,sex) values (1, '小a', 'woman');
2. insert user values (2, '小b', 'woman'),(3,'小c','man');

3.2 更新语句 :update

  • 语法
update 表名 set 字段名=值,字段名=;
update 表名 set 字段名=值,字段名=值 where 条件;
  • 注意
  1. 列名的类型与修改的值要一致.
  2. 修改值得时候不能超过最大长度.
  3. 值如果是字符串或者日期需要加’’(一般是单引号)

3.3 删除语句:delete

  • 语法
delete from 表名 [where 条件];

注意:delete语句表不能使用别名

  • delete 与 truncate区别
    删除表中所有记录使用【delete from 表名】,还是用【truncate table 表名】?
    删除方式:
  1. delete :一条一条删除,不清空auto_increment记录数。
  2. truncate :直接将表删除,重新建表,auto_increment将置为零,从新开始。

4 DQL语句

4.1 简单查询

  • 查询语法
select * from 表名称 where 查询条件;
  • 查询用户所有信息
select * from `user`;
  • 查询用户指定列信息
select `name`, sex from `user`;
  • 注意:一些关键字的列名或表名,严谨使用需要用单引号标识:username等。

4.2 排序

  • 语法
select * from 表名称 where 查询条件 order by 列名 排序规则
排序规则:ASC(升序 小->大) DESC(降序 大 ->
  • 用户根据id升序排序
select * from `user` order by `id` desc;

4.3 聚合函数

  • 常用的聚合函数
# sum():求某一列的和
select sum(列名) from 表名;
# avg():求某一列的平均值
select avg(列名) from 表名;
# max():求某一列的最大值
select max(列名) from 表名;
# min():求某一列的最小值
select min(列名) from 表名;
# count():求某一列的元素个数
select count(1) from 表名;
select count(*) from 表名;

4.4 分组

  • 关键字
GROUP BY
HAVING
  • 根据性别分组,汇总男女人数,计算平均年龄
SELECT sex,count(1),avg(age) FROM `user` group by sex;
  • 根据性别分组,并获取平均年龄大于10的组员
SELECT sex,count(1),avg(age) FROM `user` group by sex HAVING avg(age) > 10;
  • 注意
1. select语句中的列(非聚合函数列),必须出现在group by子句中
2. group by子句中的列,不一定要出现在select语句中
3. 聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。
4. 区别where、group by、having。

4.5 分页查询

  • 关键字:
lIMIT [offset,] rows
  • 逻辑分页:将数据库中的数据查询到内存之后再进行分页。

  • 物理分页:通过LIMIT关键字,直接在数据库中进行分页,最终返回的数据,只是分页后的数据。

  • 语法

SELECT * FROM table LIMIT [offset,] rows

说明:
offset:偏移量,即从第几条开始查询;索引从0开始。
rows:当前页几条数据;即查询几条数据。

4.6 其他查询语句

  • union 集合的并集(不包含重复记录)
  • unionall 集合的并集(包含重复记录)

5 SQL执行语句解析顺序

  • 完整的sql
SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >
  • 执行顺序
# 将主表和从表,进行进行笛卡尔积,生成临时表T1
1 FROM <left_table>
# 将T1根据条件过滤,生成临时表T2
2 ON <join_condition>
# 第二步和第三步会循环执行,保留左边的数据T3
3 <join_type> JOIN <right_table> 
#  第四步会循环执行,多个条件的执行顺序是从左往右的。循环帅选T4...Tn
4 WHERE <where_condition>
# 根据条件对T4分组,生成临时表T5
5 GROUP BY <group_by_list>
# 分组过滤T5,生成临时表T6
6 HAVING <having_condition>
# T6中映射出结果集临时表,生成临时表T7
7 SELECT 分组之后才会执行SELECT
# 对T7结果集临时表去重,生成临时表T8
8 DISTINCT <select_list> 
# T8根据条件排序,生成T9
9 ORDER BY <order_by_condition>
# 堆排序之后的T9分页
10 LIMIT <limit_number> 前9步都是SQL92标准语法。limit是MySQL的独有语法。
  • 流程分析
1. FROM(将最近的两张表,进行笛卡尔积:行相乘,列相加)---T1
2. ON(将T1按照它的条件进行过滤)---T2
3. LEFT JOIN(保留左表的记录)---T3
4. WHERE(过滤T3中的记录)--T4…VTn
5. GROUP BY(对T4的记录进行分组)---T5
6. HAVING(VT5中的记录进行过滤)---T6
7. SELECT(VT6中的记录,选取指定的列)--T7
8. DISTINCT(对T7去重)--T8
9. ORDER BY(对T8的记录进行排序)--T9
10. LIMIT(对排序之后的值进行分页)--MySQL特有的语法

熟悉Sql执行顺序,使开发者写Sql语句更得心应手;易于写出可读,性能高的sql语句。

6 外键

  1. 新增外键语法
alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references 从表(从
表主键)

例子:为表hushband字段wid添加外键,主键为表wife的字段id
alter table husband add foreign key (wid) references wife(id);

  1. 删除外键语法
alter table 表名 drop foreign key 外键约束名称

你可能感兴趣的:(MySql,mysql,数据库,sql)