2.1 什么是SQL
SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。
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脚本的路径文件名尽量避免中文,空格,或者路径名太长等情况。
2.7.2 导出sql脚本命令
在命令行客户端不登录mysql,使用mysqldump命令。
mysqldump -u用戶名 -p密码 数据库名 > 脚本名.sql
mysqldump -u用戶名 -p密码 数据库名 表名 > 脚本名.sql