一、SQL概述
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
从上可以看出我们数据库相关工作职位大概两种:DBA和DBD
DBA是数据库管理员database administrator
DBD是数据库开发人员database developer
SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准。
常见的数据库软件名称:括DB2、ORACLE、SYBASE、MySQL、SQLSERVER、ACCESS等。
1、常见sql语句
select 查询语句
insert 插入语句
delete 删除语句
update 更新语句
2、理解数据库
数据库是一个有组织的,根据具体标准分类的数据集合
例如:
• 档案柜=数据库服务器
• 抽屉=数据库
• 文件=表
• 文件中每条信息=记录
二、SQL语句结构
SQL结构化查询语言包含6个部分:
1、数据查询语言(DQL:Data Query Language)
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
2、数据操作语言(DML:Data Manipulation Language)
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
3、事务处理语言(TPL):跟shell有点类似 由多条SQL语句组成的整体
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
4、数据控制语言(DCL)
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、数据定义语言(DDL)
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
6、指针控制语言(CCL)
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。declare [dɪˈkler] 声明 ; cursor [ˈkɜ:rsə®] 光标 ; into [ˈɪntu] 获取到
三、Mysql语句(关于数据库的相关操作)
1、登录数据库
[root@xuegod ~]# mysql -uroot -p123456
-u:后加登录数据库的用户名,可以加空格,也可以不加
-p:后加登录数据库的用户名的密码,不加空格
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.26
Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
2、查看所有数据库
mysql> show database;
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 ‘database’ at line 1
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
注:这里我们可以看到执行查看数据库命令,提示:在执行此语句之前,必须使用alter user语句重置密码。
因为:mysql的密码默认是360天需要修改一次,所以初次安装mysql数据库后,登录数据库,默认需要修改密码,否则做任何操作,都无法执行。
mysql> show variables like ‘default_password_lifetime’;
±————————–±——+
| Variable_name | Value |
±————————–±——+
| default_password_lifetime | 0 |
±————————–±——+
1 row in set (0.00 sec)
在5.7.11之前,默认 default_password_lifetime值为360(密码每年大约必须更改一次)。对于此类版本,请注意,如果您未对default_password_lifetime 变量或单个用户帐户进行任何更改 ,则每个用户密码将在360天后过期,并且帐户将以受限模式运行。使用该帐户连接到服务器的客户端会收到错误,指示必须更改密码:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
将default_password_lifetime 变量设置 为0,从而禁用所有用户的自动密码到期。
我们这里显示的值是0,是因为在my.cnf配置文件内,添加了如下一行参数:
[mysqld]
default_password_lifetime=0
具体操作如下:
因为这里我们使用的实现环境,设置的密码是简单密码,所以还需要关闭密码复杂度,修改my.cnf文件,添加如下一行内容:
在/etc/my.cnf 可关闭密码强度审计插件,重启MySQl服务。
在[mysqld]末行;
validate-password=OFF #不使用密码强度审计插件
[root@xuegod63 ~]# systemctl restart mysqld #重启数据库服务
然后使用ALTER USER修改密码
mysql> alter user user() identified by “123456”; #修改当前登录用户的密码为123456
Query OK, 0 rows affected (0.00 sec)
这里我们再来查看数据库:
mysql> show databases;
±——————-+
| Database |
±——————-+
| information_schema |
| mysql |
| performance_schema |
| sys |
±——————-+
4 rows in set (0.00 sec)
注:
(1)information_schema #这数据库保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型不访问权限等。 schema [ˈskimə] 图表
(2)performance_schema #MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。performance [pəˈfɔ:məns] 性能
(3)mysql库是系统库,里面保存有账户信息,权限信息等。
(4)MySQL 5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息。元数据是关于数据信息的数据,如:数据库名或表名,列的数据类型,或访问权限等。
例1:以行的方式显示数据库: \G #将分号更换为\G
mysql> show databases\G
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: performance_schema
*************************** 4. row ***************************
Database: sys
4 rows in set (0.00 sec)
例2:mysql语句,可以直接在终端进行交互
使用-e 参数,这里后面写SQL相关的shell脚本会用到
[root@xuegod ~]# mysql -e ‘show databases;’ -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
±——————-+
| Database |
±——————-+
| information_schema |
| mysql |
| performance_schema |
| sys |
±——————-+
[root@xuegod ~]#
3、创建数据库
语法:create dabase 数据库名;
创建数据库注意事项:
(1)在文件系统中,MySQL的数据存储区将以目录方式表示MySQL数据库。因此,上面命令中的数据库名字必须与操作系统的约束的目录名字一致。例如不允许文件和目录名中有,/,:,*,?,”,<,>,|这些符号,在MySQL数据库名字中这些字母会被自动删除。<遵从目录的约束>
(2)数据库的名字不能超过64个字符,包含特殊字符的名字或者是全部由数字或保留字组成的名字必须用反引号“包起来。
(3)数据库不能重名。
例1:创建数据库
mysql> create database HA; #没有保留字或特殊符号,可以直接创建成功
Query OK, 1 row affected (0.00 sec)
mysql> create database HA-test; #有连接符号,不加反引号,无法创建成功
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 ‘-test’ at line 1
mysql> create database ‘HA-test’; #加单引号无法创建成功
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 ‘‘HA-test’’ at line 1
mysql> create database
HA-test
; #必须加反引号才能创建成功
Query OK, 1 row affected (0.00 sec)
mysql> show databases\G
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: HA
*************************** 3. row ***************************
Database: HA-test
*************************** 4. row ***************************
Database: mysql
*************************** 5. row ***************************
Database: performance_schema
*************************** 6. row ***************************
Database: sys
6 rows in set (0.00 sec)
总结:单引号和反引号使用场景
反引号是为了区分MySQL的保留字与普通字符而引入的符号。
例:create database
create
;
如果不用反引号,MySQL将把
create
视为保留字而导致出错,所以,有MySQL保留字作为字段的,必须加上反引号来区分。
引号一般用在字段的值,如果字段值是字符或字符串,则要加引号,如:select=‘字段值’
不加反引号建的数据库或表不能包含MySQL保留字,否则出错。
重点:数据库的存放目录
[root@xuegod ~]# ls /var/lib/mysql
auto.cnf client-key.pem ibdata1 mysql private_key.pem sys
ca-key.pem HA ib_logfile0 mysql.sock public_key.pem
ca.pem HA@002dtest ib_logfile1 mysql.sock.lock server-cert.pem
client-cert.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem
4、选择需要操作的数据库
使用USE语句将会选择一个数据库成为当前数据库。后面的操作默认都在被选择的数据库中操作。
mysql> use HA; #进入HA数据库
Database changed
直接通过命令行,进入需要进入的数据库
[root@xuegod ~]# mysql -uroot -p123456 HA #后直接跟数据库名称
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.26 MySQL Community Server (GPL)
Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> select database();
±———–+
| database() |
±———–+
| HA |
±———–+
1 row in set (0.00 sec)
5、查看当前所在的数据库
mysql> select database(); #查看当前所在的数据库是哪一个
±———–+
| database() |
±———–+
| HA |
±———–+
1 row in set (0.00 sec)
如果当前没有在数据库内,显示为NULL
mysql> select database();
±———–+
| database() |
±———–+
| NULL |
±———–+
1 row in set (0.00 sec)
select user(); :显示当前登录用户
select now(); :显示当前的系统时间
mysql> select user(),database(),now();
±—————±———–±——————–+
| user() | database() | now() |
±—————±———–±——————–+
| root@localhost | HA | 2019-06-07 11:22:38 |
±—————±———–±——————–+
1 row in set (0.00 sec)
6、删除数据库
删除数据库没有提示,所以需要慎重
方法1:使用drop命令删除数据库
mysql> drop database
HA-test
;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
±——————-+
| Database |
±——————-+
| information_schema |
| HA |
| mysql |
| performance_schema |
| sys |
±——————-+
5 rows in set (0.00 sec)
方法2:直接到mysql的数据库目录,进行删除
mysql> create database
HA-test
;
Query OK, 1 row affected (0.00 sec)
[root@xuegod ~]# cd /var/lib/mysql
[root@xuegod mysql]# rm -rf HA@002dtest/
进入数据库,查看是否删除
mysql> show databases;
±——————-+
| Database |
±——————-+
| information_schema |
| HA |
| mysql |
| performance_schema |
| sys |
±——————-+
5 rows in set (0.00 sec)
方法3:使用判断语句,避免删除不存在的数据库出现报错信息
mysql> drop database
HA-test
;
ERROR 1008 (HY000): Can’t drop database ‘HA-test’; database doesn’t exist
mysql> drop database if exists
HA-test
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
同理,创建数据库是,可以使用if not exists来判断,避免数据库存在,创建报错
mysql> create database HA;
ERROR 1007 (HY000): Can’t create database ‘HA’; database exists
mysql> create database if not exists HA;
Query OK, 1 row affected, 1 warning (0.00 sec)
四、mysql语句(关于表的相关操作)
1、查看数据库中,有哪些表存在,要进入到数据库查询
mysql> use HA;
Database changed
mysql> show tables; #没有表存在
Empty set (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; #中间省略了很多表,没有复制
±————————–+
| Tables_in_mysql |
±————————–+
| columns_priv |
| proxies_priv |
| server_cost |
| user |
±————————–+
31 rows in set (0.00 sec) #总共有31个表
2、创建表
语法:create tables 表名(字段名 类型, 字段名 类型, 字段名 类型);
mysql> use HA;
Database changed
mysql> create table student(id int,name char(40),age int(10));
Query OK, 0 rows affected (0.02 sec)
3、查看表结构
语法:desc 表名;
mysql> desc student;
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+
| id | int(11) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
| age | int(10) | YES | | NULL | |
±——±———±—–±—-±——–±——+
3 rows in set (0.05 sec)
mysql> desc mysql.user; #查询表结果,可以跨库查询
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+ #中间省略没复制
| account_locked | enum(‘N’,‘Y’) | NO | | N | |
±———————–±———————————-±—–±—-±———————-±——+
45 rows in set (0.00 sec)
查看表结构的其它方法(了解)
mysql> explain HA.student;
mysql> show columns from HA.student;
mysql> show fields from HA.student;
4、查看创建表的时候,执行了那些命令
mysql> show create table student;
±——–±———————————————————————————————————————————————————-+
| Table | Create Table |
±——–±———————————————————————————————————————————————————-+
| student | CREATE TABLE
student
(
id
int(11) DEFAULT NULL,
name
char(40) DEFAULT NULL,
age
int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
±——–±———————————————————————————————————————————————————-+
1 row in set (0.00 sec)
注:修改默认字符集
这里我们可以看到,创建的数据库的字符截是Latin1拉丁文1,我们一般使用的都是utf8字符集,修改配置文件,重启mysql服务
在my.cnf配置文件,添加如下一行,重启服务
23 character_set_server=utf8
[root@xuegod ~]# !sys
systemctl restart mysqld
我们修改了配置文件后,之前创建的数据库,字符集是不会修改,需要删除后重建。
mysql> show create database HA;
±———±————————————————————–+
| Database | Create Database |
±———±————————————————————–+
| HA | CREATE DATABASE
HA
/*!40100 DEFAULT CHARACTER SET latin1 */ | #没修改
±———±————————————————————–+
1 row in set (0.00 sec)
删除重建
mysql> drop database HA;
mysql> create database HA;
Query OK, 1 row affected (0.00 sec)
mysql> use HA;
Database changed
mysql> create table student(id int(10),name char(25),age int(11));
Query OK, 0 rows affected (0.01 sec)
mysql> desc student;
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+
| id | int(10) | YES | | NULL | |
| name | char(25) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±——±———±—–±—-±——–±——+
3 rows in set (0.01 sec)
mysql> show create table student;
±——–±——————————————————————————————————————————————————–+
| Table | Create Table |
±——–±——————————————————————————————————————————————————–+
| student | CREATE TABLE
student
(
id
int(10) DEFAULT NULL,
name
char(25) DEFAULT NULL,
age
int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | #已经修改过来
±——–±——————————————————————————————————————————————————–+
1 row in set (0.00 sec)
mysql> show create database HA;
±———±————————————————————+
| Database | Create Database |
±———±————————————————————+
| HA | CREATE DATABASE
HA
/*!40100 DEFAULT CHARACTER SET utf8 */ |
±———±————————————————————+
1 row in set (0.00 sec)
5、删除表
mysql> create table student2(id int(20),name char(40),age int)ENGINE=MyISAM DEFAULT CHARSET=utf8; #指定数据库引擎和字符集
Query OK, 0 rows affected (0.01 sec)
mysql> show create table student2;
±———±———————————————————————————————————————————————————+
| Table | Create Table |
±———±———————————————————————————————————————————————————+
| student2 | CREATE TABLE
student2
(
id
int(20) DEFAULT NULL,
name
char(40) DEFAULT NULL,
age
int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
±———±———————————————————————————————————————————————————+
1 row in set (0.00 sec)
mysql> drop table student2;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
±————-+
| Tables_in_HA |
±————-+
| student |
±————-+
1 row in set (0.00 sec)
6、禁止显示预读信息
在登录数据库前,加上-A参数
没禁止前,会有很多提示信息:
[root@xuegod ~]# mysql -uroot -p123456
mysql> use HA;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
禁止后,如下:
[root@xuegod ~]# mysql -uroot -p123456 -A
mysql> use HA;
Database changed
7、修改表名称
语法:alter table 表名 rename 新表名;
mysql> select database(); #查看当前所在库
±———–+
| database() |
±———–+
| HA |
±———–+
1 row in set (0.00 sec)
mysql> show tables; #查看库下的所有表
±————-+
| Tables_in_HA |
±————-+
| student |
±————-+
1 row in set (0.00 sec)
mysql> alter table student rename students; #修改表名为students
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; #查看是否修改
±————-+
| Tables_in_HA |
±————-+
| students |
±————-+
1 row in set (0.00 sec)
8、修改表中的字段类型
语法:alter table 表名 modify 要修改的字段名要修改的类型;
mysql> desc students;
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+
| id | int(10) | YES | | NULL | |
| name | char(25) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±——±———±—–±—-±——–±——+
3 rows in set (0.00 sec)
mysql> alter table students modify id int(15); #修改表中字段的数值
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+
| id | int(15) | YES | | NULL | |
| name | char(25) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±——±———±—–±—-±——–±——+
3 rows in set (0.00 sec)
mysql> alter table students modify id char(15); #修改表中字段的类型
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+
| id | char(15) | YES | | NULL | |
| name | char(25) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±——±———±—–±—-±——–±——+
3 rows in set (0.00 sec)
9、修改表中的字段类型和字段名称
语法:alter table 表名 change 原字段名 新字段名字段类型;
注意:MySQL不支持同时修改多个字段。
mysql> desc students;
±——±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——±———±—–±—-±——–±——+
| id | int(15) | YES | | NULL | |
| name | char(25) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±——±———±—–±—-±——–±——+
3 rows in set (0.00 sec)
mysql> alter table students change name stname char(20); #修改字段名和字段数值
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——-±———±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——-±———±—–±—-±——–±——+
| id | int(15) | YES | | NULL | |
| stname | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±——-±———±—–±—-±——–±——+
3 rows in set (0.00 sec)
注:CHANGE 和MODIFY的区别:
CHANGE 对列进行重命名和更改列的类型,需给定旧的列名称和新的列名称、当前的类型。 MODIFY 可以改变列的类型,此时不需要重命名(不需给定新的列名称)
10、在表中添加新的字段
语法:alter table 表名 add 字段名 字段类型;
mysql> alter table students add sex enum(‘M’,‘W’); #增加一个字段,默认追加在最后
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——-±————–±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——-±————–±—–±—-±——–±——+
| id | int(15) | YES | | NULL | |
| stname | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum(‘M’,‘W’) | YES | | NULL | |
±——-±————–±—–±—-±——–±——+
4 rows in set (0.00 sec)
11、在表的第一列,增加一个字段
语法:alter table 表名 add 字段名 字段类型 first;
mysql> alter table students add uid int(10) first;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——-±————–±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——-±————–±—–±—-±——–±——+
| uid | int(10) | YES | | NULL | |
| id | int(15) | YES | | NULL | |
| stname | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum(‘M’,‘W’) | YES | | NULL | |
±——-±————–±—–±—-±——–±——+
5 rows in set (0.00 sec)
12、在age后面增加一个address字段
语法:alter table 表名 add 字段名 字段类型 after 字段名(需要添加到那个字段后就写那个字段名);
mysql> alter table students add address char(50) after age;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——–±————–±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——–±————–±—–±—-±——–±——+
| uid | int(10) | YES | | NULL | |
| id | int(15) | YES | | NULL | |
| stname | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| address | char(50) | YES | | NULL | |
| sex | enum(‘M’,‘W’) | YES | | NULL | |
±——–±————–±—–±—-±——–±——+
6 rows in set (0.00 sec)
13、删除表中的字段
语法:alter table 表名 drop 字段名;
mysql> alter table students drop address;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table students drop uid;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students;
±——-±————–±—–±—-±——–±——+
| Field | Type | Null | Key | Default | Extra |
±——-±————–±—–±—-±——–±——+
| id | int(15) | YES | | NULL | |
| stname | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum(‘M’,‘W’) | YES | | NULL | |
±——-±————–±—–±—-±——–±——+
4 rows in set (0.00 sec)
五、mysql语句,关于记录的操作(insert、delete、update语句)
1、insert的使用方法
语法:insert into 表名 values(字段值1,字段值2,字段值3);
mysql> insert into students values(1,‘张三’,18,‘M’);
Query OK, 1 row affected (0.01 sec)
mysql> select * from students;
±—–±——-±—–±—–+
| id | stname | age | sex |
±—–±——-±—–±—–+
| 1 | 张三 | 18 | M |
±—–±——-±—–±—–+
1 row in set (0.00 sec)
2、同时插入多条数据,使用逗号分开
mysql> insert into students values(2,‘harry’,20,‘W’),(3,‘tftp’,30,‘W’);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from students;
±—–±——-±—–±—–+
| id | stname | age | sex |
±—–±——-±—–±—–+
| 1 | 张三 | 18 | M |
| 2 | harry | 20 | W |
| 3 | tftp | 30 | W |
±—–±——-±—–±—–+
3 rows in set (0.00 sec)
3、查询表中的内容
mysql> select * from students;
±—–±——-±—–±—–+
| id | stname | age | sex |
±—–±——-±—–±—–+
| 1 | 张三 | 18 | M |
| 2 | harry | 20 | W |
| 3 | tftp | 30 | W |
±—–±——-±—–±—–+
3 rows in set (0.00 sec)
只查询需要的字段内容
mysql> select id,stname from students; #只写需要的字段名
±—–±——-+
| id | stname |
±—–±——-+
| 1 | 张三 |
| 2 | harry |
| 3 | tftp |
±—–±——-+
3 rows in set (0.00 sec)
4、跨库查询表的内容
mysql> use mysql;
Database changed
mysql> select * from students;
ERROR 1146 (42S02): Table ‘mysql.students’ doesn’t exist
mysql> select * from HA.students; #使用数据名.表名,进行跨库查询
±—–±——-±—–±—–+
| id | stname | age | sex |
±—–±——-±—–±—–+
| 1 | 张三 | 18 | M |
| 2 | harry | 20 | W |
| 3 | tftp | 30 | W |
±—–±——-±—–±—–+
3 rows in set (0.00 sec)
5、删除记录
语法:delete from 表名 判断条件;
例1:删除ID为3的记录
mysql> use HA;
Database changed
mysql> delete from students where id=3;
Query OK, 1 row affected (0.00 sec)
mysql> select * from students;
±—–±——-±—–±—–+
| id | stname | age | sex |
±—–±——-±—–±—–+
| 1 | 张三 | 18 | M |
| 2 | harry | 20 | W |
±—–±——-±—–±—–+
2 rows in set (0.00 sec)
例2:删除age为空的列
mysql> insert into students(id,stname,age) values (4,‘lisi’,‘0’);
mysql> select * from students;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 1 | 张三 | 18 |
| 2 | harry | 20 |
| 4 | lisi | 0 |
±—–±——-±—–+
3 rows in set (0.00 sec)
mysql> delete from students where age=0;
Query OK, 1 row affected (0.20 sec)
mysql> select * from students;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 1 | 张三 | 18 |
| 2 | harry | 20 |
±—–±——-±—–+
2 rows in set (0.00 sec)
6、更新记录
语法:update 表名 set 字段名=’’ 条件
例1:将ID值为4的列,stname字段改为wangwu
mysql> update students set stname=‘wangwu’ where id=4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from students;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 1 | 张三 | 18 |
| 2 | harry | 20 |
| 4 | wangwu | 0 |
±—–±——-±—–+
3 rows in set (0.00 sec)
例2:修改表的所有ID为2
mysql> update students set id=2;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 3 Changed: 2 Warnings: 0
mysql> select * from students;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 2 | 张三 | 18 |
| 2 | harry | 20 |
| 2 | wangwu | 0 |
±—–±——-±—–+
3 rows in set (0.00 sec)
例3:同时更新多个字段内容,用逗号分开
mysql> select * from students;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 2 | 张三 | 18 |
| 2 | harry | 20 |
| 2 | wangwu | 0 |
±—–±——-±—–+
3 rows in set (0.00 sec)
mysql> update students set stname=‘test’,age=50 where id=2;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from students;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 2 | test | 50 |
| 2 | test | 50 |
| 2 | test | 50 |
±—–±——-±—–+
3 rows in set (0.00 sec)
六、SQL基础查询语句
语法:select 字段名1,字段名2 from 表名 条件;
1、查询students表中的name,age
mysql> select id,stname from students;
±—–±———+
| id | stname |
±—–±———+
| 1 | zhangsan |
| 2 | wangwu |
| 3 | lisi |
| 4 | zhaoliu |
±—–±———+
4 rows in set (0.00 sec)
mysql> select id,stname from students where id=3;
±—–±——-+
| id | stname |
±—–±——-+
| 3 | lisi |
±—–±——-+
1 row in set (0.00 sec)
2、去重查询
mysql> select distinct stname,age from students;
±———±—–+
| stname | age |
±———±—–+
| zhangsan | 18 |
| wangwu | 25 |
| lisi | 30 |
| zhaoliu | 40 |
±———±—–+
4 rows in set (0.00 sec)
3、使用and和or进行多条件查询
or和and同时存在,先算and的两边值,逻辑与先执行
mysql> select * from students;
±—–±———±—–+
| id | stname | age |
±—–±———±—–+
| 1 | zhangsan | 18 |
| 2 | wangwu | 25 |
| 3 | lisi | 30 |
| 4 | zhaoliu | 40 |
±—–±———±—–+
4 rows in set (0.00 sec)
mysql> select * from students where id>1 and age<30;
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 2 | wangwu | 25 |
±—–±——-±—–+
1 row in set (0.00 sec)
mysql> select * from students where id>1 or age<30;
±—–±———±—–+
| id | stname | age |
±—–±———±—–+
| 1 | zhangsan | 18 |
| 2 | wangwu | 25 |
| 3 | lisi | 30 |
| 4 | zhaoliu | 40 |
±—–±———±—–+
4 rows in set (0.00 sec)
mysql> select * from students where id>1 and (age=25 or age=30);
±—–±——-±—–+
| id | stname | age |
±—–±——-±—–+
| 2 | wangwu | 25 |
| 3 | lisi | 30 |
±—–±——-±—–+
2 rows in set (0.00 sec)
4、区分大小写查询
mysql> select stname from students where stname=‘wangwu’;
±——-+
| stname |
±——-+
| wangwu |
±——-+
1 row in set (0.00 sec)
mysql> select stname from students where stname=‘WANGWU’;
±——-+
| stname |
±——-+
| wangwu |
±——-+
1 row in set (0.00 sec)
默认查询不区分大小写
mysql> select stname from students where binary stname=‘WANGWU’;
Empty set (0.00 sec)
mysql> select stname from students where binary stname=‘wangwu’;
±——-+
| stname |
±——-+
| wangwu |
±——-+
1 row in set (0.00 sec)
5、查询排序
语法:select distinct 字段1,字段2 from 表名 order by 字段名;
默认为升序asc
mysql> select distinct id from students order by id asc;
±—–+
| id |
±—–+
| 1 |
| 2 |
| 3 |
| 4 |
±—–+
4 rows in set (0.00 sec)
使用desc,进行降序排序
mysql> select distinct id from students order by id desc;
±—–+
| id |
±—–+
| 4 |
| 3 |
| 2 |
| 1 |
±—–+
4 rows in set (0.00 sec)