MySQL第二章

101 阅读6分钟

2.1 什么是SQL

SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。

SQL语言是什么.png

2.2 SQL演示

2.2.1 数据库

1、查看所有的数据库

show databases;

2、创建自己的数据库

create database 数据库名;#创建atguigudb数据库
create database atguigudb;

3、删除数据库

drop database 数据库名;
#删除mysql数据库
drop database mysql;

4、使用自己的数据库

use 数据库名;#使用mysql数据库
use mysql;

说明:如果没有使用use语句,后面针对数据库的操作也没有加“数据名”的限定,那么会报“ERROR 1046 (3D000): No database selected”(没有选择数据库)

使用完use语句之后,如果接下来的SQL都是针对一个数据库操作的,那就不用重复use了,如果要针对另一个数据库操作,那么要重新use。

2.2.2 数据表

1、查看某个库的所有表格

show tables from 数据库名;
​
show tables;  #如果是查看前面use的数据库中的所有表格,可以省略“from 数据库名”

2、创建新的表格

create table 【数据库名.】表名称( #如果新表是建在use的数据库中,可以省略表名前面的“数据库名.”
    字段名  数据类型,
    字段名 数据类型
);

说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。

#创建学生表
create table student(
    id int,
    name varchar(20)  #要求名字最长不超过20个字符
);

3、查看定义好的表结构

desc 【数据库名.】表名称;
desc student; #如果要查看的表是在前面use的数据库中,可以省略表名前面的“数据库名.”

4、添加一条记录

insert into 【数据库名.】表名称 values(值列表);
​
#添加两条记录到student表中
#如果要添加记录的表是在前面use的数据库中,可以省略表名前面的“数据库名.”
insert into student values(1,'张三');
insert into student values(2,'李四');

5、查看一个表的数据

select * from 【数据库名.】表名称; #*表示查看所有列
select * from student;

6、删除表

drop table 【数据库名.】表名称;
#删除学生表
#如果要删除的表是在前面use的数据库中,可以省略表名前面的“数据库名.”
drop table student;

2.3 SQL的分类

DDL语句:数据定义语句(Data Define Language),例如:创建(create),修改(alter),删除(drop)等

DML语句:数据操作语句,例如:增(insert),删(delete),改(update),查(select)

因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类,DQL(数据查询语言),DR(获取)L

DCL语句:数据控制语句,例如:grant,commit,rollback等

其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。

2.4 SQL语法规范

(1)mysql的sql语法不区分大小写

A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。

ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)

B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。

(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号,不要使用纯数字来命名

(3)建议不要使用mysql的关键字等来作为表名、字段名、数据库名等,

(4)习惯上在SQL语句中表名、字段名、数据库名等使用`(飘号)引起来

(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| haha               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
​
mysql> create database haha;
ERROR 1007 (HY000): Can't create database 'haha'; database exists
mysql> show tables;
+---------------------+
| Tables_in_haha      |
+---------------------+
| student             |
| temp                |
+---------------------+
2 rows in set (0.00 sec)
​
mysql> create table temp(id int);
ERROR 1050 (42S01): Table 'temp' already exists
mysql> create table tt(
    ->  id int,
    ->  id int
    -> );
ERROR 1060 (42S21): Duplicate(重复) column name 'id'

(6)数据库和表名、字段名等对象名中间不要包含空格

create database  ha ha;
​
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 'haha' at line 1

(7)给字段和表取别名时,as可以省略

  • 表的别名不能包含空格
  • 如果给字段取别名,也尽量不包含空格,包含字段别名中包含空格,请用双引号
select 字段名1 as 别名1, 字段名2 as 别名2 from 表名称 as 别名;
mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)
​
mysql> select id "学号",name "姓名" from student 学生表;
+------+------+
| 学号 | 姓名 |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)
​
mysql> select id 学号,name 姓名 from student;
+------+------+
| 学号 | 姓名 |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)
​
mysql> select id 学 号,name 姓 名 from student; 
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 n
ear '号,name 姓 名 from student' at line 1

2.5 标点符号

mysql脚本中标点符号的要求如下:

  • 本身成对的标点符号必须成对,例如:(),'',""。
  • 所有标点符号必须英文状态下半角输入方式下输入。

几个特殊的标点符号:

  • 小括号():在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。
  • 单引号'':字符串和日期类型的数据值使用单引号''引起来,数值类型的不需要加标点符号。
  • 双引号"":列的别名可以使用双引号"",给表名取别名==不要使用==双引号。
create table tt(
    id int
    ;
    
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 '' at line 2
create table temp(
    c char
);
insert into temp values('尚) ; #缺一半单引号
                        
insert into temp values(‘尚’) ;  #标点符号是中文
mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)
​
mysql> select id "学号",name "姓名" from student;
+------+------+
| 学号 | 姓名 |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)

2.6 SQL脚本中如何加注释

SQL脚本中如何加注释

  • 单行注释:#注释内容(mysql特有的)
  • 单行注释:--空格注释内容 其中--后面的空格必须有
  • 多行注释:/* 注释内容 */
create table tt(
    id int, #编号
    `name` varchar(20), -- 姓名
    gender enum('男','女')
    /*
    性别只能从男或女中选择一个,
    不能两个都选,或者选择男和女之外的
    */
);

2.7 导入导出sql脚本

2.7.1 导入执行sql脚本命令

在命令行客户端==登录mysql==,使用source指令导入

mysql> source d:\练习脚本.sql

注意:

(1)在使用命令行导入SQL脚本之前,请使用记事本或NotePad++等文本编辑器打开SQL脚本查看SQL脚本中是否有USE语句,如果没有,那么在命令行中需要先使用USE语句指定具体的数据库,否则会报“No database selected”的错误。

(2)sql脚本的路径文件名尽量避免中文,空格,或者路径名太长等情况。

image.png

2.7.2 导出sql脚本命令

在命令行客户端不登录mysql,使用mysqldump命令。

mysqldump -u用戶名 -p密码 数据库名 > 脚本名.sql
mysqldump -u用戶名 -p密码 数据库名 表名 > 脚本名.sql

image.png