Chap2 SQL基础.docx
- 文档编号:28276740
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:46
- 大小:30.83KB
Chap2 SQL基础.docx
《Chap2 SQL基础.docx》由会员分享,可在线阅读,更多相关《Chap2 SQL基础.docx(46页珍藏版)》请在冰豆网上搜索。
Chap2SQL基础
第二章SQL基础
本章将通过丰富的实例对SQL语言的基础进行详细介绍,MySQL,使得读者不但能够学习到标准SQL的使用,又能够学习到MySQL中一些扩展SQL的使用方法。
SQL简介
当面对一个陌生的数据库时,通常需要一种方式与它进行交互,以完成用户所需要的各种工作,这个时候,就要用到SQL语言了。
SQL是StructureQueryLanguage(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言,由IBM在20世纪70年代开发出来,作为IBM关系数据库原型SystemR的原型关系语言,实现了关系数据库中的信息检索。
20世纪80年代初,美国国家标准局(ANSI)开始着手制定SQL标准,最早的ANSI标准于1986年完成,就被叫作SQL-86。
标准的出台使SQL作为标准关系数据库语言的地位得到了加强。
SQL标准目前已几经修改更趋完善。
正是由于SQL语言的标准化,所以大多数关系型数据库系统都支持SQL语言,它已经发展成为多种平台进行交互操作的底层会话语言。
(My)SQL使用入门
这里用了(My)SQL这样的标题,目的是在介绍标准SQL的同时,也将一些MySQL在标准SQL上的扩展一同介绍给大家。
希望读者看完本节后,能够对标准SQL的基本语法和MySQL的部分扩展语法有所了解。
二.1.1SQL分类
SQL语句主要可以划分为以下3个类别。
DDL(DataDefinitionLanguages)语句:
数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。
常用的语句关键字主要包括create、drop、alter等。
DML(DataManipulationLanguage)语句:
数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括insert、delete、udpate和select等。
DCL(DataControlLanguage)语句:
数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。
这些语句定义了数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括grant、revoke等。
二.1.2DDL语句
DDL是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改的操作语言。
它和DML语言的最大区别是DML只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。
DDL语句更多的被数据库管理员(DBA)所使用,一般的开发人员很少使用。
下面通过一些例子来介绍MySQL中常用DDL语句的使用方法。
1.创建数据库
启动MySQL服务之后,输入以下命令连接到MySQL服务器:
[mysql@db3~]$mysql-uroot-p
Enterpassword:
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis7344941toserverversion:
5.1.9-beta-log
Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.
mysql>
在以上命令行中,mysql代表客户端命令,-u后面跟连接的数据库用户,-p表示需要输入密码。
如果数据库设置正常,并输入正确的密码,将看到上面一段欢迎界面和一个mysql>提示符。
在欢迎界面中介绍了以下几部分内容。
命令的结束符,用;或者\g结束。
客户端的连接ID,这个数字记录了MySQL服务到目前为止的连接次数,每个新连接都会自动加1,本例中是7344941。
MySQL服务器的版本,本例中是“5.1.9-beta-log”,说明是5.1.9的测试版,如果是标准版,则会用Standard代替Beta。
通过“help;”或者“\h”命令来显示帮助内容,通过“\c”命令来清除命令行buffer。
在mysql>提示符后面输入所要执行的的SQL语句,每个SQL语句以分号或者\g结束,按回车键执行。
因为所有的数据都存储在数据库中,因此需要学习的第一个命令是创建数据库,语法如下所示:
CREATEDATABASEdbname
例如,创建数据库test1,命令执行如下:
mysql>createdatabasetest1;
QueryOK,1rowaffected(0.00sec)
可以发现,执行完创建命令后,下面有一行提示“QueryOK,1rowaffected(0.00sec)”,这段提示可以分为3部分,“QueryOK”表示上面的命令执行成功,读者可能奇怪,又不是执行查询操作,为什么显示查询成功?
其实这是MySQL的一个特点,所有的DDL和DML(不包括SELECT)操作执行成功后都显示“QueryOK”,这里理解为执行成功就可以了;“1rowaffected”表示操作只影响了数据库中一行的记录,“0.00sec”则记录了操作执行的时间。
如果已经存在这个数据库,系统会提示:
mysql>createdatabasetest1;
ERROR1007(HY000):
Can'tcreatedatabase'test1';databaseexists
这个时候,如果需要知道系统中都存在哪些数据库,可以用以下命令来查看:
mysql>showdatabases;
+--------------------+
|Database|
+--------------------+
|information_schema|
|cluster|
|mysql|
|test|
|test1|
+--------------------+
5rowsinset(0.00sec)
可以发现,在上面的列表中除了刚刚创建的test1外,还有另外4个数据库,它们都是安装MySQL时系统自动创建的,其各自功能如下。
information_schema:
主要存储了系统中的一些数据库对象信息。
比如用户表信息、列信息、权限信息、字符集信息、分区信息等。
cluster:
存储了系统的集群信息。
mysql:
存储了系统的用户权限信息。
test:
系统自动创建的测试数据库,任何用户都可以使用。
在查看了系统中已有的数据库后,可以用如下命令选择要操作的数据库:
USEdbname
例如,选择数据库test1:
mysql>usetest1
Databasechanged
然后再用以下命令来查看test1数据库中创建的所有数据表:
mysql>showtables;
Emptyset(0.00sec)
由于test1是刚创建的数据库,还没有表,所以显示为空。
命令行下面的“Emptyset”表示操作的结果集为空。
如果查看一下mysql数据库里面的表,则可以得到以下信息:
mysql>usemysql
Databasechanged
mysql>showtables;
+---------------------------+
|Tables_in_mysql|
+---------------------------+
|columns_priv|
|db|
|event|
|func|
|general_log|
|help_category|
|help_keyword|
|help_relation|
|help_topic|
|host|
|plugin|
|proc|
|procs_priv|
|slow_log|
|tables_priv|
|time_zone|
|time_zone_leap_second|
|time_zone_name|
|time_zone_transition|
|time_zone_transition_type|
|user|
+---------------------------+
21rowsinset(0.00sec)
2.删除数据库
删除数据库的语法很简单,如下所示:
dropdatabasedbname;
例如,要删除test1数据库可以使用以下语句:
mysql>dropdatabasetest1;
QueryOK,0rowsaffected(0.00sec)
可以发现,提示操作成功后,后面却显示了“0rowsaffected”,这个提示可以不用管它,在MySQL里面,drop语句操作的结果显示都是“0rowsaffected”。
注意:
数据库删除后,下面的所有表数据都会全部删除,所以删除前一定要仔细检查并做好相应备份.
3.创建表
在数据库中创建一张表的基本语法如下:
CREATETABLEtablename(column_name_1column_type_1constraints,
column_name_2column_type_2constraints,……column_name_ncolumn_type_nconstraints)
因为MySQL的表名是以目录的形式存在于磁盘上,所以表名的字符可以用任何目录名允许的字符。
column_name是列的名字,column_type是列的数据类型,contraints是这个列的约束条件,在后面的章节中会详细介绍。
例如,创建一个名称为emp的表。
表中包括3个字段,ename(姓名),hiredate(雇用日期)、sal(薪水),字段类型分别为varchar(10)、date、int
(2)(关于字段类型将会在下一章中介绍):
mysql>createtableemp(enamevarchar(10),hiredatedate,saldecimal(10,2),deptnoint
(2));
QueryOK,0rowsaffected(0.02sec)
表创建完毕后,如果需要查看一下表的定义,可以使用如下命令:
DESCtablename
例如,查看emp表,将输出以下信息:
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(10)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
+----------+---------------+------+-----+---------+-------+
4rowsinset(0.00sec)
虽然desc命令可以查看表定义,但是其输出的信息还是不够全面,为了查看更全面的表定义信息,有时就需要通过查看创建表的SQL语句来得到,可以使用如下命令实现:
mysql>showcreatetableemp\G;
***************************1.row***************************
Table:
emp
CreateTable:
CREATETABLE`emp`(
`ename`varchar(20)DEFAULTNULL,
`hiredate`dateDEFAULTNULL,
`sal`decimal(10,2)DEFAULTNULL,
`deptno`int
(2)DEFAULTNULL,
KEY`idx_emp_ename`(`ename`)
)ENGINE=InnoDBDEFAULTCHARSET=gbk
1rowinset(0.02sec)
ERROR:
Noqueryspecified
mysql>
从上面表的创建SQL语句中,除了可以看到表定义以外,还可以看到表的engine(存储引擎)和charset(字符集)等信息。
“\G”选项的含义是使得记录能够按照字段竖着排列,对于内容比较长的记录更易于显示。
4.删除表
表的删除命令如下:
DROPTABLEtablename
例如,要删除数据库emp可以使用以下命令:
mysql>droptableemp;
QueryOK,0rowsaffected(0.00sec)
5.修改表
对于已经创建好的表,尤其是已经有大量数据的表,如果需要对表做一些结构上的改变,我们可以先将表删除(drop),然后再按照新的表定义重建表。
这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载。
而且,如果有服务在访问表,也会对服务产生影响。
因此,在大多数情况下,表结构的更改一般都使用altertable语句,以下是一些常用的命令。
(1)修改表类型,语法如下:
ALTERTABLEtablenameMODIFY[COLUMN]column_definition[FIRST|AFTERcol_name]
例如,修改表emp的ename字段定义,将varchar(10)改为varchar(20):
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(10)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
+----------+---------------+------+-----+---------+-------+
4rowsinset(0.00sec)
mysql>altertableempmodifyenamevarchar(20);
QueryOK,0rowsaffected(0.03sec)
Records:
0Duplicates:
0Warnings:
0
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
+----------+---------------+------+-----+---------+-------+
4rowsinset(0.00sec)
(2)增加表字段,语法如下:
ALTERTABLEtablenameADD[COLUMN]column_definition[FIRST|AFTERcol_name]
例如,表emp上新增加字段age,类型为int(3):
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
+----------+---------------+------+-----+---------+-------+
4rowsinset(0.00sec)
mysql>altertableempaddcolumnageint(3);
QueryOK,0rowsaffected(0.03sec)
Records:
0Duplicates:
0Warnings:
0
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
|age|int(3)|YES||||
+----------+---------------+------+-----+---------+-------+
5rowsinset(0.00sec)
(3)删除表字段,语法如下:
ALTERTABLEtablenameDROP[COLUMN]col_name
例如,将字段age删除掉:
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
|age|int(3)|YES||||
+----------+---------------+------+-----+---------+-------+
5rowsinset(0.00sec)
mysql>altertableempdropcolumnage;
QueryOK,0rowsaffected(0.04sec)
Records:
0Duplicates:
0Warnings:
0
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
+----------+---------------+------+-----+---------+-------+
4rowsinset(0.00sec)
(4)字段改名,语法如下:
ALTERTABLEtablenameCHANGE[COLUMN]old_col_namecolumn_definition
[FIRST|AFTERcol_name]
例如,将age改名为age1,同时修改字段类型为int(4):
mysql>descemp;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|sal|decimal(10,2)|YES||||
|deptno|int
(2)|YES||||
|age|int(3)|YES||||
+----------+---------------+------+-----+---------+-------+
mysql>altertableempchangeageage1int(4);
QueryOK,0rowsaffected(0.02sec)
Records:
0Duplicates:
0Warnings:
0
mysql>descemp
->;
+----------+---------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+---------------+------+-----+---------+-------+
|ename|varchar(20)|YES||||
|hiredate|date|YES||||
|
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Chap2 SQL基础 SQL 基础