• MySQL成长手册(待续)


    目录

    第一篇:MySQL基础知识

    1、常见数据库类型

    2、数据库常见的概念

    3、数据库存储数据的特点

    第二篇:MySQL的基本使用

    1、MySQL登录命令  mysql -u 用户 -p ;

    2、修改MySQL的root用户密码

    3、 显示数据库版本 --version

    4、显示MySQL服务器上所有的库  show databases;

    5、切换指定使用的数据库 use 库名;

     6、显示当前库中的所有表  show tables; 

    7、在当前位置查看其他数据库中的所有表  show tables from 库名;

    8、查看表的创建语句  show create table 表名;

    9、查看表结构  desc +表名

    10、显示当前所在的库  select database();

    11、查询当前MySQL支持的存储引擎  show engines;

    小结:基本语法规范

    第三篇:SQL的语言分类

    第四篇:MySQL的数据类型

    第五篇:MySQL管理员常用的命令

    1、MySQL权限工作原理

    2、创建用户  create user

    操作1:不指定主机名

    操作2:指定主机名创建用户 

    操作3:指定IP创建用户  

    3、修改用户密码

    方式一:通过管理员修改密码

    方式二:创建用户时直接设置密码

    方式三:通过修改数据库mysql.user表修改密码

    4、给用户授权  

    示例1、给test1授权可以操作所有库所有权限

    示例2、test2可以对company库中所有的表执行select

    示例三、test03可以对company库中所有的表执行select、update

    示例四、test1用户只能查询mysql.user表的user,host字段

    5、查看用户权限  show grants;

    5.1、查看当前登录的用户其用户权限

    5.2、查看其他用户的用户权限

    6、撤销用户的权限

    7、删除账户  drop user

    方法一:命令行删除:drop user '用户名'@'主机名'

    方法二:通过删除mysql库中user表数据的方式

    第六篇:DDL常见操作汇总

    1、库的管理

    1.1、创建库   create database

    1.2、删除库  drop database

    2、表的管理 

    2.1、创建表  create table

    2.2、删除表  drop table

    2.3、修改表名  alter table

    2.4、复制表  create table 表名 like

    2.5、表中列的管理

    第七篇:DML常见操作

    1、插入单行

    2、数据更新

    3、删除数据

    3.1、使用delete删除(删除表的内容,表的结构仍在)

    3.2、drop 、truncate、delete的区别

    第八篇:

    一、select 查询基础篇

    1、查询所有列

    2、查询指定列

    3、列别名

    二、select条件查询

    1、条件查询

    1.1、条件查询运算符之等于(=)

    1.2、条件查询运算符之不等于(<>或者!=)

    1.3、条件查询运算符之大于(>)

    2、逻辑查询运算符

    2.1、AND(并且)

    2.1、OR (或者)

    2.3、like (模糊查询)

    2.4、BETWEEN AND(区间查询)

    2.5、IN 查询

    2.6、NOT IN 查询

    2.7、NULL 存在的坑(IS NULL / IS NOT NULL:NULL值专用查询)

    第九篇 : 排序(正序、倒序)

    1、排序查询(order by)


    第一篇:MySQL基础知识

    1、常见数据库类型

    目前的常用数据库有mysql、oracle、sqlserver、db2等

    ①、oracle性能排名第⼀,服务也是相当到位的,但是收费也是⾮常

    ⾼的,⾦融公司对数据库稳定性要求⽐较⾼,⼀般会选择oracle

    ②、mysql是免费的,其他⼏个⽬前暂时收费的,mysql在互联⽹公司使⽤率也是排名第⼀, 资料也⾮常完善,社区也⾮常活跃,所以我们主要学习mysql

    2、数据库常见的概念

    ①、DB:数据库,存储数据的容器

    ②、DBMS:数据库管理系统,又称为数据库软件或数据库产品,⽤于创建或管理DB。

    ③、SQL:结构化查询语⾔,⽤于和数据库通信的语⾔,不是某个数据库软件持有的,⽽是⼏乎所有的主流数据库软件通⽤的语⾔

    3、数据库存储数据的特点

    ①、数据存放在表中,然后表存放在数据库中

    ②、⼀个库中可以有多张表,每张表具有唯⼀的名称(表名)来标识⾃⼰

    ③、表中有⼀个或多个列,列又称为“字段”,相当于java中的“属性”

    ④、表中每⼀⾏数据,相当于java中的“对象”

    第二篇:MySQL的基本使用

    1、MySQL登录命令  mysql -u 用户 -p ;

    语法一:mysql -u root -p123123

    此方法可免交互登录,但是密码明文显示,不安全。

    语法二:mysql -u root -p

    自行通过交互输入密码完成登录,比较安全

    2、修改MySQL的root用户密码

    [root@zwb_mysql ~]# mysqladmin -uroot -p password
     

    3、 显示数据库版本 --version

    [root@zwb_mysql ~]# mysql --version

    1. [root@zwb_mysql ~]# mysql --version
    2. mysql Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using EditLine wrapper

    4、显示MySQL服务器上所有的库  show databases;

    mysql> show databases;

    1. mysql> show databases; #### 显示当前MySQL数据库服务器所有的数据库
    2. +--------------------+
    3. | Database |
    4. +--------------------+
    5. | information_schema |
    6. | company |
    7. | mysql |
    8. | performance_schema |
    9. | sys |
    10. +--------------------+
    11. 5 rows in set (0.01 sec)

    5、切换指定使用的数据库 use 库名;

    mysql> use 库名;

    1. mysql> use mysql; ## 切换到的数据拿起来的
    2. Reading table information for completion of table and column names
    3. You can turn off this feature to get a quicker startup with -A
    4. Database changed

     6、显示当前库中的所有表  show tables; 

    mysql> show tables; 

    1. mysql> show tables; ### 显示当前数据库内的所有表
    2. +---------------------------+
    3. | Tables_in_mysql |
    4. +---------------------------+
    5. | columns_priv |
    6. | db |
    7. | engine_cost |
    8. | event |
    9. | func |
    10. | general_log |
    11. | gtid_executed |
    12. | help_category |
    13. | help_keyword |
    14. | help_relation |
    15. | help_topic |
    16. | innodb_index_stats |
    17. | innodb_table_stats |
    18. | ndb_binlog_index |
    19. | plugin |
    20. | proc |
    21. | procs_priv |
    22. | proxies_priv |
    23. | server_cost |
    24. | servers |
    25. | slave_master_info |
    26. | slave_relay_log_info |
    27. | slave_worker_info |
    28. | slow_log |
    29. | tables_priv |
    30. | time_zone |
    31. | time_zone_leap_second |
    32. | time_zone_name |
    33. | time_zone_transition |
    34. | time_zone_transition_type |
    35. | user |
    36. +---------------------------+
    37. 31 rows in set (0.00 sec)

    7、在当前位置查看其他数据库中的所有表  show tables from 库名;

    mysql> show tables from 库名;

    1. mysql> show tables from company;
    2. +-------------------+
    3. | Tables_in_company |
    4. +-------------------+
    5. | info |
    6. +-------------------+
    7. 1 row in set (0.00 sec)

    8、查看表的创建语句  show create table 表名;

    mysql> show create table 表名;

    1. mysql> show create table info;
    2. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
    3. | Table | Create Table |
    4. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
    5. | info | CREATE TABLE "info" (
    6. "id" int(3) DEFAULT NULL,
    7. "name" varchar(40) DEFAULT NULL,
    8. "address" varchar(40) DEFAULT NULL
    9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    10. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
    11. 1 row in set (0.00 sec)

    9、查看表结构  desc +表名

    mysql> desc +表名

    1. mysql> desc info;
    2. +---------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +---------+-------------+------+-----+---------+-------+
    5. | id | int(3) | YES | | NULL | |
    6. | name | varchar(40) | YES | | NULL | |
    7. | address | varchar(40) | YES | | NULL | |
    8. +---------+-------------+------+-----+---------+-------+
    9. 3 rows in set (0.00 sec)

    10、显示当前所在的库  select database();

    mysql> select database();

    1. mysql> select database();
    2. +------------+
    3. | database() |
    4. +------------+
    5. | company |
    6. +------------+
    7. 1 row in set (0.00 sec)

    11、查询当前MySQL支持的存储引擎  show engines;

    mysql> show engines;

    1. mysql> show engines;
    2. +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    3. | Engine | Support | Comment | Transactions | XA | Savepoints |
    4. +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    5. | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
    6. | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
    7. | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
    8. | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
    9. | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
    10. | CSV | YES | CSV storage engine | NO | NO | NO |
    11. | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
    12. | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
    13. | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
    14. +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    15. 9 rows in set (0.00 sec)

    小结:基本语法规范

    ①、不区分⼤⼩写,但建议关键字⼤写,表名、列名⼩写

    ②、每条命令最好⽤英⽂分号结尾

    ③、每条命令根据需要,可以进⾏缩进或换⾏

    第三篇:SQL的语言分类

    • DQLData Query Language:数据查询语⾔ select 相关语句
    • DMLData Manipulate Language:数据操作语⾔ insert 、update、delete 语句
    • DDLData De>ine Languge:数据定义语⾔ create、drop、alter 语句
    • TCLTransaction Control Language:事务控制语⾔ set autocommit=0、start transaction、savepoint、commit、rollback

    第四篇:MySQL的数据类型

    主要分为五大类:

    • 整数类型:bit、bool、tinyint、smallint、mediumint、int、bigint
    • 浮点数类型:float、double、decimal
    • 字符串类型:char、varchar、tinyblob、blob、mediumblob、longblob、

    tinytext、text、mediumtext、longtext

    • ⽇期类型:Date、DateTime、TimeStamp、Time、Year

    数据类新的一些建议:

    • 选小不选大:⼀般情况下选择可以正确存储数据的最小数据类型,越小的数据类型通常更快,占⽤磁盘,内存和CPU缓存更⼩。
    • 简单就好:简单的数据类型的操作通常需要更少的CPU周期,例如:整型⽐字符操作代价要⼩得多,因为字符集和校对规则(排序规则)使字符⽐整型⽐较更加复杂。
    • 尽量避免NULL:尽量制定列为NOT NULL,除⾮真的需要NULL类型的值,有NULL的列值会使得索引、索引统计和值⽐较更加复杂。
    • 浮点类型的建议统⼀选择decimal
    • 记录时间的建议使用:int类型,将时间转换为时间戳格式,如将时间转换为秒、毫秒,进行存储,方便走索引。

    第五篇:MySQL管理员常用的命令

    1、MySQL权限工作原理

    mysql为了安全性考虑,采⽤(主机名+⽤户名)来判断⼀个⽤户的⾝份,因为在互联⽹中很难通过⽤户名来判断⼀个⽤户的⾝份,但是我们可以通过ip或者主机名判断⼀台机器,某个用户通过这个机器过来的,我们可以识别为⼀个⽤户,所以mysql中采⽤⽤户名+主机名来识别用户的⾝份。当⼀个用户对mysql发送指令的时候,mysql就是通过用户名和来源(主机)来断定⽤户的权限。

    权限生效时间

    ⽤户及权限信息放在库名为mysql的库中,mysql启动时,这些内容被读进内存并且从此时⽣效,所以如果通过直接操作这些表来修改⽤户及权限信息的,需要重启mysql或者执⾏flush privileges;才可以⽣效。

    2、创建用户  create user

    语法:

    create user 用户名@[主机名] [identified by '密码'];

    ①、主机名可不写:默认值为%,表⽰这个⽤户可以从任何主机连接mysql服务器

    ②、密码项看可以省略,表示无密登录

    操作1:不指定主机名

    使用命令:

    ①mysql> create user test1;

    或者②mysql> create user 'test1'@%;

    查询当前系统默认的用户

    1. mysql> show databases;
    2. mysql> use mysql; ## 切换到mysql数据库
    3. Reading table information for completion of table and column names
    4. You can turn off this feature to get a quicker startup with -A
    5. Database changed
    6. mysql> show tables; ## 显示当前数据库所有的表
    7. +---------------------------+
    8. | Tables_in_mysql |
    9. +---------------------------+
    10. | columns_priv |
    11. | db |
    12. | engine_cost |
    13. | event |
    14. | func |
    15. | general_log |
    16. | gtid_executed |
    17. | help_category |
    18. | help_keyword |
    19. | help_relation |
    20. | help_topic |
    21. | innodb_index_stats |
    22. | innodb_table_stats |
    23. | ndb_binlog_index |
    24. | plugin |
    25. | proc |
    26. | procs_priv |
    27. | proxies_priv |
    28. | server_cost |
    29. | servers |
    30. | slave_master_info |
    31. | slave_relay_log_info |
    32. | slave_worker_info |
    33. | slow_log |
    34. | tables_priv |
    35. | time_zone |
    36. | time_zone_leap_second |
    37. | time_zone_name |
    38. | time_zone_transition |
    39. | time_zone_transition_type |
    40. | user | ## 此表为存储mysql用户信息的
    41. +---------------------------+
    42. 31 rows in set (0.00 sec)
    43. mysql> select user,host from user; ## 显示当前所有的用户名和主机名
    44. +---------------+-----------+
    45. | user | host |
    46. +---------------+-----------+
    47. | mysql.session | localhost |
    48. | mysql.sys | localhost |
    49. | root | localhost |
    50. +---------------+-----------+
    51. 3 rows in set (0.00 sec)
    52. 或者 使用as表示一下
    53. mysql> select user as 用户,Host as 主机名 from user;
    54. +---------------+-----------+
    55. | 用户 | 主机名 |
    56. +---------------+-----------+
    57. | mysql.session | localhost |
    58. | mysql.sys | localhost |
    59. | root | localhost |
    60. +---------------+-----------+
    61. 3 rows in set (0.00 sec)

    不指定主机名,创建一新用户:系统给予的主机名为“%”,表示这个用户可以从任何主机连接mysql服务器,且没有密码,不需要密码验证。

    1. mysql> create user test1; ## 不指定主机名创建用户test1
    2. Query OK, 0 rows affected (0.01 sec)
    3. mysql> select user as 用户,Host as 主机名 from user; ## 查看显示test1的主机名为%
    4. +---------------+-----------+
    5. | 用户 | 主机名 |
    6. +---------------+-----------+
    7. | test1 | % |
    8. | mysql.session | localhost |
    9. | mysql.sys | localhost |
    10. | root | localhost |
    11. +---------------+-----------+
    12. 4 rows in set (0.00 sec)

    验证:

    操作2:指定主机名创建用户 

    新建用户test2,指定主机为localhost,密码为abc123 :表示用户test2只能在localhost主机上登录数据库

    1. mysql> create user 'test2'@'localhost' identified by 'abc123'; ## 新建用户,指定主机、密码
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> select user,Host from user;
    4. +---------------+-----------+
    5. | user | Host |
    6. +---------------+-----------+
    7. | test1 | % |
    8. | mysql.session | localhost |
    9. | mysql.sys | localhost |
    10. | root | localhost |
    11. | test2 | localhost | ### test2用户,主机名为localhost
    12. +---------------+-----------+
    13. 5 rows in set (0.00 sec)

    操作3:指定IP创建用户  

    新建用户test04,指定ip:表示用户test04只能在IP为192.168.159.0段的主机才能登录数据库

    1. mysql> create user 'test03'@'192.168.159.%' identified by 'abc123'; ## 新建用户,指定IP地址
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> select user,Host from user;
    4. +---------------+---------------+
    5. | user | Host |
    6. +---------------+---------------+
    7. | test1 | % |
    8. | test03 | 192.168.159.% |
    9. | mysql.session | localhost |
    10. | mysql.sys | localhost |
    11. | root | localhost |
    12. | test2 | localhost |
    13. +---------------+---------------+
    14. 6 rows in set (0.00 sec)

    3、修改用户密码

    方式一:通过管理员修改密码

    1. mysql> set PASSWORD FOR 'test1'@'%'=PASSWORD('123123'); ##修改用户test1密码
    2. Query OK, 0 rows affected, 1 warning (0.00 sec)
    3. ## 登录验证:
    4. [root@zwb_nginx_mysql3 ~]# mysql -utest1 -p123123
    5. mysql: [Warning] Using a password on the command line interface can be insecure.
    6. Welcome to the MySQL monitor. Commands end with ; or \g.
    7. Your MySQL connection id is 9
    8. Server version: 5.7.20-log Source distribution
    9. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    10. Oracle is a registered trademark of Oracle Corporation and/or its
    11. affiliates. Other names may be trademarks of their respective
    12. owners.
    13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    14. mysql>

    方式二:创建用户时直接设置密码

    方式三:通过修改数据库mysql.user表修改密码

    1. ### 通过mysql.user表修改用户密码,一定要刷新
    2. mysql> update user set authentication_string=password('123123') where user='test2';
    3. Query OK, 1 row affected, 1 warning (0.00 sec)
    4. Rows matched: 1 Changed: 1 Warnings: 1
    5. mysql> flush privileges; #### 刷新后才能生效
    6. Query OK, 0 rows affected (0.00 sec)

    4、给用户授权  

    创建⽤户之后,需要给⽤户授权,才有意义

    语法:

    grant privileges on database.table to 'username'[@'host'] [with grant option]

    grant命令说明:

    ①privileges(权限列表),可以是all,表示所有权限。也可以是select、update等权限,多个权限之间用逗号分开

    ②on 用来指定权限针对哪些库和表,格式为(数据库.表名),或(*.*)表示的是所有库所有表

    ③TO 表示将权限赋予某个用户, 格式为username@host,@前面为用户名,@后⾯接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。

    ④with grant option 这个选项表示该用户可以将自己拥有的权限授权给别人。

    注意:经常有人在创建操作用户的时候不指定 with grant option 选项导致后来该用户不能使用grant命令创建用户或者给其它用户授权。 备注:可以使用GRANT重复给⽤户添加权限,权限叠加,比如你先给用户添加⼀个select权限,然后又给用户添加⼀个insert权限,那么该⽤户就同时拥有了selectinsert权限。

    示例1、给test1授权可以操作所有库所有权限

    grant all on *.* to 'test1'@'%';表示test1用户可以在任何主机登录数据库,且对所有数据库用于所有权限

    1. mysql> show databases;
    2. +--------------------+
    3. | Database |
    4. +--------------------+
    5. | information_schema |
    6. | company |
    7. | mysql |
    8. | performance_schema |
    9. | sys |
    10. +--------------------+
    11. 5 rows in set (0.01 sec)
    12. mysql> select user,host from user;
    13. +---------------+---------------+
    14. | user | host |
    15. +---------------+---------------+
    16. | test1 | % |
    17. | test03 | 192.168.159.% |
    18. | mysql.session | localhost |
    19. | mysql.sys | localhost |
    20. | root | localhost |
    21. | test2 | localhost |
    22. +---------------+---------------+
    23. 6 rows in set (0.00 sec)
    24. mysql> grant all on *.* to 'test1'@'%';
    25. Query OK, 0 rows affected (0.00 sec)

    示例2、test2可以对company库中所有的表执行select

    1. mysql> grant select on company.* to 'test2'@'localhost';
    2. Query OK, 0 rows affected (0.00 sec)

    示例三、test03可以对company库中所有的表执行select、update

    1. mysql> grant select,update on company.* to 'test03'@'192.168.159.%';
    2. Query OK, 0 rows affected (0.00 sec)

    示例四、test1用户只能查询mysql.user表的user,host字段

    1. mysql> grant select(user,host) on mysql.user to 'test1'@'%';
    2. Query OK, 0 rows affected (0.00 sec)

    5、查看用户权限  show grants;

    5.1、查看当前登录的用户其用户权限

    show grants;

    1. [root@zwb_nginx_mysql3 ~]# mysql -uroot -pabc123 ##当前以root身份登录的
    2. mysql> show grants; ## 显示root用户拥有哪些权限
    3. +---------------------------------------------------------------------+
    4. | Grants for root@localhost |
    5. +---------------------------------------------------------------------+
    6. | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    7. | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
    8. +---------------------------------------------------------------------+
    9. 2 rows in set (0.00 sec)

    5.2、查看其他用户的用户权限

    show grants for 'tset1'@'%';(主机名可以不写,默认下是%)

    1. mysql> show grants for 'test1'@'%';
    2. +------------------------------------------------------------+
    3. | Grants for test1@% |
    4. +------------------------------------------------------------+
    5. | GRANT ALL PRIVILEGES ON *.* TO 'test1'@'%' |
    6. | GRANT SELECT (user, host) ON "mysql"."user" TO 'test1'@'%' |
    7. +------------------------------------------------------------+
    8. 2 rows in set (0.00 sec

    6、撤销用户的权限

    revoke privileges on database.table from '⽤户名'[@'主机/IP/%'];

    示例一、取消test1在mysql数据库中搜索user的授权

    1. mysql> show grants for 'test1'@'%'; ## 显示用户的所有权限
    2. +------------------------------------------------------------+
    3. | Grants for test1@% |
    4. +------------------------------------------------------------+
    5. | GRANT ALL PRIVILEGES ON *.* TO 'test1'@'%' |
    6. | GRANT SELECT (user, host) ON "mysql"."user" TO 'test1'@'%' |
    7. +------------------------------------------------------------+
    8. 2 rows in set (0.00 sec)
    9. mysql> revoke select(user) on mysql.user from test1; ##取消select(user)的权限
    10. Query OK, 0 rows affected (0.00 sec)
    11. mysql> show grants for test1; ## 显示调整后的用户权限
    12. +------------------------------------------------------+
    13. | Grants for test1@% |
    14. +------------------------------------------------------+
    15. | GRANT ALL PRIVILEGES ON *.* TO 'test1'@'%' |
    16. | GRANT SELECT (host) ON "mysql"."user" TO 'test1'@'%' |
    17. +------------------------------------------------------+
    18. 2 rows in set (0.00 sec)

    示例二、

    1. mysql> select user,host from mysql.user;
    2. +---------------+---------------+
    3. | user | host |
    4. +---------------+---------------+
    5. | test1 | % |
    6. | test03 | 192.168.159.% |
    7. | mysql.session | localhost |
    8. | mysql.sys | localhost |
    9. | root | localhost |
    10. | test2 | localhost |
    11. +---------------+---------------+
    12. 6 rows in set (0.00 sec)
    13. mysql> show grant for 'test03'@'192.168.159.%';
    14. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'grant for 'test03'@'192.168.159.%'' at line 1
    15. mysql> show grants for 'test03'@'192.168.159.%';
    16. +-----------------------------------------------------------------+
    17. | Grants for test03@192.168.159.% |
    18. +-----------------------------------------------------------------+
    19. | GRANT USAGE ON *.* TO 'test03'@'192.168.159.%' |
    20. | GRANT SELECT, UPDATE ON "company".* TO 'test03'@'192.168.159.%' |
    21. +-----------------------------------------------------------------+
    22. 2 rows in set (0.00 sec)
    23. mysql> revoke SELECT, UPDATE on company.* from 'test03'@'192.168.159.%';
    24. Query OK, 0 rows affected (0.00 sec)
    25. mysql> show grants for 'test03'@'192.168.159.%';
    26. +------------------------------------------------+
    27. | Grants for test03@192.168.159.% |
    28. +------------------------------------------------+
    29. | GRANT USAGE ON *.* TO 'test03'@'192.168.159.%' |
    30. +------------------------------------------------+
    31. 1 row in set (0.00 sec)

    7、删除账户  drop user

    方法一:命令行删除:drop user '用户名'@'主机名'

    1. mysql> select user,host from user; ### 显示当前的用户及主机名
    2. +---------------+---------------+
    3. | user | host |
    4. +---------------+---------------+
    5. | test1 | % |
    6. | test03 | 192.168.159.% |
    7. | mysql.session | localhost |
    8. | mysql.sys | localhost |
    9. | root | localhost |
    10. | test2 | localhost |
    11. +---------------+---------------+
    12. 6 rows in set (0.00 sec)
    13. mysql> drop user test1; ## 该用户的主机为‘%’,所有主机。删除用户时可省略
    14. Query OK, 0 rows affected (0.01 sec)
    15. mysql> drop user 'test03'@'192.168.159.%'; ##删除用户test03
    16. Query OK, 0 rows affected (0.00 sec)
    17. mysql> drop user 'test2'@'localhost'; ##删除用户test2
    18. Query OK, 0 rows affected (0.00 sec)
    19. mysql> select user,host from user; ## 查看删除后其情况,重启生效
    20. +---------------+-----------+
    21. | user | host |
    22. +---------------+-----------+
    23. | mysql.session | localhost |
    24. | mysql.sys | localhost |
    25. | root | localhost |
    26. +---------------+-----------+
    27. 3 rows in set (0.00 sec)

    方法二:通过删除mysql库中user表数据的方式

    delete from user where user='用户名' and host='主机';

    flush privileges;

    通过表的方式删除的,需要调用flush privileges;刷新权限信息(权限启动的时候在内存中保存的,通过修改mysql.user表的方式修改之后需要刷新⼀下)

    第六篇:DDL常见操作汇总

    DDL:数据定义语句。主要用于对数据库,表进行一些管理操作

    如:建库、删库、建表、修改表、删除表、对列的增删改等等

    1、库的管理

    1.1、创建库   create database

    建、删库通用写法:

    create database [if not exists] 新数据库名;

    drop database [if exists] 数据库名;

    create database [if not exists] 库名;

    1. mysql> create database if not exists xuexi; ##在xuexi的数据库不存在的情况下自
    2. ##动创建
    3. Query OK, 1 row affected (0.00 sec)
    4. mysql> show databases;
    5. +--------------------+
    6. | Database |
    7. +--------------------+
    8. | information_schema |
    9. | company |
    10. | mysql |
    11. | performance_schema |
    12. | sys |
    13. | xuexi |
    14. +--------------------+
    15. 6 rows in set (0.01 sec)

    1.2、删除库  drop database

    drop database if exists xuexi;

    1. mysql> drop database if exists xuexi; ## 判断存在的情况下,删除xuexi数据库
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> show databases;
    4. +--------------------+
    5. | Database |
    6. +--------------------+
    7. | information_schema |
    8. | company |
    9. | mysql |
    10. | performance_schema |
    11. | sys |
    12. +--------------------+
    13. 5 rows in set (0.00 sec)

    2、表的管理 

    2.1、创建表  create table

    create table 表名(

    字段1 类型[(宽度)] [约束条件] [comment '字段说明'],

    字段2 类型[(宽度)] [约束条件] [comment '字段说明'],

    字段3 类型[(宽度)] [约束条件] [comment '字段说明']

    )[表的一些设置]

    注意:

    ①在同⼀张表中,字段名不能相同

    ②宽度和约束条件为可选参数,字段名和类型是必须的

    ③最后⼀个字段后不能加逗号

    ④类型其实也是对字段的约束(约束字段下的记录必须为XX类型)

    ⑤类型后写的 约束条件 是在类型之外的 额外添加的约束

    约束条件分类:

    not null:标识该字段不能为空

    1. mysql> create database ceshi; ### 创建ceshi的库
    2. Query OK, 1 row affected (0.00 sec)
    3. mysql> use ceshi; ### 使用ceshi的库
    4. Database changed
    5. mysql> create table lianxi(a int not null comment '字段a'); ### 新建lianxi表且不能为空
    6. Query OK, 0 rows affected (0.00 sec)
    7. mysql> insert into lianxi values(null); ### 插入为空值。提示输入错误
    8. ERROR 1048 (23000): Column 'a' cannot be null
    9. mysql>
    10. mysql> insert into lianxi values(2); ### 正确的查看内容
    11. Query OK, 1 row affected (0.00 sec)
    12. mysql> select * from lianxi; ### 查看lianxi表的内容
    13. +---+
    14. | a |
    15. +---+
    16. | 2 |
    17. +---+
    18. 1 row in set (0.00 sec)

    default values :为该字段设置默认值。默认值为values

    1. mysql> create table mimi02(a int(20),b int not null default 0);
    2. Query OK, 0 rows affected (0.01 sec) ### 创建表,字段a为整型(20),b不为空值,默认为0
    3. mysql> insert into mimi02(a) values(10); ### 像表内a字段插入数据,b不定义他,他会取默认值0
    4. Query OK, 1 row affected (0.00 sec)
    5. mysql> select * from mimi02; ## 查看结果
    6. +------+---+
    7. | a | b |
    8. +------+---+
    9. | 10 | 0 |
    10. +------+---+
    11. 1 row in set (0.00 sec)

    primary key :标识该字段为该表的主键,可以唯⼀的标识记录,插⼊重复的会报错

    方法一:跟在列后面

    1. mysql> create table aa(id int(20) primary key,name varchar(40));
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> desc aa; ## 查看表结构,id 为主键
    4. +-------+-------------+------+-----+---------+-------+
    5. | Field | Type | Null | Key | Default | Extra |
    6. +-------+-------------+------+-----+---------+-------+
    7. | id | int(20) | NO | PRI | NULL | |
    8. | name | varchar(40) | YES | | NULL | |
    9. +-------+-------------+------+-----+---------+-------+
    10. 2 rows in set (0.00 sec)

    方法二:在所有定义之后定义:

    1. mysql> create table aaaa(id int(4),name varchar(30),primary key(id));
    2. Query OK, 0 rows affected (0.01 sec)
    3. mysql> desc aaaa;
    4. +-------+-------------+------+-----+---------+-------+
    5. | Field | Type | Null | Key | Default | Extra |
    6. +-------+-------------+------+-----+---------+-------+
    7. | id | int(4) | NO | PRI | NULL | |
    8. | name | varchar(30) | YES | | NULL | |
    9. +-------+-------------+------+-----+---------+-------+
    10. 2 rows in set (0.00 sec)

    foreign key : 为表中的字段设置外键

    1. mysql> create table test5( ### 创建 test5表
    2. -> a int(10) not null primary key
    3. -> );
    4. Query OK, 0 rows affected (0.01 sec)
    5. mysql> create table test6( ## 创建表 test6
    6. -> b int(10),
    7. -> test_5 int not null,
    8. -> foreign key(test_5) references test5(a)); ##设置外键
    9. Query OK, 0 rows affected (0.00 sec)
    10. mysql> insert into test5 (a) values (1)
    11. -> ;
    12. Query OK, 1 row affected (0.01 sec)
    13. mysql> insert into test6 (b,test6.test_5) values (1,1);
    14. Query OK, 1 row affected (0.00 sec)
    15. mysql> select * from test6;
    16. +------+--------+
    17. | b | test_5 |
    18. +------+--------+
    19. | 1 | 1 |
    20. +------+--------+
    21. 1 row in set (0.00 sec)
    22. mysql> select * from test5;
    23. +---+
    24. | a |
    25. +---+
    26. | 1 |
    27. +---+
    28. 1 row in set (0.00 sec)

    unique key: 标识该字段的值是唯⼀的

    1. mysql> drop table if exists test8; ## 如果有该表就删除
    2. Query OK, 0 rows affected, 1 warning (0.00 sec)
    3. mysql> create table test8(a int not null unique key); ## 创建表
    4. Query OK, 0 rows affected (0.00 sec)
    5. mysql> insert into test8(a) values(34); ## 插入a的值为34
    6. Query OK, 1 row affected (0.00 sec)
    7. mysql> select *from test8 ## 查看表的内容
    8. -> ;
    9. +----+
    10. | a |
    11. +----+
    12. | 34 |
    13. +----+
    14. 1 row in set (0.00 sec)
    15. mysql> insert into test8(a) values(34); ## 因为设置为唯一值,所以提示
    16. 已存在。
    17. ERROR 1062 (23000): Duplicate entry '34' for key 'a'

    auto_increment:标识该字段的值自动增长(整数类型,而且为主键)

    1. mysql> drop table if exists test8; ## 库存在的情况下,进行删除
    2. Query OK, 0 rows affected (0.00 sec)
    3. ## 建立表test8,一个字段di,约束为自增长和设置为主键
    4. mysql> create table test8(id int(4) auto_increment primary key);
    5. Query OK, 0 rows affected (0.00 sec)
    6. mysql> alter table test8 add name varchar(40); ## 增加列name
    7. Query OK, 0 rows affected (0.01 sec)
    8. Records: 0 Duplicates: 0 Warnings: 0
    9. mysql> desc test8; ## 查看表结构
    10. +-------+-------------+------+-----+---------+----------------+
    11. | Field | Type | Null | Key | Default | Extra |
    12. +-------+-------------+------+-----+---------+----------------+
    13. | id | int(4) | NO | PRI | NULL | auto_increment |
    14. | name | varchar(40) | YES | | NULL | |
    15. +-------+-------------+------+-----+---------+----------------+
    16. 2 rows in set (0.00 sec)
    17. mysql> insert into test8(name) values('zhangsan'); ## 只对字段name进行设置
    18. Query OK, 1 row affected (0.00 sec)
    19. mysql> insert into test8(name) values('lisi'); ## 只对字段name进行设置
    20. Query OK, 1 row affected (0.01 sec)
    21. mysql> select * from test8; ## 查看发现,虽然只设置了name字段,但是id自增长了
    22. +----+----------+
    23. | id | name |
    24. +----+----------+
    25. | 1 | zhangsan |
    26. | 2 | lisi |
    27. +----+----------+
    28. 2 rows in set (0.00 sec)

    注意:

    自增长当前列存储与内存中,数据库每次重启之后,会查询当前表中自增长列中的最大值作为当前值,如果表数据被清空之后,数据库重启了,自增长将从初始值开始。

    模拟1、删除表的内容再重新增加记录

    1. mysql> delete from test8; ## 删除test8的表内容
    2. Query OK, 2 rows affected (0.00 sec)
    3. mysql> select * from test8; ## 查看test8表内容,提示无内容
    4. Empty set (0.00 sec)
    5. mysql> insert into test8(name) values('wangwu'); ## 添加记录wangwu
    6. Query OK, 1 row affected (0.00 sec)
    7. mysql> select * from test8; ## 查看id发现自增长从3开始
    8. +----+--------+
    9. | id | name |
    10. +----+--------+
    11. | 3 | wangwu |
    12. +----+--------+
    13. 1 row in set (0.00 sec)

    模拟2、重启数据库

    1. mysql> delete from test8; ## 删除表内容
    2. Query OK, 1 row affected (0.00 sec)
    3. mysql> quit ## 退出数据库
    4. Bye
    5. [root@zwb_nginx_mysql3 ~]# systemctl restart mysqld.service ## 重启数据库
    6. [root@zwb_nginx_mysql3 ~]# mysql -uroot -pabc123 ## 登录数据库
    7. mysql: [Warning] Using a password on the command line interface can be insecure.
    8. Welcome to the MySQL monitor. Commands end with ; or \g.
    9. Your MySQL connection id is 3
    10. Server version: 5.7.20-log Source distribution
    11. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    12. Oracle is a registered trademark of Oracle Corporation and/or its
    13. affiliates. Other names may be trademarks of their respective
    14. owners.
    15. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    16. mysql> use ceshi; ## 切换到数据库ceshi
    17. Reading table information for completion of table and column names
    18. You can turn off this feature to get a quicker startup with -A
    19. Database changed
    20. mysql> show tables; ## 查看当前库下所有表
    21. +-----------------+
    22. | Tables_in_ceshi |
    23. +-----------------+
    24. | aa |
    25. | aaaa |
    26. | lianxi |
    27. | mimi |
    28. | mimi02 |
    29. | test5 |
    30. | test6 |
    31. | test8 |
    32. +-----------------+
    33. 8 rows in set (0.00 sec)
    34. mysql> select * from test8; ## 查看表test8提示无内容
    35. Empty set (0.00 sec)
    36. mysql> insert into test8(name) values('wangyi'); ## 增加记录
    37. Query OK, 1 row affected (0.00 sec)
    38. mysql> select * from test8; ## 查询表内容,自增长从1开始
    39. +----+--------+
    40. | id | name |
    41. +----+--------+
    42. | 1 | wangyi |
    43. +----+--------+
    44. 1 row in set (0.00 sec)

    2.2、删除表  drop table

    drop table [if exists] 表名;

    1. mysql> show tables;
    2. +-----------------+
    3. | Tables_in_ceshi |
    4. +-----------------+
    5. | aa |
    6. | aaaa |
    7. | lianxi |
    8. | mimi |
    9. | mimi02 |
    10. | test5 |
    11. | test6 |
    12. | test8 |
    13. +-----------------+
    14. 8 rows in set (0.00 sec)
    15. mysql> drop table test6; ## 删除表
    16. Query OK, 0 rows affected (0.00 sec)
    17. mysql> show tables;
    18. +-----------------+
    19. | Tables_in_ceshi |
    20. +-----------------+
    21. | aa |
    22. | aaaa |
    23. | lianxi |
    24. | mimi |
    25. | mimi02 |
    26. | test5 |
    27. | test8 |
    28. +-----------------+
    29. 7 rows in set (0.00 sec)

    2.3、修改表名  alter table

    alter table 表名 rename [to] 新表名

    1. mysql> alter table aa rename to gaiming; ## 修改表名
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> show tables;
    4. +-----------------+
    5. | Tables_in_ceshi |
    6. +-----------------+
    7. | aaaa |
    8. | gaiming |
    9. | lianxi |
    10. | mimi |
    11. | mimi02 |
    12. | test5 |
    13. | test8 |
    14. +-----------------+
    15. 7 rows in set (0.00 sec)

    2.4、复制表  create table 表名 like

    create table 表名 like 被复制的表名(只复制表的结构)

    1. mysql> create table fuzhi like aaaa; ## 新建fuzhi表复制aaaa的表结构
    2. Query OK, 0 rows affected (0.01 sec)
    3. mysql> desc fuzhi; ## 查看表结构
    4. +-------+-------------+------+-----+---------+-------+
    5. | Field | Type | Null | Key | Default | Extra |
    6. +-------+-------------+------+-----+---------+-------+
    7. | id | int(4) | NO | PRI | NULL | |
    8. | name | varchar(30) | YES | | NULL | |
    9. +-------+-------------+------+-----+---------+-------+
    10. 2 rows in set (0.00 sec)
    11. mysql> desc aaaa;
    12. +-------+-------------+------+-----+---------+-------+
    13. | Field | Type | Null | Key | Default | Extra |
    14. +-------+-------------+------+-----+---------+-------+
    15. | id | int(4) | NO | PRI | NULL | |
    16. | name | varchar(30) | YES | | NULL | |
    17. +-------+-------------+------+-----+---------+-------+
    18. 2 rows in set (0.00 sec)

    create table 表名 [as] select 字段,.... from 被复制的表[where 条件];(复制表的结构和数据)

    1. mysql> create table neirong as select * from test8;
    2. Query OK, 1 row affected (0.01 sec)
    3. Records: 1 Duplicates: 0 Warnings: 0
    4. mysql> select * from test8;
    5. +----+--------+
    6. | id | name |
    7. +----+--------+
    8. | 1 | wangyi |
    9. +----+--------+
    10. 1 row in set (0.00 sec)
    11. mysql> select * from neirong;
    12. +----+--------+
    13. | id | name |
    14. +----+--------+
    15. | 1 | wangyi |
    16. +----+--------+
    17. 1 row in set (0.00 sec)
    18. mysql> desc test8;
    19. +-------+-------------+------+-----+---------+----------------+
    20. | Field | Type | Null | Key | Default | Extra |
    21. +-------+-------------+------+-----+---------+----------------+
    22. | id | int(4) | NO | PRI | NULL | auto_increment |
    23. | name | varchar(40) | YES | | NULL | |
    24. +-------+-------------+------+-----+---------+----------------+
    25. 2 rows in set (0.00 sec)
    26. mysql> desc neirong;
    27. +-------+-------------+------+-----+---------+-------+
    28. | Field | Type | Null | Key | Default | Extra |
    29. +-------+-------------+------+-----+---------+-------+
    30. | id | int(4) | NO | | 0 | |
    31. | name | varchar(40) | YES | | NULL | |
    32. +-------+-------------+------+-----+---------+-------+
    33. 2 rows in set (0.00 sec)

    2.5、表中列的管理

    ①、添加列

    1. mysql> select * from test8; ## 显示当前的表内容
    2. +----+--------+------+-------+
    3. | id | name | addr | phone |
    4. +----+--------+------+-------+
    5. | 1 | wangyi | NULL | NULL |
    6. +----+--------+------+-------+
    7. 1 row in set (0.00 sec)
    8. mysql> alter table test8 add riqi varchar(30); ## 添加一列
    9. Query OK, 0 rows affected (0.03 sec)
    10. Records: 0 Duplicates: 0 Warnings: 0
    11. ## 一次添加多列
    12. mysql> alter table test8 add riqi1 varchar(30),add other varchhar(30);
    13. Query OK, 0 rows affected (0.04 sec)
    14. Records: 0 Duplicates: 0 Warnings: 0
    15. mysql> select * from test8; ## 查看表内容
    16. +----+--------+------+-------+------+-------+-------+
    17. | id | name | addr | phone | riqi | riqi1 | other |
    18. +----+--------+------+-------+------+-------+-------+
    19. | 1 | wangyi | NULL | NULL | NULL | NULL | NULL |
    20. +----+--------+------+-------+------+-------+-------+
    21. 1 row in set (0.00 sec)

    ②、修改列名

    alter table 表名 change 列名 新列名 新类型 [约束];

    1. mysql> alter table test8 drop addr,drop phone; ## 一次删除多行
    2. Query OK, 0 rows affected (0.03 sec)
    3. Records: 0 Duplicates: 0 Warnings: 0
    4. mysql> select * from test8;
    5. +----+--------+------+-------+-------+
    6. | id | name | riqi | riqi1 | other |
    7. +----+--------+------+-------+-------+
    8. | 1 | wangyi | NULL | NULL | NULL |
    9. +----+--------+------+-------+-------+
    10. 1 row in set (0.00 sec)

    ②、删除列

    1. mysql> alter table test8
    2. -> change riqi c varchar(30);
    3. Query OK, 0 rows affected (0.01 sec)
    4. Records: 0 Duplicates: 0 Warnings: 0
    5. mysql> select * from test8;
    6. +----+--------+------+-------+-------+
    7. | id | name | c | riqi1 | other |
    8. +----+--------+------+-------+-------+
    9. | 1 | wangyi | NULL | NULL | NULL |
    10. +----+--------+------+-------+-------+
    11. 1 row in set (0.00 sec)

    第七篇:DML常见操作

    DML(Data Manipulation Language)数据操作语⾔,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。

    1、插入单行

    方法一:

    insert into 表名[字段1,字段2,....] values (值1,值2);

    说明:

    值和字段需要⼀⼀对应

    如果是字符型或⽇期类型,值需要⽤单引号引起来;如果是数值类型,不需要⽤单引号

    字段如果不能为空,则必须插⼊值  

    1. mysql> select * from test8;
    2. +----+--------+------+-------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+--------+------+-------+-------+
    5. | 1 | wangyi | NULL | NULL | NULL |
    6. +----+--------+------+-------+-------+
    7. 1 row in set (0.00 sec)
    8. mysql> insert into test8(id,name,c,riqi1,other) ## 插入一行及值
    9. values(2,'wanger',NULL,NULL,NULL);
    10. Query OK, 1 row affected (0.00 sec)
    11. mysql> select * from test8;
    12. +----+--------+------+-------+-------+
    13. | id | name | c | riqi1 | other |
    14. +----+--------+------+-------+-------+
    15. | 1 | wangyi | NULL | NULL | NULL |
    16. | 2 | wanger | NULL | NULL | NULL |
    17. +----+--------+------+-------+-------+
    18. 2 rows in set (0.01 sec)

    还可以写成

    1. ## 此种加行的方法,必须知道表的结构,中间不能缺省任何一个值。否则报错
    2. mysql> insert into test8 values(4,4,4,4,4);
    3. Query OK, 1 row affected (0.00 sec)
    4. mysql> select * from test8;
    5. +----+---------+------+-------+-------+
    6. | id | name | c | riqi1 | other |
    7. +----+---------+------+-------+-------+
    8. | 1 | wangyi | NULL | NULL | NULL |
    9. | 2 | wanger | NULL | NULL | NULL |
    10. | 3 | wangsan | NULL | NULL | NULL |
    11. | 4 | 4 | 4 | 4 | 4 |
    12. +----+---------+------+-------+-------+
    13. 4 rows in set (0.00 sec)

    方法二:

    insert into 表名 set 字段 = 值,字段 = 值;

    1. mysql> select * from test8;
    2. +----+--------+------+-------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+--------+------+-------+-------+
    5. | 1 | wangyi | NULL | NULL | NULL |
    6. | 2 | wanger | NULL | NULL | NULL |
    7. +----+--------+------+-------+-------+
    8. 2 rows in set (0.01 sec)
    9. mysql> insert into test8 set id=3,name='wangsan',c=NULL,riqi1=NULL,other=NULL;
    10. Query OK, 1 row affected (0.00 sec)
    11. mysql> select * from test8;
    12. +----+---------+------+-------+-------+
    13. | id | name | c | riqi1 | other |
    14. +----+---------+------+-------+-------+
    15. | 1 | wangyi | NULL | NULL | NULL |
    16. | 2 | wanger | NULL | NULL | NULL |
    17. | 3 | wangsan | NULL | NULL | NULL |
    18. +----+---------+------+-------+-------+
    19. 3 rows in set (0.00 sec)

    行插入进阶版:

    1. mysql> drop table if exists test1; ## 查看表test1是否存在,存在则删除
    2. Query OK, 0 rows affected, 1 warning (0.00 sec)
    3. mysql> create table test1(a int,b int); ## 创建表test1,包含两个字节,a和b
    4. Query OK, 0 rows affected (0.01 sec)
    5. mysql> show tables; ## 查看所有表,test已经生成
    6. +-----------------+
    7. | Tables_in_ceshi |
    8. +-----------------+
    9. | aaaa |
    10. | fuzhi |
    11. | gaiming |
    12. | lianxi |
    13. | mimi |
    14. | mimi02 |
    15. | neirong |
    16. | test1 |
    17. | test5 |
    18. | test8 |
    19. +-----------------+
    20. 10 rows in set (0.00 sec)
    21. mysql> drop table if exists test2; ## 查看表test2是否存在,存在则删除
    22. Query OK, 0 rows affected, 1 warning (0.00 sec)
    23. mysql> create table test2(c1 int,c2 int,c3 int); ## 创建表test2,包含两个字节,c1,c2和c3
    24. Query OK, 0 rows affected (0.00 sec)
    25. mysql> show tables; ## 查看所有表,test2已建立
    26. +-----------------+
    27. | Tables_in_ceshi |
    28. +-----------------+
    29. | aaaa |
    30. | fuzhi |
    31. | gaiming |
    32. | lianxi |
    33. | mimi |
    34. | mimi02 |
    35. | neirong |
    36. | test1 |
    37. | test2 |
    38. | test5 |
    39. | test8 |
    40. +-----------------+
    41. 11 rows in set (0.00 sec)
    42. mysql> insert into test2 values (100,101,102),(200,201,202),(300,301,302), (400,401,402);
    43. Query OK, 4 rows affected (0.00 sec)
    44. Records: 4 Duplicates: 0 Warnings: 0 ## 往test2表中插入4行记录
    45. mysql> insert into test1 values(1,1),(2,2),(2,2);
    46. Query OK, 3 rows affected (0.01 sec)
    47. Records: 3 Duplicates: 0 Warnings: 0 ## 往test1表中插入3行记录
    48. mysql> select * from test1;
    49. +------+------+
    50. | a | b |
    51. +------+------+
    52. | 1 | 1 |
    53. | 2 | 2 |
    54. | 2 | 2 |
    55. +------+------+
    56. 3 rows in set (0.00 sec)
    57. mysql> select * from test2;
    58. +------+------+------+
    59. | c1 | c2 | c3 |
    60. +------+------+------+
    61. | 100 | 101 | 102 |
    62. | 200 | 201 | 202 |
    63. | 300 | 301 | 302 |
    64. | 400 | 401 | 402 |
    65. +------+------+------+
    66. 4 rows in set (0.00 sec)
    67. mysql> insert into test1(a,b) select c2,c3 from test2 where c1>=200;
    68. Query OK, 3 rows affected (0.01 sec) ## 往test中a,b字节插入记录,取于test2
    69. ## C1>=200 的记录集合
    70. Records: 3 Duplicates: 0 Warnings: 0
    71. mysql> select * from test1;
    72. +------+------+
    73. | a | b |
    74. +------+------+
    75. | 1 | 1 |
    76. | 2 | 2 |
    77. | 2 | 2 |
    78. | 201 | 202 |
    79. | 301 | 302 |
    80. | 401 | 402 |
    81. +------+------+
    82. 6 rows in set (0.00 sec)


    2、数据更新

    语法:

    update 表名 [[as] 别名] set [别名.]字段=值 [where条件];

    (有些表名可能名称比较长,为了方便操作,可以给这个表名起个简单的别名,更方便操作一些)

    1. mysql> select * from test8; ## 查看表中原有的数据
    2. +----+---------+------+-------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+---------+------+-------+-------+
    5. | 1 | wangyi | NULL | NULL | NULL |
    6. | 2 | wanger | NULL | NULL | NULL |
    7. | 3 | wangsan | NULL | NULL | NULL |
    8. | 4 | 4 | 4 | 4 | 4 |
    9. +----+---------+------+-------+-------+
    10. 4 rows in set (0.00 sec)
    11. mysql> update test8 set c=20 where id=1; ## 指定修改行id=1的那行,c=20
    12. Query OK, 1 row affected (0.01 sec)
    13. Rows matched: 1 Changed: 1 Warnings: 0
    14. mysql> select * from test8; ## 查看结果
    15. +----+---------+------+-------+-------+
    16. | id | name | c | riqi1 | other |
    17. +----+---------+------+-------+-------+
    18. | 1 | wangyi | 20 | NULL | NULL |
    19. | 2 | wanger | NULL | NULL | NULL |
    20. | 3 | wangsan | NULL | NULL | NULL |
    21. | 4 | 4 | 4 | 4 | 4 |
    22. +----+---------+------+-------+-------+
    23. 4 rows in set (0.00 sec)
    24. ## 不指定行数,则修改的先允许
    25. mysql> update test8 set riqi1='9月24日';
    26. Query OK, 4 rows affected (0.01 sec)
    27. Rows matched: 4 Changed: 4 Warnings: 0
    28. mysql> select * from test8;
    29. +----+---------+------+-----------+-------+
    30. | id | name | c | riqi1 | other |
    31. +----+---------+------+-----------+-------+
    32. | 1 | wangyi | 20 | 924日 | NULL |
    33. | 2 | wanger | NULL | 924日 | NULL |
    34. | 3 | wangsan | NULL | 924日 | NULL |
    35. | 4 | 4 | 4 | 924日 | 4 |
    36. +----+---------+------+-----------+-------+
    37. 4 rows in set (0.00 sec)

    3、删除数据

    3.1、使用delete删除(删除表的内容,表的结构仍在)

    delete [别名] from [表名] [[as] 别名] [where 条件];

    注意:

    如果⽆别名的时候,表名就是别名

    如果有别名,delete后⾯必须写别名

    如果没有别名,delete后⾯的别名可以省略不写

    1. mysql> select * from test1; ## 查看表test1内容
    2. +------+------+
    3. | a | b |
    4. +------+------+
    5. | 1 | 1 |
    6. | 2 | 2 |
    7. | 2 | 2 |
    8. | 201 | 202 |
    9. | 301 | 302 |
    10. | 401 | 402 |
    11. | 1 | 1 |
    12. | 2 | 2 |
    13. | 2 | 2 |
    14. +------+------+
    15. 9 rows in set (0.00 sec)
    16. mysql> delete from test1 where a=2; ## 加where选项表示删除test1表中a字节值等于2的部分
    17. Query OK, 4 rows affected (0.00 sec)
    18. mysql> select * from test1; ## 查看选择性删除的结果
    19. +------+------+
    20. | a | b |
    21. +------+------+
    22. | 1 | 1 |
    23. | 201 | 202 |
    24. | 301 | 302 |
    25. | 401 | 402 |
    26. | 1 | 1 |
    27. +------+------+
    28. 5 rows in set (0.00 sec)
    29. mysql> delete from test1; ## 删除所有表test1的所有内容
    30. Query OK, 5 rows affected (0.00 sec)
    31. mysql> select * from test1; ## 查看内容为空
    32. Empty set (0.00 sec)

    3.2、drop 、truncate、delete的区别

    ①drop (删除表):删除内容和定义,释放空间,简单来说就是把整个表去掉,以后要新增数据是不可能的,除⾮新增⼀个表

    ②truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构),与drop不同的是,只是清空表数据⽽已。

    注意:truncate不能删除具体⾏数据,要删就要把整个表清空了。

    ③delete (删除表中的数据):delete 语句⽤于删除表中的⾏。delete语句执⾏删除的过程是每次从表中删除⼀⾏,并且同时将该⾏的删除操作作为事务记录在⽇志中保存, 以便进⾏进⾏回滚操作。

    删除速度:drop> truncate > delete

    第八篇:

    一、select 查询基础篇

    1、查询所有列

    select * from 表名

    1. mysql> select * from test2; ## 查询整个表的内容
    2. +------+------+------+
    3. | c1 | c2 | c3 |
    4. +------+------+------+
    5. | 100 | 101 | 102 |
    6. | 200 | 201 | 202 |
    7. | 300 | 301 | 302 |
    8. | 400 | 401 | 402 |
    9. +------+------+------+
    10. 4 rows in set (0.00 sec)

    2、查询指定列

    select 查询的列 from 表名;

    1. mysql> select c1,c2 from test2; ## 查询表中指定列的内容
    2. +------+------+
    3. | c1 | c2 |
    4. +------+------+
    5. | 100 | 101 |
    6. | 200 | 201 |
    7. | 300 | 301 |
    8. | 400 | 401 |
    9. +------+------+
    10. 4 rows in set (0.00 sec)

    3、列别名

    在创建数据表时,⼀般都会使⽤英⽂单词或英⽂单词缩写来设置字段名,在查询时列名都会以英⽂的形式显⽰,这样会给⽤户查看数据带来不便,这种情况可以使⽤别名来代替英⽂列名,增强阅读性。

    语法:

    select 列 [as] 别名 from 表;

    1. mysql> select c1 as '列1',c2 as '列2' from test2;
    2. +------+------+
    3. | 列1 | 列2 |
    4. +------+------+
    5. | 100 | 101 |
    6. | 200 | 201 |
    7. | 300 | 301 |
    8. | 400 | 401 |
    9. +------+------+
    10. 4 rows in set (0.00 sec)
    11. 或者
    12. mysql> select c1 '列1',c2 '列2' from test2;
    13. +------+------+
    14. | 列1 | 列2 |
    15. +------+------+
    16. | 100 | 101 |
    17. | 200 | 201 |
    18. | 300 | 301 |
    19. | 400 | 401 |
    20. +------+------+
    21. 4 rows in set (0.00 sec)

    二、select条件查询

    1、条件查询

    语法:

    select 列名 from 表名 where 列 运算符值;

    注意: 数值按照大小比较

              字符按照ASCII码对应的值进行比较,比较时按照字符对应的位置一个字符一个字符的比较.(由于字符集的原因ASCII码比较时,没有大小写其区别)

    (注意:关键字where,where后⾯跟上⼀个或者多个条件,条件是对前⾯数据的过滤,只有满⾜where后⾯条件的数据才会被执行)

    1.1、条件查询运算符之等于(=)

    语法:

    select 列名 from 表名 where 列 = 值;(值如果是字符串类型,需要⽤单引号或者双引号引起来)

    1. mysql> select * from test8; ## 查询 test8的表内容
    2. +----+---------+------+-----------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+---------+------+-----------+-------+
    5. | 1 | wangyi | 20 | 9月24日 | NULL |
    6. | 2 | wanger | NULL | 9月24日 | NULL |
    7. | 3 | wangsan | NULL | 9月24日 | NULL |
    8. | 4 | 4 | 4 | 9月24日 | 4 |
    9. +----+---------+------+-----------+-------+
    10. 4 rows in set (0.00 sec)
    11. mysql> select * from test8 where id=1; ## 查询test8表内id=1的内容
    12. +----+--------+------+-----------+-------+
    13. | id | name | c | riqi1 | other |
    14. +----+--------+------+-----------+-------+
    15. | 1 | wangyi | 20 | 9月24日 | NULL |
    16. +----+--------+------+-----------+-------+
    17. 1 row in set (0.00 sec)
    18. mysql> select * from test8 where riqi1='9月24日'; ## 查询test8表内riqi1='9月24日的内容
    19. +----+---------+------+-----------+-------+
    20. | id | name | c | riqi1 | other |
    21. +----+---------+------+-----------+-------+
    22. | 1 | wangyi | 20 | 9月24日 | NULL |
    23. | 2 | wanger | NULL | 9月24日 | NULL |
    24. | 3 | wangsan | NULL | 9月24日 | NULL |
    25. | 4 | 4 | 4 | 9月24日 | 4 |
    26. +----+---------+------+-----------+-------+
    27. 4 rows in set (0.00 sec)

    1.2、条件查询运算符之不等于(<>或者!=)

    不等于有两种写法:<>或者!=

    方法一:select 列名 from 表名 where 列 <> 值; 

    方法二:select 列名 from 表名 where 列 != 值;

    1. mysql> select * from test8
    2. -> ;
    3. +----+---------+------+-----------+-------+
    4. | id | name | c | riqi1 | other |
    5. +----+---------+------+-----------+-------+
    6. | 1 | wangyi | 20 | 9月24日 | NULL |
    7. | 2 | wanger | NULL | 9月24日 | NULL |
    8. | 3 | wangsan | NULL | 9月24日 | NULL |
    9. | 4 | 4 | 4 | 9月24日 | 4 |
    10. +----+---------+------+-----------+-------+
    11. 4 rows in set (0.00 sec)
    12. mysql> select * from test8 where name<>4; ## 查询name列值不等于4的记录
    13. +----+---------+------+-----------+-------+
    14. | id | name | c | riqi1 | other |
    15. +----+---------+------+-----------+-------+
    16. | 1 | wangyi | 20 | 9月24日 | NULL |
    17. | 2 | wanger | NULL | 9月24日 | NULL |
    18. | 3 | wangsan | NULL | 9月24日 | NULL |
    19. +----+---------+------+-----------+-------+
    20. 3 rows in set, 3 warnings (0.00 sec)
    21. 或者:
    22. mysql> select * from test8 where name!=4; ## 不等于的两种表达方式
    23. +----+---------+------+-----------+-------+
    24. | id | name | c | riqi1 | other |
    25. +----+---------+------+-----------+-------+
    26. | 1 | wangyi | 20 | 9月24日 | NULL |
    27. | 2 | wanger | NULL | 9月24日 | NULL |
    28. | 3 | wangsan | NULL | 9月24日 | NULL |
    29. +----+---------+------+-----------+-------+
    30. 3 rows in set, 3 warnings (0.00 sec)

    1.3、条件查询运算符之大于(>)

    select 列名 from 表名 where 列 > 值;

    1. mysql> select * from test8;
    2. +----+---------+------+-----------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+---------+------+-----------+-------+
    5. | 1 | wangyi | 20 | 9月24日 | NULL |
    6. | 2 | wanger | NULL | 9月24日 | NULL |
    7. | 3 | wangsan | NULL | 9月24日 | NULL |
    8. | 4 | 4 | 4 | 9月24日 | 4 |
    9. | 5 | wangsi | 21 | 25日 | NULL |
    10. | 6 | wangwu | 25 | 25日 | NULL |
    11. +----+---------+------+-----------+-------+
    12. 6 rows in set (0.00 sec)
    13. mysql> select * from test8 where c>'21'; ## 此处单引号可以不加
    14. +----+--------+------+-----------+-------+
    15. | id | name | c | riqi1 | other |
    16. +----+--------+------+-----------+-------+
    17. | 4 | 4 | 4 | 9月24日 | 4 |
    18. | 6 | wangwu | 25 | 25日 | NULL |
    19. +----+--------+------+-----------+-------+
    20. 2 rows in set (0.00 sec)

    2、逻辑查询运算符

    当我们需要使⽤多个条件进⾏查询的时候,需要使用逻辑查询运算符

    2.1、AND(并且)

    select 列名 from 表名 where 条件1 and 条件2;

    1. mysql> select * from test8;
    2. +----+---------+------+-----------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+---------+------+-----------+-------+
    5. | 1 | wangyi | 20 | 9月24日 | NULL |
    6. | 2 | wanger | NULL | 9月24日 | NULL |
    7. | 3 | wangsan | NULL | 9月24日 | NULL |
    8. | 4 | 4 | 4 | 9月24日 | 4 |
    9. | 5 | wangsi | 21 | 25日 | NULL |
    10. | 6 | wangwu | 25 | 25日 | NULL |
    11. +----+---------+------+-----------+-------+
    12. 6 rows in set (0.00 sec)
    13. mysql> select * from test8 where name='wangsi' and riqi1='25日';##须同时满足and的前后的两个条件
    14. +----+--------+------+-------+-------+
    15. | id | name | c | riqi1 | other |
    16. +----+--------+------+-------+-------+
    17. | 5 | wangsi | 21 | 25日 | NULL |
    18. +----+--------+------+-------+-------+
    19. 1 row in set (0.00 sec)

    2.1、OR (或者)

    select 列名 from 表名 where 条件1 or 条件2;

    1. mysql> select * from test8;
    2. +----+---------+------+-----------+-------+
    3. | id | name | c | riqi1 | other |
    4. +----+---------+------+-----------+-------+
    5. | 1 | wangyi | 20 | 9月24日 | NULL |
    6. | 2 | wanger | NULL | 9月24日 | NULL |
    7. | 3 | wangsan | NULL | 9月24日 | NULL |
    8. | 4 | 4 | 4 | 9月24日 | 4 |
    9. | 5 | wangsi | 21 | 25日 | NULL |
    10. | 6 | wangwu | 25 | 25日 | NULL |
    11. +----+---------+------+-----------+-------+
    12. 6 rows in set (0.00 sec)
    13. mysql> select * from test8 where name='wangyi' or name='wangwu';
    14. +----+--------+------+-----------+-------+
    15. | id | name | c | riqi1 | other | ## 查询出name=wangyi 或者name=wangwu的记录
    16. +----+--------+------+-----------+-------+
    17. | 1 | wangyi | 20 | 9月24日 | NULL |
    18. | 6 | wangwu | 25 | 25日 | NULL |
    19. +----+--------+------+-----------+-------+
    20. 2 rows in set (0.01 sec)

    2.3、like (模糊查询)

    select 列名 from 表名 where 列 like pattern;

    注意:

    pattern中可以包含通配符,有以下通配符:

                                                                         %:表⽰匹配任意⼀个或多个字符

                                                                          _:表⽰匹配任意⼀个字符

    1. mysql> create table stu(编号 int(4) not null primary key,年龄 int(8) not null,姓名 varchar(40) not null);
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> desc stu;
    4. +--------+-------------+------+-----+---------+-------+
    5. | Field | Type | Null | Key | Default | Extra |
    6. +--------+-------------+------+-----+---------+-------+
    7. | 编号 | int(4) | NO | PRI | NULL | |
    8. | 年龄 | int(8) | NO | | NULL | |
    9. | 姓名 | varchar(40) | NO | | NULL | |
    10. +--------+-------------+------+-----+---------+-------+
    11. 3 rows in set (0.00 sec)
    12. mysql> insert into stu values (1,22,'张三'),(2,25,'李四'),(3,26,'张学友'),(4,32,'刘德华'),(5,55,'张学良');
    13. Query OK, 5 rows affected (0.01 sec)
    14. Records: 5 Duplicates: 0 Warnings: 0
    15. mysql> select * from stu;
    16. +--------+--------+-----------+
    17. | 编号 | 年龄 | 姓名 |
    18. +--------+--------+-----------+
    19. | 1 | 22 | 张三 |
    20. | 2 | 25 | 李四 |
    21. | 3 | 26 | 张学友 |
    22. | 4 | 32 | 刘德华 |
    23. | 5 | 55 | 张学良 |
    24. +--------+--------+-----------+
    25. 5 rows in set (0.00 sec)
    26. mysql> select * from stu where 姓名 like '张%'; ## 张后面有一个或多个字符
    27. +--------+--------+-----------+
    28. | 编号 | 年龄 | 姓名 |
    29. +--------+--------+-----------+
    30. | 1 | 22 | 张三 |
    31. | 3 | 26 | 张学友 |
    32. | 5 | 55 | 张学良 |
    33. +--------+--------+-----------+
    34. 3 rows in set (0.00 sec)
    35. mysql> select * from stu where 姓名 like '%学%'; ## 张前后面有一个或多个字符
    36. +--------+--------+-----------+
    37. | 编号 | 年龄 | 姓名 |
    38. +--------+--------+-----------+
    39. | 3 | 26 | 张学友 |
    40. | 5 | 55 | 张学良 |
    41. +--------+--------+-----------+
    42. 2 rows in set (0.00 sec)
    43. mysql> select * from stu where 姓名 like '张_'; ## 张后面有一个字符
    44. +--------+--------+--------+
    45. | 编号 | 年龄 | 姓名 |
    46. +--------+--------+--------+
    47. | 1 | 22 | 张三 |
    48. +--------+--------+--------+
    49. 1 row in set (0.00 sec)

    2.4、BETWEEN AND(区间查询)

    操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围,这些值可以是数值、⽂本或者⽇期,属于⼀个闭区间查询

    selec 列名 from 表名 where 列名 between 值1 and 值2;

    注意:

    返回对应的列的值在[值1,值2]区间中的记录

    使⽤between and可以提⾼语句的简洁度

    两个临界值不要调换位置,只能是⼤于等于左边的值,并且⼩于等于右边的值

    查询年龄在[25,32]之间的;

    1. mysql> select * from stu where 年龄 between 25 and 32;
    2. +--------+--------+-----------+
    3. | 编号 | 年龄 | 姓名 |
    4. +--------+--------+-----------+
    5. | 2 | 25 | 李四 |
    6. | 3 | 26 | 张学友 |
    7. | 4 | 32 | 刘德华 |
    8. +--------+--------+-----------+
    9. 3 rows in set (0.00 sec)

    2.5、IN 查询

    1. mysql> create table 年龄(id int(4),age int(10));
    2. Query OK, 0 rows affected (0.01 sec)
    3. mysql> show tables;
    4. +-----------------+
    5. | Tables_in_ceshi |
    6. +-----------------+
    7. | 年龄 |
    8. | cs |
    9. | stu |
    10. +-----------------+
    11. 3 rows in set (0.00 sec)
    12. mysql> insert into 年龄 values(1,14),(2,15),(3,18),(4,20),(5,28);
    13. Query OK, 5 rows affected (0.00 sec)
    14. Records: 5 Duplicates: 0 Warnings: 0
    15. mysql> select * from 年龄;
    16. +------+------+
    17. | id | age |
    18. +------+------+
    19. | 1 | 14 |
    20. | 2 | 15 |
    21. | 3 | 18 |
    22. | 4 | 20 |
    23. | 5 | 28 |
    24. +------+------+
    25. 5 rows in set (0.01 sec)
    26. mysql> select * from 年龄 where age in (15,18,28); ### 把查询内容放在括号内做为一个查询集合
    27. +------+------+
    28. | id | age |
    29. +------+------+
    30. | 2 | 15 |
    31. | 3 | 18 |
    32. | 5 | 28 |
    33. +------+------+
    34. 3 rows in set (0.00 sec)

    2.6、NOT IN 查询

    1. mysql> select * from 年龄 where age not in (15,18,28); ## 加上not表示不在集合内的
    2. +------+------+
    3. | id | age |
    4. +------+------+
    5. | 1 | 14 |
    6. | 4 | 20 |
    7. +------+------+
    8. 2 rows in set (0.00 sec)


    2.7、NULL 存在的坑(IS NULL / IS NOT NULL:NULL值专用查询)

    1. mysql> select * from test5;
    2. +---+------+------+
    3. | a | b | c |
    4. +---+------+------+
    5. | 1 | 2 | a |
    6. | 3 | NULL | b |
    7. | 4 | 5 | NULL |
    8. +---+------+------+
    9. 3 rows in set (0.00 sec)

    查询运算符、likebetween andinnot inNULL值查询不起效

    1. mysql> select * from test5;
    2. +---+------+------+
    3. | a | b | c |
    4. +---+------+------+
    5. | 1 | 2 | a |
    6. | 3 | NULL | b |
    7. | 4 | 5 | NULL |
    8. +---+------+------+
    9. 3 rows in set (0.00 sec)
    10. mysql> select * from test5 where b is null; ## 使用is null 可以查询到null项
    11. +---+------+------+
    12. | a | b | c |
    13. +---+------+------+
    14. | 3 | NULL | b |
    15. +---+------+------+
    16. 1 row in set (0.00 sec)
    17. mysql> select * from test5 where b is not null; ## 查询b字节不为空(is not null)的项
    18. +---+------+------+
    19. | a | b | c |
    20. +---+------+------+
    21. | 1 | 2 | a |
    22. | 4 | 5 | NULL |
    23. +---+------+------+
    24. 2 rows in set (0.00 sec)

    运算符总结:

    • like中的%可以匹配⼀个到多个任意的字符,_可以匹配任意⼀个字符
    • 空值查询需要使用IS NULL或者IS NOT NULL,其他查询运算符对NULL值无效
    • 建议创建表的时候,尽量设置表的字段不能为空,给字段设置⼀个默认值

    第九篇 : 排序(正序、倒序)

    1、排序查询(order by)

    单字段排序

    语法:select 字段名 from 表名 order by 字段1 [asc|desc];

    注意:

    需要排序的字段跟在order by之后;

    asc|desc表⽰排序的规则,asc:升序,desc:降序,默认为asc,可以不写;

    ⽀持多个字段进⾏排序,多字段排序之间⽤逗号隔开

    当表中设置了主键时,默认以主键升序的顺序。

    1. mysql> create table test2(a int,b varchar(10));
    2. Query OK, 0 rows affected (0.00 sec)
    3. mysql> insert into test2 values (10,'jack'),(8,'tom'),(5,'ready'),(100,'javacode');
    4. Query OK, 4 rows affected (0.01 sec)
    5. Records: 4 Duplicates: 0 Warnings: 0
    6. mysql> select * from test2; ## 创建test2表后查看其内容
    7. +------+----------+
    8. | a | b |
    9. +------+----------+
    10. | 10 | jack |
    11. | 8 | tom |
    12. | 5 | ready |
    13. | 100 | javacode |
    14. +------+----------+
    15. 4 rows in set (0.00 sec)
    16. mysql> select * from test2 order by a; ## 查询test2表,且按a字节正序排列
    17. +------+----------+
    18. | a | b |
    19. +------+----------+
    20. | 5 | ready |
    21. | 8 | tom |
    22. | 10 | jack |
    23. | 100 | javacode |
    24. +------+----------+
    25. 4 rows in set (0.00 sec)
    26. mysql> select * from test2 order by a desc; ## 查询test2表,且按a字节倒序排列
    27. +------+----------+
    28. | a | b |
    29. +------+----------+
    30. | 100 | javacode |
    31. | 10 | jack |
    32. | 8 | tom |
    33. | 5 | ready |
    34. +------+----------+
    35. 4 rows in set (0.00 sec)

    2、多字段排列

    1. mysql> select * from test2; ## 原边内容
    2. +------+----------+------+------+
    3. | a | b | c | d |
    4. +------+----------+------+------+
    5. | 10 | jack | 18 | 16 |
    6. | 8 | tom | 19 | 21 |
    7. | 5 | ready | 20 | 24 |
    8. | 100 | javacode | 29 | 28 |
    9. | 100 | hiji | 28 | 36 |
    10. +------+----------+------+------+
    11. 5 rows in set (0.00 sec)
    12. mysql> select * from test2 order by a,c desc; ##按照a字节正序,再按照c字节倒序排列
    13. +------+----------+------+------+
    14. | a | b | c | d |
    15. +------+----------+------+------+
    16. | 5 | ready | 20 | 24 |
    17. | 8 | tom | 19 | 21 |
    18. | 10 | jack | 18 | 16 |
    19. | 100 | javacode | 29 | 28 |
    20. | 100 | hiji | 28 | 36 |
    21. +------+----------+------+------+
    22. 5 rows in set (0.00 sec)

    3、limit 介绍

    limit⽤来限制select查询返回的⾏数,常⽤于分页等操作

    语法:

    select 列 from 表 limit [offset,] count;

    3.1、获取前n行的记录

    select 列 from 表 limit 0,n;

    1. mysql> select * from test2; ## 查看表test2的内容
    2. +------+----------+------+------+
    3. | a | b | c | d |
    4. +------+----------+------+------+
    5. | 10 | jack | 18 | 16 |
    6. | 8 | tom | 19 | 21 |
    7. | 5 | ready | 20 | 24 |
    8. | 100 | javacode | 29 | 28 |
    9. | 100 | hiji | 28 | 36 |
    10. +------+----------+------+------+
    11. 5 rows in set (0.00 sec)
    12. mysql> select * from test2 limit 0,3; ## 查看表test2中从0行开始,后面的3行的记录
    13. +------+-------+------+------+
    14. | a | b | c | d |
    15. +------+-------+------+------+
    16. | 10 | jack | 18 | 16 |
    17. | 8 | tom | 19 | 21 |
    18. | 5 | ready | 20 | 24 |
    19. +------+-------+------+------+
    20. 3 rows in set (0.00 sec)
    21. mysql> select * from test2 limit 2,2; ## limit 2,2表示第二行后面的两行,就是34
    22. 行记录
    23. +------+----------+------+------+
    24. | a | b | c | d |
    25. +------+----------+------+------+
    26. | 5 | ready | 20 | 24 |
    27. | 100 | javacode | 29 | 28 |
    28. +------+----------+------+------+
    29. 2 rows in set (0.00 sec)

    第十篇:子查询

    出现在select语句中的select语句,通俗解释就是查询语句中嵌套着另一个查询语句,称为子查询或内查询

    1. ## 新建表classes
    2. mysql> CREATE TABLE `classes` (
    3. -> `classid` int primary key AUTO_INCREMENT comment '班级i
    4. -> `classname` varchar(30) DEFAULT NULL comment '班级名称'
    5. -> ) ENGINE=InnoDB comment '班级表';
    6. Query OK, 0 rows affected (0.00 sec)
    7. mysql> insert into `classes`(`classname`) values ('初三一班'),('初 三二班'),('初三三班');
    8. Query OK, 3 rows affected (0.00 sec)
    9. Records: 3 Duplicates: 0 Warnings: 0
    10. ## 新疆表students
    11. mysql> CREATE TABLE `students` (
    12. -> `studentid` int primary key NOT NULL AUTO_INCREMENT comment '学生id',
    13. -> `studentname` varchar(20) DEFAULT NULL comment '学生姓名',
    14. -> `score` DECIMAL(10,2) DEFAULT NULL comment '毕业成绩',
    15. -> `classid` int(4) DEFAULT NULL comment '所属班级id,来 源于classes表的classid'
    16. -> ) ENGINE=InnoDB comment '学生表';
    17. Query OK, 0 rows affected (0.01 sec)
    18. mysql> insert into `students`(`studentname`,`score`,`classid`) values('brand',97.5,1),('helen',96.5,1),('lyn',96,1),('sol',97,1),('weng',100,1),('diny',92.7,1),('b1',81,2),('b2',82,2),('b3',83,2),('b4',84,2),('b5',85,2),('b6',86,2),('c1',71,3),('c2',72.5,3),('c3',73,3),('c4',74,3),('c5',75,3),('c6',76,3);
    19. Query OK, 18 rows affected (0.00 sec)
    20. Records: 18 Duplicates: 0 Warnings: 0
    21. ## 新建表scores
    22. mysql> CREATE TABLE `scores`(
    23. -> `scoregrad` varchar(3) primary key comment '等级:S、A、B、C、D',
    24. -> `downset` int comment '分数评级下限',
    25. -> `upset` int comment '分数评级上限'
    26. -> ) comment '毕业考核分数排名表';
    27. Query OK, 0 rows affected (0.01 sec)
    28. mysql> INSERT INTO `scores` values ('S', 91, 100),('A', 81, 90),('B', 71, 80),('C', 61, 70),('D', 51,60);
    29. Query OK, 5 rows affected (0.00 sec)
    30. Records: 5 Duplicates: 0 Warnings: 0
    31. mysql> show tables; ## 查询当前库的所有的表
    32. +--------------------------+
    33. | Tables_in_Helenlyn_Class |
    34. +--------------------------+
    35. | classes |
    36. | scores |
    37. | students |
    38. +--------------------------+
    39. 3 rows in set (0.00 sec)

    以上为后面的实验环境。

    1、子查询的分类

    1.1、按照查询的返回结果

    单行单列(标量子查询):返回的是一个具体列的内容,可以理解为一个单值数据;

    单行多列(行子查询):返回一行数据中多个列的内容;

    多行单列(列子查询):返回多行记录之中同一列的内容,相当于给出了一个操作范围;

    多行多列(表子查询):查询返回的结果是一张临时表;

    1.2、按子查询位置区分

    select后的子查询:仅仅支持标量子查询,即只能返回一个单值数据。

    from型子查询:把内层的查询结果当成临时表,供外层sql再次查询,所以支持的是表子查询

    where或having型子查询:指把内部查询的结果作为外层查询的比较条件,支持标量子查询(单列单行)、列子查询(单列多行)、行子查询(多列多行)

  • 相关阅读:
    (片刻秒懂超级详细)linux的xshell时间同步,时区,年月日CST问题解决
    SSD上 NVIDIA Jetson Orin NANO系統如何刷
    C++ vector类模拟实现
    Windows上搭建一个网站(基本生产环境)
    R-CNN(Regions with CNN features)
    Flutter android和ios闪屏页配置
    CVE-2022-22954-VMware Workspace ONE Access SSTI远程代码执行流量特征
    股票数据分析应用之可视化图表组件
    qtabwidget 样式表
    牛客竞赛网(爱吃素)
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/126944122