MySQL数据库基础语句(进阶版)

末蓝、 2024-04-06 10:55 147阅读 0赞

目录

第一篇: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

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

6894c618975a41c0a19107cd6ceade7d.png

语法二:**mysql -u root -p**

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

1deb287f88f94e77b80a4847bddf8323.png

2、修改MySQL的root用户密码

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

50d6a0e55c4d4b45b3524c0b5e35cdad.png

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的语言分类

  • DQL**DataQuery Language**):数据查询语⾔ select 相关语句
  • DML**DataManipulateLanguage)**:数据操作语⾔ insert 、update、delete 语句
  • DDL**DataDe>ineLanguge)**:数据定义语⾔ create、drop、alter 语句
  • TCL**TransactionControlLanguage)**:事务控制语⾔ 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)

验证:

d0eda475ddc84ac3b851d6c76c081743.png

操作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>

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

4908c7a0f8634867aec791c63fd9bd55.png

方式三:通过修改数据库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 | 924 | NULL |
  6. | 2 | wanger | NULL | 924 | NULL |
  7. | 3 | wangsan | NULL | 924 | NULL |
  8. | 4 | 4 | 4 | 924 | 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 | 924 | 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 | 924 | NULL |
  23. | 2 | wanger | NULL | 924 | NULL |
  24. | 3 | wangsan | NULL | 924 | NULL |
  25. | 4 | 4 | 4 | 924 | 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 | 924 | NULL |
  7. | 2 | wanger | NULL | 924 | NULL |
  8. | 3 | wangsan | NULL | 924 | NULL |
  9. | 4 | 4 | 4 | 924 | 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 | 924 | NULL |
  17. | 2 | wanger | NULL | 924 | NULL |
  18. | 3 | wangsan | NULL | 924 | 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 | 924 | NULL |
  27. | 2 | wanger | NULL | 924 | NULL |
  28. | 3 | wangsan | NULL | 924 | 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 | 924 | NULL |
  6. | 2 | wanger | NULL | 924 | NULL |
  7. | 3 | wangsan | NULL | 924 | NULL |
  8. | 4 | 4 | 4 | 924 | 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 | 924 | 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 | 924 | NULL |
  6. | 2 | wanger | NULL | 924 | NULL |
  7. | 3 | wangsan | NULL | 924 | NULL |
  8. | 4 | 4 | 4 | 924 | 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 | 924 | NULL |
  6. | 2 | wanger | NULL | 924 | NULL |
  7. | 3 | wangsan | NULL | 924 | NULL |
  8. | 4 | 4 | 4 | 924 | 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 | 924 | 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)

查询运算符、**likebetweenandinnotinNULL**值查询不起效

  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**中的%可以匹配⼀个到多个任意的字符,_可以匹配任意⼀个字符**
  • 空值查询需要使用**ISNULL或者IS NOTNULL,其他查询运算符对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表示第二行后面的两行,就是3和4
  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 '等级:SABCD',
  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型子查询:指把内部查询的结果作为外层查询的比较条件,支持标量子查询(单列单行)、列子查询(单列多行)、行子查询(多列多行)

发表评论

表情:
评论列表 (有 0 条评论,147人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql语句

    一、数据类型 MySQL中定义数据字段的类型对数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)0类型。 1、数