MySQL的sql语句分类汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cx55887/article/details/83386755

第一类语句:与数据库相关的语句

1.创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] ...
  create_specification:
      [DEFAULT] CHARACTER SET [=] charset_name
    | [DEFAULT] COLLATE [=] collation_name

  说明:
   IF NOT EXISTS:判断当前系统中是否有要创建的这个数据库,如果有的话,不再执行创建,而且不会报错
   CHARACTER SET:指定当前数据库所采用字符类型(utf8)
   COLLATE:指定排序规则
  例子:
   CREATE DATABASE IF NOT EXISTS jobs DEFAULT CHARACTER SET utf8

2.删除数据库

  DROP DATABASE [IF EXISTS] db_name
  IF EXISTS:判断当前系统中是否有要删除的这个数据库,如果有执行删除操作,如果没有不再执行删除操作,而且不会报错
  例子:DROP DATABASE IF EXISTS test;

3.修改数据库

这里往往仅仅是修改数据库中的字符集类型和排序规则(不能修改修改数据库名)

ALTER DATABASE [db_name] alter_specification ...

  alter_specification:
      [DEFAULT] CHARACTER SET [=] charset_name
    | [DEFAULT] COLLATE [=] collation_name

  例子:修改test1的字符集为utf8
  ALTER DATABASE test1 DEFAULT CHARACTER SET utf8;

修改数据库名称:
先对要修改名称的数据库做备份,然后新建一个数据库,库名就是新的名字,然后将备份的数据还原到这个新库中

4.更新数据字典

ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME

第二类语句:与表相关的语句

1.新建表

方法一:直接创建一张新表

 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      (create_definition,...)
      [table_options]
      [partition_options]

  TEMPORARY:该选项表示所创建的是一张临时表,表是在内存中
  create_definition:
     col_name column_definition
   | PRIMARY KEY (col_name1, col_name1...)
   | {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ...
   | [CONSTRAINT UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...
   | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ...
   | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition
   | CHECK (expr)
  
    table_option:  
     AUTO_INCREMENT [=] value <<< 指定主键从几开始自增    
   | ENGINE [=] engine_name <<< 指定表所使用的存储引擎
   | [DEFAULT] CHARACTER SET [=] charset_name <<< 指定当前表的字符集(不指定会继承)
   | CHECKSUM [=] {0 | 1} <<< 指定是否对插入的数据做校验(可以保证数据一致,但是会带来额外的系统开销)
   | [DEFAULT] COLLATE [=] collation_name <<< 指定当前表的排序规则(不指定会继承)
   | COMMENT [=] 'string' <<< 指定当前表的描述说明信息
   | DELAY_KEY_WRITE [=] {0 | 1} <<< 延迟键写入,推迟重建索引的间隔
   | MAX_ROWS [=] value
   | MIN_ROWS [=] value
   | UNION [=] (tbl_name[,tbl_name]...) <<< 做表联合
   | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}] <<< 定义表空间
   | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} <<< 定义表格式
 
   例子:创建一张表,id为主键、name长度为30,age为整型
    CREATE TABLE tb1 (id int PRIMARY KEY, name char(30), age int(3))
    CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id))

   例子:创建一张表,id和name构成联合主键、name长度为30,age为整型
    CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id,name))

 

方法二:根据现有表创建新表,而且新表中的数据也是来自于现有表

   CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      [(create_definition,...)]
      [table_options]
      [partition_options]
      [IGNORE | REPLACE]
      [AS] query_expression
例子: CREATE TABLE new_tb AS SELECT * FROM old_tb;
注意:这种操作在系统看来是不安全的,如果要使用这种方法创建表需要修改配置文件将
gtid-mode = on改为off
enforce-gtid-consistency= 1改为0

方法三:根据现有表创建新表,但是仅仅有表结构

 CREATE TABLE [IF NOT EXISTS] tbl_name LIKE old_tbl_name 

   例子:基于mysql.user表的表结构创建新表
   CREATE TABLE tb01 LIKE mysql.user;

2.删除表

删除表简单实用DROP命令即可,但要注意做好指定。

  DROP TABLE [IF EXISTS] tbl_name [, tbl_name]... [CASCADE]

  说明:
   CASCADE:级联删除

3.修改表结构(字段、属性、限制、约束、索引、键…)

格式:

 ALTER TABLE tbl_name
      [alter_specification [, alter_specification] ...]
      [partition_options]

①修改字段的定义

  1. 删除字段
   DROP col_name

   例子:删除age字段
   ALTER TABLE tb1 DROP age;
  1. 添加字段
   ADD col_name column_definition [FIRST | AFTER col_name]

   例子:
    # 在age字段后添加一个新的字段school
    ALTER TABLE tb1 ADD school CHAR(10) AFTER age;

    # 在最前面插入字段job
    ALTER TABLE tb1 ADD job CHAR(20) NOT NULL FIRST;

    # 在末尾添加一个新字段phone
    ALTER TABLE tb1 ADD phone int(10);
  1. 修改字段名称
   CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]

  例子: ALTER TABLE tb1 CHANGE job jobs char(30) not null;
  1. 修改字段的约束和属性,调整字段位置
   MODIFY col_name column_definition [FIRST | AFTER col_name]

   例子:ALTER TABLE tb1 MODIFY name varchar(50) NOT NULL DEFAULT 'zx';
注意无法修改字段名称
		ALTER TABLE tb1 MODIFY name varchar(50) AFTER age;
  1. 添加删除索引
   ADD index [索引类型] (字段1,字段2...) [options]

   例子:将索引添加(删除)到 name字段上
   ALTER TABLE tb1 ADD(DROP) INDEX (name);

   查看表中的索引
   SHOW INDEXES FROM tb1;

   注意:索引不是越多越好

①修改字段约束

#主键约束
 | ADD [CONSTRAINT [symbol]] PRIMARY KEY
           [index_type] (index_col_name,...) [index_option] ...
#唯一约束
   | ADD [CONSTRAINT [symbol]]
           UNIQUE [INDEX|KEY] [index_name]
           [index_type] (index_col_name,...) [index_option] ...
#唯一约束要建立在索引上,也就是对某字段设置唯一约束时,该字段要是索引。

关于主键(删除、禁用、启用)
   DROP PRIMARY KEY  #删除主键
   {DISABLE|ENABLE} KEYS #禁用和启用主键

4.修改表名

#方法1:
  ALTER TABLE 表名 RENAME [TO|AS] 新表名
  ALTER TABLE user10 RENAME TO user11;
方法2:
  RENAME TABLE 表名 TO 新表名; 这里面的TO不可以省略
  RENAME TABLE user11 TO user10;

5.指定表中的内容按照哪个字段进行排序

注意:如果表中有索引或者主键,那么无法按照指定的字段排序
ORDER BY col_name [, col_name] ...

6.修改表所使用的字符集类型

CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

7.向表中插入数据

INSERT INTO tb1(name,id,age) VALUES('dong',1,23);

修改表中的数据

将name为zx的年龄修改为25
UPDATE tb01 set age=25 WHERE name='zx';

第三类语句:简单的查询语句

简单查询格式

SELECT 字段名... FROM 表名 [条件] [选项]
例子:查询t09中的全部数据
> SELECT * FROM t09;

例子:查询t09中的id
> SELECT id FROM t09;

例子:查看所有id大于5的记录
 > SELECT * FROM t09 WHERE id>5

例子:查看所有id大于5的记录的中的name字段
 > SELECT name FROM t09 WHERE id>5

条件查询、组合条件查询

条件表达方式 释义
=、<、>、>= 、<= 等于、小于、大于、大于等于、小于等于
!=、<> 不等于
is null 为空
is not null 不为空
between…and… 在…和…之间
like … 结合通配符
RLIKE 结合正则

组合条件查询关键字:and、or、not

排序、限制输出记录的条数

order by 字段 [desc|asc]   根据指定字段进行降序或升序排列
limit num:仅仅显示num条记录
limit m,n:意思是跳过m个记录向后取n条数据

示例

案例:将年龄在20-25的用户名和用户id显示出来
  mysql> select name,stuid,age from students where age>=20 and age<=25;
  mysql> select name,stuid,age from students where age between 20 and 25;

 案例:将年龄在小于20,或者大于25的用户名和用户id显示出来
  select stuid,name,age from students where age<20 or age>25;

 案例:显示用户名是以S为开头的用户名和年龄
  mysql> select name,age from students where name like 'S%';

 案例:显示用户名是以Y为开头,且年龄是19的用户
  mysql> select name,age from students where name like 'Y%' and age=19;

 案例:显示用户名是以Y为开头,且年龄小于20的用户
  mysql> select name,age from students where name like 'Y%' and age<20;

 案例:显示所有用户的用户名和年龄
  mysql> select name,age from students;

 案例:显示所有用户的用户名和年龄,要求按照年龄排序(从大到小排)
  mysql> select name,age from students order by age desc;

 案例:显示所有用户的用户名和年龄,要求仅仅显示年龄最大的三个用户
  mysql> select name,age from students order by age desc limit 3;

 案例:统计students表有多少行
  mysql> select count(*) from students;

 案例:显示年龄最大的用户的年龄
  mysql> select max(age) from students;

大致汇总,如有不当之处欢迎指正。

------做运维之前很矫情的小年轻-----

猜你喜欢

转载自blog.csdn.net/cx55887/article/details/83386755